feat(http): graceful shutdown + startHttpServer seam (Fase B) #47

Merged
janpeter merged 2 commits from feat/http-graceful-shutdown into main 2026-06-10 19:47:26 +02:00
Owner

Summary

http.ts-hardening voor het permanent draaien van de HTTP-MCP (Fase B, intern-only service):

  • Graceful shutdown: SIGTERM/SIGINT → server.close() (drain in-flight) → na een 10s timeout server.closeAllConnections?.() + process.exit(1), anders exit(0) zodra alles dicht is. Container-restarts (docker compose up) slaan zo geen in-flight requests hard weg. tini (PID 1) forwardt het signaal naar node.
  • Testbare seam: startHttpServer() geëxporteerd (retourneert de http.Server); een realpathSync-main-guard zorgt dat de server alleen start als dit bestand het entrypoint is (node dist/http.js / tsx src/http.ts), niet bij import vanuit een test.
  • Geen wijziging aan de request-flow, auth of routes.

Test Plan

  • Nieuwe spawn-test __tests__/http-shutdown.test.ts: start de server, /health up, SIGTERM → proces stopt schoon (exit 0, niet door het signaal gedood).
  • npm run typecheck schoon.
  • Volledige suite groen: 678 tests (85 files).

Onderdeel van Fase B (permanente intern-only HTTP-MCP). Spec/plan: scrum4me-workers docs/superpowers/{specs,plans}/2026-06-08-mcp-http-permanent*.

🤖 Generated with Claude Code

## Summary `http.ts`-hardening voor het permanent draaien van de HTTP-MCP (Fase B, intern-only service): - **Graceful shutdown**: SIGTERM/SIGINT → `server.close()` (drain in-flight) → na een 10s timeout `server.closeAllConnections?.()` + `process.exit(1)`, anders `exit(0)` zodra alles dicht is. Container-restarts (`docker compose up`) slaan zo geen in-flight requests hard weg. `tini` (PID 1) forwardt het signaal naar node. - **Testbare seam**: `startHttpServer()` geëxporteerd (retourneert de `http.Server`); een `realpathSync`-main-guard zorgt dat de server alleen start als dit bestand het entrypoint is (`node dist/http.js` / `tsx src/http.ts`), niet bij `import` vanuit een test. - Geen wijziging aan de request-flow, auth of routes. ## Test Plan - [x] Nieuwe spawn-test `__tests__/http-shutdown.test.ts`: start de server, `/health` up, SIGTERM → proces stopt schoon (exit 0, niet door het signaal gedood). - [x] `npm run typecheck` schoon. - [x] Volledige suite groen: **678 tests** (85 files). Onderdeel van Fase B (permanente intern-only HTTP-MCP). Spec/plan: scrum4me-workers `docs/superpowers/{specs,plans}/2026-06-08-mcp-http-permanent*`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
SIGTERM/SIGINT → server.close (drain) → na 10s timeout closeAllConnections + exit,
zodat container-restarts in-flight requests niet hard wegslaan. startHttpServer()
geëxporteerd (testbare seam); main-guard zodat import niet auto-listent.
Spawn-test: /health up → SIGTERM → exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-mcp!47
No description provided.