[E01-S01-T03] ADR: Fastify #410

Merged
kpcto merged 1 commits from feature/190 into main 2026-08-31 00:43:51 +00:00
Member

What changed

Commits the Fastify 5 HTTP runtime decision as ADR-004 for [E01-S01-T03] ADR: Fastify (#190):

  • docs/adr/ADR-004-fastify-5-http-runtime.md (new) — the ADR, with the six required sections in order:
    • Context — every inbound request enters the platform through one HTTP runtime; public rendering pipeline starts at the Fastify route layer (Architecture wiki §19); v0.1 public surface (§42); the choice is already recorded in ADR-001 ("Node.js 24 LTS with Fastify 5") and pinned as Fastify 5.12.1, class B, in the technology stack golden tuple (§5.2/§7); the current node:http bootstrap (E00-S02-T03) is a documented stand-in until the Fastify 5 application shell lands
    • Decision — EPPP serves all inbound HTTP on the Fastify 5 HTTP runtime, exact-pinned to 5.12.1; one Fastify 5 application hosts public routes, admin API (/api/admin/v1/*) and health/readiness; approved lifecycle plugin set (§5.2) with Pino 10.3.1 logging; Fastify 6 upgrade is a deliberate, ADR-recorded major change (§6); decision text matches the ADR index entry (§70)
    • Alternatives — Express (rejected: no schema validation, conflicts with ADR-011), Hono (rejected: edge/serverless orientation conflicts with ADR-001 process model), Koa (rejected: minimal core, hand-assembled stack), bare node:http (rejected for the real API: bootstrap only), Fastify 5 (chosen)
    • Consequences — positive/negative/neutral trade-offs, including schema-first validation alignment with ADR-011, plugin encapsulation matching module boundaries, class B support horizon, and the shell landing later
    • Operational impact — one Fastify 5 process on validated HOST/PORT (E00-S04-T04), readiness gated on migrations (E00-S03-T06), redacting Pino logger (E00-S04-T03), security posture from the approved plugin set, deploy/rollback unchanged (single image, ADR-001), upgrade lanes (§6/§8)
    • Revisit trigger — Fastify 6 stable + plugins compatible + suite green + extension contracts stable (§6); class B policy change; the shell failing to satisfy §42 or the v1.1 boundary contracts (ADR-027..032)
  • Documentation-only: no source, manifest, lockfile, workflow or test changes. Rollback is a revert of this commit.

Criterion → test table

Acceptance criterion Test / evidence
A committed ADR records the Fastify 5 HTTP runtime decision as ADR-004 docs/adr/ADR-004-fastify-5-http-runtime.md committed on feature/190; the H1 heading reads # ADR-004: Fastify 5 HTTP runtime and the Decision section records the Fastify 5 HTTP runtime choice. CI gate: the formatting-lint stage scans every git-tracked text file (including the new ADR) — verified locally with the committed policy suite: node --test tests/formatting-policy.test.mjs → 13/13 pass on the branch
The ADR contains Context, Decision, Alternatives, Consequences, Operational impact and Revisit trigger All six ## sections present, in the mandated order, in the committed file (document review per the issue test plan); locally verified against the committed file content
The decision text matches the ADR index entry in section 70 ADR index (§70) lists | ADR-004 | Fastify 5 HTTP runtime |; the ADR's decision text is Fastify 5 HTTP runtime and the Decision section states it matches the ADR index entry (ADR-004, section 70)

Risks / notes

  • Documentation-only change (one new markdown file); no runtime, schema, dependency, lockfile or CI-workflow impact. Rollback = revert the single commit.
  • CI on this PR runs the full seven-stage pipeline; the only stage touching this change is formatting-lint (tracked-file policy), which passes locally; all other stages are unaffected but will run as usual.
  • Out of scope per the brief: the other thirteen E01-S01 ADR subjects are separate task cards.

Closes #190

## What changed Commits the Fastify 5 HTTP runtime decision as **ADR-004** for [E01-S01-T03] ADR: Fastify (#190): - **`docs/adr/ADR-004-fastify-5-http-runtime.md`** (new) — the ADR, with the six required sections in order: - **Context** — every inbound request enters the platform through one HTTP runtime; public rendering pipeline starts at the Fastify route layer (Architecture wiki §19); v0.1 public surface (§42); the choice is already recorded in ADR-001 ("Node.js 24 LTS with Fastify 5") and pinned as Fastify 5.12.1, class B, in the technology stack golden tuple (§5.2/§7); the current `node:http` bootstrap (E00-S02-T03) is a documented stand-in until the Fastify 5 application shell lands - **Decision** — EPPP serves all inbound HTTP on the **Fastify 5 HTTP runtime**, exact-pinned to 5.12.1; one Fastify 5 application hosts public routes, admin API (`/api/admin/v1/*`) and health/readiness; approved lifecycle plugin set (§5.2) with Pino 10.3.1 logging; Fastify 6 upgrade is a deliberate, ADR-recorded major change (§6); decision text matches the ADR index entry (§70) - **Alternatives** — Express (rejected: no schema validation, conflicts with ADR-011), Hono (rejected: edge/serverless orientation conflicts with ADR-001 process model), Koa (rejected: minimal core, hand-assembled stack), bare `node:http` (rejected for the real API: bootstrap only), Fastify 5 (chosen) - **Consequences** — positive/negative/neutral trade-offs, including schema-first validation alignment with ADR-011, plugin encapsulation matching module boundaries, class B support horizon, and the shell landing later - **Operational impact** — one Fastify 5 process on validated HOST/PORT (E00-S04-T04), readiness gated on migrations (E00-S03-T06), redacting Pino logger (E00-S04-T03), security posture from the approved plugin set, deploy/rollback unchanged (single image, ADR-001), upgrade lanes (§6/§8) - **Revisit trigger** — Fastify 6 stable + plugins compatible + suite green + extension contracts stable (§6); class B policy change; the shell failing to satisfy §42 or the v1.1 boundary contracts (ADR-027..032) - Documentation-only: no source, manifest, lockfile, workflow or test changes. Rollback is a revert of this commit. ## Criterion → test table | Acceptance criterion | Test / evidence | | --- | --- | | A committed ADR records the Fastify 5 HTTP runtime decision as ADR-004 | `docs/adr/ADR-004-fastify-5-http-runtime.md` committed on `feature/190`; the H1 heading reads `# ADR-004: Fastify 5 HTTP runtime` and the Decision section records the Fastify 5 HTTP runtime choice. CI gate: the `formatting-lint` stage scans every git-tracked text file (including the new ADR) — verified locally with the committed policy suite: `node --test tests/formatting-policy.test.mjs` → 13/13 pass on the branch | | The ADR contains Context, Decision, Alternatives, Consequences, Operational impact and Revisit trigger | All six `##` sections present, in the mandated order, in the committed file (document review per the issue test plan); locally verified against the committed file content | | The decision text matches the ADR index entry in section 70 | ADR index (§70) lists `\| ADR-004 \| Fastify 5 HTTP runtime \|`; the ADR's decision text is **Fastify 5 HTTP runtime** and the Decision section states it matches the ADR index entry (ADR-004, section 70) | ## Risks / notes - Documentation-only change (one new markdown file); no runtime, schema, dependency, lockfile or CI-workflow impact. Rollback = revert the single commit. - CI on this PR runs the full seven-stage pipeline; the only stage touching this change is `formatting-lint` (tracked-file policy), which passes locally; all other stages are unaffected but will run as usual. - Out of scope per the brief: the other thirteen E01-S01 ADR subjects are separate task cards. Closes #190
bot-implementer added 1 commit 2026-08-31 00:34:21 +00:00
docs(adr): record Fastify 5 HTTP runtime decision as ADR-004
CI / Stage 6 — PostgreSQL integration tests (E00-S05-T01) (pull_request) Successful in 1m13s
CI / Stage 4 — Unit tests (E00-S05-T01) (pull_request) Successful in 1m40s
CI / Stage 5 — Architecture tests (E00-S05-T01) (pull_request) Successful in 3m11s
CI / Stage 7 — Build the admin and server applications (E00-S05-T01) (pull_request) Successful in 1m8s
CI / Stage 2 — Typecheck (E00-S05-T01) (pull_request) Successful in 1m12s
CI / Stage 1 — Frozen lockfile install (E00-S05-T01) (pull_request) Successful in 44s
CI / Stage 3 — Formatting/lint policy (E00-S05-T01) (pull_request) Successful in 44s
b8f0abdb0d
kpcto merged commit 2a229bbf3f into main 2026-08-31 00:43:51 +00:00
kpcto deleted branch feature/190 2026-08-31 00:43:52 +00:00
Sign in to join this conversation.