[E00-S01-T08] Node engine restricted to 24.x #375
No Reviewers
Labels
Clear labels
agent/analyst-drafted
agent/analyst-drafted
needs/human-decision
needs/human-decision
needs/security-review
needs/security-review
tier/t0
tier/t1
tier/t2
tier/t3
kind
bug
kind
bug
kind
epic
kind
epic
kind
initiative
EPPP programme initiative
kind
story
kind
story
kind
task
EPPP engineering card/task decomposed from a story
kind
toil
kind
toil
loop
1
loop
1
loop
2
loop
2
loop
3
loop
3
risk
agent-full
risk
agent-full
risk
human-gated
risk
human-gated
risk
human-only
risk
human-only
size
l
size
l
size
m
size
m
size
s
size
s
status
blocked
status
blocked
status
done
Workflow: Done
status
in-progress
status
in-progress
status
proposed
status
proposed
status
ready
status
ready
status
review
status
review
stream
checkout
stream
checkout
stream
onboarding
stream
onboarding
stream
platform
stream
platform
trivial — implementer only, auto-merge
standard — implementer + reviewer + tester
complex — security if triggered, human merge
critical — full chain + security, human merge
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Fabrika/PersonalBlog#375
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What changed
Restricts the workspace to the Node 24.x engine line for [E00-S01-T08] Node engine restricted to 24.x (#161), and makes both acceptance criteria enforceable rather than incidental:
package.json— adds"engines": { "node": ">=24.0.0 <25.0.0" }(exactly the 24.x line) to the root manifest. Lockfile untouched (engines is not part of the pnpm lockfile).pnpm-workspace.yaml— addsengineStrict: true. pnpm 11 no longer honorsengine-strictfrom.npmrcfor non-auth settings (settings live inpnpm-workspace.yaml, camelCase); withengineStrict, an unsupported Node version is a hard install error (ERR_PNPM_UNSUPPORTED_ENGINE) instead of a warning. Verified against the committed pnpm 11.23.0: plain.npmrcengine-strict=trueis ignored by pnpm 11, top-levelengineStrict: trueinpnpm-workspace.yamlis enforced.tests/node-engine.test.mjs(new) — anode:testsuite (zero dependencies, lockfile untouched) that fails if the restriction ever drifts, including a minimal embedded semver range checker (nosemverdependency).docs/development/non-container.md— prerequisite + troubleshooting rows updated: they previously described the T08 restriction as future work and claimed "Any Node ≥ 22 is enough"; Node 24.x is now required and installs on other versions are rejected.Explicitly out of scope per the brief (not touched): pnpm workspace pin (E00-S01-T07), TypeScript exact dependency (E00-S01-T09), strict base tsconfig (E00-S01-T10). No CI workflow changes — test-suite wiring in CI is E00-S05 by design (same as T05/T06/T07); the existing CI job (frozen install +
pnpm -r liston Node 24) stays green.Criterion → test table
tests/node-engine.test.mjs: "root package.json declares engines.node restricted to 24.x" — asserts the exact range>=24.0.0 <25.0.0and that 24.0.0 / 24.1.0 / 24.20.0 / 24.99.99 satisfy it. Mutation-probed: removingenginesor changing the range string fails this testtests/node-engine.test.mjs: "the declared engines range rejects unsupported Node versions" (18.x/20.x/22.x/23.x/25.x/26.x all fail the range), "the current Node runtime satisfies the declared engines range" (fails loudly when the suite runs on an unsupported Node), and "the committed pnpm-workspace.yaml enforces engines so an unsupported Node is rejected" (engineStrict: true). End-to-end:pnpm install --frozen-lockfileunder Node 22 exits 1 withERR_PNPM_UNSUPPORTED_ENGINE(expected>=24.0.0 <25.0.0, gotv22.23.2); under Node 24 it succeedsTest plan executed
node_modules), Node 24:pnpm install --frozen-lockfilevia corepack → success,using pnpm v11.23.0, lockfile unchanged ✓pnpm -r list --depth -1(second CI step), Node 24 → lists all four workspace packages, exit 0 ✓node --test tests/**/*.test.mjson Node 24 (v24.20.0) → 21/21 pass (10 architecture-import + 6 workspace-config + 5 node-engine), exit 0 ✓pnpm install --frozen-lockfile→ exit 1,ERR_PNPM_UNSUPPORTED_ENGINE("Expected version: >=24.0.0 <25.0.0 / Got: v22.23.2"); the suite fails exactly one test ("the current Node runtime satisfies the declared engines range"), all other 20 pass ✓engineStrictremoved frompnpm-workspace.yaml→ enforcement test fails;engines.nodechanged to>=22.0.0→ range + rejection tests fail ✓.npmrcengine-strict=trueis ignored by pnpm 11.23.0 (install only warns), while top-levelengineStrict: trueinpnpm-workspace.yamlhard-fails — hence the enforcement lives inpnpm-workspace.yaml, not.npmrcRisks / notes
>=24.0.0 <25.0.0and that the embedded checker understands it; a deliberate engine-line change must update manifest, workspace setting and test in the same change.engineStrictis a pnpm-11 workspace setting (camelCase, top-level inpnpm-workspace.yaml); it is not part of the pnpm lockfile, sopnpm-lock.yamlis untouched.Refs #161