#236: pin the Node version #257

Merged
fable-5 merged 2 commits from feat/236-pin-node-version into main 2026-07-31 04:32:54 +02:00
Collaborator

Issue #236 (I-26) — precondition for the reproducibility claim in #219.

  • .node-version (22.15.1, the patch the floating 22.15 tag already resolves to; tag existence verified) is the single authoritative Node version.
  • CI (3 jobs) and CD select Node exclusively via node-version-file; all four Dockerfiles pin node:22.15.1-alpine; engines.node floor raised to >=22.15.1 (open-ended upwards — local dev on newer Node keeps working, reproducibility rests on images and CI).
  • New early CI step 'Node version pin is consistent' fails on any drift (Dockerfile tags, literal node-version: in workflows, engines floor); positive and negative case tested locally. The bracketed grep keeps the step from matching its own source (same trick as the #198 fence).
  • Update procedure documented in operations.md (Update strategy); toolchain version for #228 follows as issue comment after merge.
Issue #236 (I-26) — precondition for the reproducibility claim in #219. - `.node-version` (22.15.1, the patch the floating 22.15 tag already resolves to; tag existence verified) is the single authoritative Node version. - CI (3 jobs) and CD select Node exclusively via `node-version-file`; all four Dockerfiles pin `node:22.15.1-alpine`; `engines.node` floor raised to `>=22.15.1` (open-ended upwards — local dev on newer Node keeps working, reproducibility rests on images and CI). - New early CI step 'Node version pin is consistent' fails on any drift (Dockerfile tags, literal `node-version:` in workflows, engines floor); positive and negative case tested locally. The bracketed grep keeps the step from matching its own source (same trick as the #198 fence). - Update procedure documented in operations.md (Update strategy); toolchain version for #228 follows as issue comment after merge.
fable-5 added 1 commit 2026-07-31 04:15:07 +02:00
#236: pin the Node version
All checks were successful
CI / Lint, typecheck, test (pull_request) Successful in 5m40s
CI / Build container images (pull_request) Successful in 4m15s
CI / Auth e2e pack (pull_request) Successful in 8m33s
CI / Import/export fidelity gate (pull_request) Successful in 59s
6a520e27b1
.node-version (22.15.1) becomes the single authoritative Node version:
CI/CD select Node only via node-version-file, every Dockerfile pins
node:22.15.1-alpine, and the engines floor in package.json states the
same version (open-ended upwards so a newer local Node keeps working —
reproducibility rests on images and CI). An early CI step fails on any
drift between those places; update procedure in operations.md
(Update strategy). Precondition for the reproducibility claim in #219.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168Ph5uBmHm8X28CSVpbpnJ
fable-5 added 1 commit 2026-07-31 04:16:09 +02:00
#236: also pin the node helper images in workflows
All checks were successful
CI / Lint, typecheck, test (pull_request) Successful in 5m41s
CI / Build container images (pull_request) Successful in 3m9s
CI / Auth e2e pack (pull_request) Successful in 8m32s
CI / Import/export fidelity gate (pull_request) Successful in 1m7s
CD / Build and push images (push) Successful in 21s
CD / Deploy to Test (push) Successful in 12s
CD / Smoke tests against Test (push) Successful in 1m17s
CD / Promote to Int (push) Successful in 11s
CI / Lint, typecheck, test (push) Successful in 6m0s
CI / Build container images (push) Has been skipped
CI / Auth e2e pack (push) Successful in 8m32s
CI / Import/export fidelity gate (push) Successful in 1m3s
9326177534
release.yml and drill.yml ran throwaway `docker run node:22.15-alpine`
helpers outside the pin; the drift check now also fails on any
node:<other>-alpine reference in .gitea/workflows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168Ph5uBmHm8X28CSVpbpnJ
fable-5 merged commit 9326177534 into main 2026-07-31 04:32:54 +02:00
Sign in to join this conversation.
No description provided.