[E01-S01-T02] ADR: Node/TypeScript #407

Merged
kpcto merged 2 commits from feature/189 into main 2026-08-31 00:51:06 +00:00
Member

What changed

Commits the Node.js 24 LTS runtime decision as ADR-002 and the TypeScript 6.0.3 language decision as ADR-003 for [E01-S01-T02] ADR: Node/TypeScript (#189):

  • docs/adr/ADR-002-node-24-lts-runtime.md (new) — the runtime ADR, with the six required sections in order:
    • Context — one shared runtime across the modular monolith (ADR-001); pnpm monorepo already engine-restricted to 24.x (engines.node + engineStrict) and CI on Node 24 (E00-S01-T08); technology stack wiki class A (fixed upstream EOL) with golden tuple pinned to Node 24.19.0 LTS (Krypton)
    • Decision — EPPP runs on the Node.js 24 LTS runtime line, exact-pinned to 24.19.0 in the golden tuple and the node:24.19.0-bookworm-slim image; engine restricted to 24.x, enforced at install and in CI; decision text matches the ADR index entry (ADR-002, §70)
    • Alternatives — Node 22 LTS (rejected, earlier EOL), Node 26 non-LTS (rejected), Node 24 floating latest (rejected), Node 24 LTS exact-pinned 24.19.0 (chosen)
    • Consequences — positive/negative/neutral trade-offs (fixed EOL horizon, reproducible pins, engine floor, shared-runtime neutrality)
    • Operational impact — image pin + digest recording, install-time engine enforcement, CI as operational proof, LTS patch cadence
    • Revisit trigger — Node 26 LTS + compatibility suite, security-emergency/patch events, runtime divergence on ADR-001 extraction
  • docs/adr/ADR-003-typescript-6-0-3.md (new) — the language ADR, with the six required sections in order:
    • Context — TypeScript across every module boundary off the strict base tsconfig (E00-S01-T10); already exact-pinned to 6.0.3 in manifest and lockfile (E00-S01-T09); wiki class C with 6.0 as the bridge release (TS 7.0 GA'd 2026-07 without a stable programmatic API before 7.1)
    • Decision — EPPP uses TypeScript 6.0.3 exact-pinned; 6.0.3 baseline with a formal review after TS 7.1 stable; decision text matches the ADR index entry (ADR-003, §70)
    • Alternatives — TS 7.0 at GA (rejected, unstable programmatic API), TS 6.x floating range (rejected), TS 5.x (rejected), TS 6.0.3 exact-pinned (chosen)
    • Consequences — positive/negative/neutral trade-offs (reproducible typecheck, fixed feature set, class C upgrade control)
    • Operational impact — lockfile-resolved single typescript@6.0.3, per-package tsc pin, CI stage 2 typecheck, class C upgrade lanes
    • Revisit trigger — TS 7.1 stable formal review, ecosystem/feature need, boundary-contract representability (ADR-027..032)
  • Documentation-only: no source, manifest, lockfile, workflow or test changes. Rollback is a revert of these commits.

Criterion → test table

Acceptance criterion Test / evidence
A committed ADR records the Node.js 24 LTS runtime decision as ADR-002 docs/adr/ADR-002-node-24-lts-runtime.md committed on feature/189; the H1 heading reads # ADR-002: Node.js 24 LTS runtime and the Decision section records the Node.js 24 LTS runtime choice. CI gate: the formatting-lint stage scans every git-tracked text file (including the new ADRs) — verified locally with the committed policy suite: node --test tests/formatting-policy.test.mjs → 13/13 pass on the branch
A committed ADR records the TypeScript 6.0.3 language decision as ADR-003 docs/adr/ADR-003-typescript-6-0-3.md committed on feature/189; the H1 heading reads # ADR-003: TypeScript 6.0.3 language decision and the Decision section records the TypeScript 6.0.3 choice (bridge release, review after TS 7.1 stable). Same CI gate as above, verified locally
Each ADR contains Context, Decision, Alternatives, Consequences, Operational impact and Revisit trigger Both files contain all six ## sections, in the mandated order, in the committed files (document review per the issue test plan); locally verified against the committed file contents
Each decision matches the ADR index ADR index (§70) lists | ADR-002 | Node.js 24 LTS runtime | and | ADR-003 | TypeScript 6.0.3 pending TS7.1 ecosystem review |; ADR-002's decision text is Node.js 24 LTS runtime and ADR-003's is TypeScript 6.0.3 pending TS7.1 ecosystem review, and both Decision sections state they match the ADR index entry (section 70)

Risks / notes

  • Documentation-only change (two new markdown files); no runtime, schema, dependency, lockfile or CI-workflow impact. Rollback = revert the two commits.
  • 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 #189

## What changed Commits the Node.js 24 LTS runtime decision as **ADR-002** and the TypeScript 6.0.3 language decision as **ADR-003** for [E01-S01-T02] ADR: Node/TypeScript (#189): - **`docs/adr/ADR-002-node-24-lts-runtime.md`** (new) — the runtime ADR, with the six required sections in order: - **Context** — one shared runtime across the modular monolith (ADR-001); pnpm monorepo already engine-restricted to 24.x (`engines.node` + `engineStrict`) and CI on Node 24 (E00-S01-T08); technology stack wiki class A (fixed upstream EOL) with golden tuple pinned to Node 24.19.0 LTS (Krypton) - **Decision** — EPPP runs on the **Node.js 24 LTS** runtime line, exact-pinned to 24.19.0 in the golden tuple and the `node:24.19.0-bookworm-slim` image; engine restricted to 24.x, enforced at install and in CI; decision text matches the ADR index entry (ADR-002, §70) - **Alternatives** — Node 22 LTS (rejected, earlier EOL), Node 26 non-LTS (rejected), Node 24 floating latest (rejected), Node 24 LTS exact-pinned 24.19.0 (chosen) - **Consequences** — positive/negative/neutral trade-offs (fixed EOL horizon, reproducible pins, engine floor, shared-runtime neutrality) - **Operational impact** — image pin + digest recording, install-time engine enforcement, CI as operational proof, LTS patch cadence - **Revisit trigger** — Node 26 LTS + compatibility suite, security-emergency/patch events, runtime divergence on ADR-001 extraction - **`docs/adr/ADR-003-typescript-6-0-3.md`** (new) — the language ADR, with the six required sections in order: - **Context** — TypeScript across every module boundary off the strict base tsconfig (E00-S01-T10); already exact-pinned to 6.0.3 in manifest and lockfile (E00-S01-T09); wiki class C with 6.0 as the bridge release (TS 7.0 GA'd 2026-07 without a stable programmatic API before 7.1) - **Decision** — EPPP uses **TypeScript 6.0.3** exact-pinned; 6.0.3 baseline with a formal review after TS 7.1 stable; decision text matches the ADR index entry (ADR-003, §70) - **Alternatives** — TS 7.0 at GA (rejected, unstable programmatic API), TS 6.x floating range (rejected), TS 5.x (rejected), TS 6.0.3 exact-pinned (chosen) - **Consequences** — positive/negative/neutral trade-offs (reproducible typecheck, fixed feature set, class C upgrade control) - **Operational impact** — lockfile-resolved single `typescript@6.0.3`, per-package `tsc` pin, CI stage 2 typecheck, class C upgrade lanes - **Revisit trigger** — TS 7.1 stable formal review, ecosystem/feature need, boundary-contract representability (ADR-027..032) - Documentation-only: no source, manifest, lockfile, workflow or test changes. Rollback is a revert of these commits. ## Criterion → test table | Acceptance criterion | Test / evidence | | --- | --- | | A committed ADR records the Node.js 24 LTS runtime decision as ADR-002 | `docs/adr/ADR-002-node-24-lts-runtime.md` committed on `feature/189`; the H1 heading reads `# ADR-002: Node.js 24 LTS runtime` and the Decision section records the Node.js 24 LTS runtime choice. CI gate: the `formatting-lint` stage scans every git-tracked text file (including the new ADRs) — verified locally with the committed policy suite: `node --test tests/formatting-policy.test.mjs` → 13/13 pass on the branch | | A committed ADR records the TypeScript 6.0.3 language decision as ADR-003 | `docs/adr/ADR-003-typescript-6-0-3.md` committed on `feature/189`; the H1 heading reads `# ADR-003: TypeScript 6.0.3 language decision` and the Decision section records the TypeScript 6.0.3 choice (bridge release, review after TS 7.1 stable). Same CI gate as above, verified locally | | Each ADR contains Context, Decision, Alternatives, Consequences, Operational impact and Revisit trigger | Both files contain all six `##` sections, in the mandated order, in the committed files (document review per the issue test plan); locally verified against the committed file contents | | Each decision matches the ADR index | ADR index (§70) lists `\| ADR-002 \| Node.js 24 LTS runtime \|` and `\| ADR-003 \| TypeScript 6.0.3 pending TS7.1 ecosystem review \|`; ADR-002's decision text is **Node.js 24 LTS runtime** and ADR-003's is **TypeScript 6.0.3 pending TS7.1 ecosystem review**, and both Decision sections state they match the ADR index entry (section 70) | ## Risks / notes - Documentation-only change (two new markdown files); no runtime, schema, dependency, lockfile or CI-workflow impact. Rollback = revert the two commits. - 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 #189
bot-implementer added 2 commits 2026-08-31 00:26:49 +00:00
docs(adr): record TypeScript 6.0.3 language decision as ADR-003
CI / Stage 4 — Unit tests (E00-S05-T01) (pull_request) Successful in 1m39s
CI / Stage 7 — Build the admin and server applications (E00-S05-T01) (pull_request) Successful in 1m3s
CI / Stage 5 — Architecture tests (E00-S05-T01) (pull_request) Successful in 3m9s
CI / Stage 2 — Typecheck (E00-S05-T01) (pull_request) Successful in 1m8s
CI / Stage 3 — Formatting/lint policy (E00-S05-T01) (pull_request) Successful in 49s
CI / Stage 6 — PostgreSQL integration tests (E00-S05-T01) (pull_request) Successful in 1m10s
CI / Stage 1 — Frozen lockfile install (E00-S05-T01) (pull_request) Successful in 1m9s
ee0c094398
kpcto merged commit b1a1c9bc86 into main 2026-08-31 00:51:06 +00:00
kpcto deleted branch feature/189 2026-08-31 00:51:07 +00:00
Sign in to join this conversation.