[E00-S01-T08] Node engine restricted to 24.x #161

Closed
opened 2026-08-27 00:06:35 +00:00 by kpcto · 8 comments
Owner

Parent story: [E00-S01] Workspace bootstrap (#58)

Intent

Restrict the Node engine to 24.x across the workspace.

Acceptance criteria

  • Node engine is restricted to 24.x in the package manifest
  • an unsupported Node version is rejected

Explicitly out of scope

  • pnpm workspace pin (E00-S01-T07)
  • TypeScript exact dependency (E00-S01-T09)
  • strict base tsconfig (E00-S01-T10)

Test plan

  • install/build with Node 24.x succeeds; other versions are rejected

Rollback note

  • revert the engine restriction field

Owning stream

platform

Risk quadrant

agent-full

> Parent story: [E00-S01] Workspace bootstrap (#58) ## Intent Restrict the Node engine to 24.x across the workspace. ## Acceptance criteria - Node engine is restricted to 24.x in the package manifest - an unsupported Node version is rejected ## Explicitly out of scope - pnpm workspace pin (E00-S01-T07) - TypeScript exact dependency (E00-S01-T09) - strict base tsconfig (E00-S01-T10) ## Test plan - install/build with Node 24.x succeeds; other versions are rejected ## Rollback note - revert the engine restriction field ### Owning stream platform ### Risk quadrant agent-full
kpcto added this to the Sprint 0 milestone 2026-08-27 00:06:35 +00:00
kpcto added the
status
ready
kind
task
labels 2026-08-27 00:06:35 +00:00
bot-dispatcher added
status
proposed
and removed
status
ready
kind
task
labels 2026-08-27 00:06:36 +00:00
Member

Auto-reverted by dispatcher: DoR lint: required section "Intent" is empty; required section "Acceptance criteria" is empty; required section "Explicitly out of scope" is empty; required section "Test plan" is empty; required section "Rollback note" is empty; acceptance criteria: no bullet assertions found

status/ready may only be applied by a human maintainer.

> Auto-reverted by dispatcher: DoR lint: required section "Intent" is empty; required section "Acceptance criteria" is empty; required section "Explicitly out of scope" is empty; required section "Test plan" is empty; required section "Rollback note" is empty; acceptance criteria: no bullet assertions found `status/ready` may only be applied by a human maintainer.
kpcto added the
kind
task
label 2026-08-27 21:23:38 +00:00
kpcto added
status
ready
and removed
status
proposed
labels 2026-08-28 09:07:38 +00:00
bot-dispatcher added
loop
1
status
in-progress
and removed
status
ready
labels 2026-08-28 09:07:39 +00:00
Member
agent: dispatcher
phase: complete
plan_summary: Dispatch #161: [E00-S01-T08] Node engine restricted to 24.x (platform)
```yaml agent: dispatcher phase: complete plan_summary: Dispatch #161: [E00-S01-T08] Node engine restricted to 24.x (platform) ```
Member
agent: implementer
phase: start
issue: 161
task: "[E00-S01-T08] Node engine restricted to 24.x"
plan: |
  - Root package.json: add engines.node restricted to 24.x
  - Add .npmrc with engine-strict=true so an unsupported Node version is
    rejected at install (ERR_PNPM_UNSUPPORTED_ENGINE) instead of warned
  - Add tests/node-engine.test.mjs locking in both acceptance criteria
    (range is 24.x; unsupported versions are outside the range; runtime
    satisfies the range; engine-strict enforcement is committed; CI runs 24)
  - Update docs/development/non-container.md prerequisite + troubleshooting
    rows that reference the T08 restriction as future work
  - Open PR feature/161 -> main with criterion→test table
```yaml agent: implementer phase: start issue: 161 task: "[E00-S01-T08] Node engine restricted to 24.x" plan: | - Root package.json: add engines.node restricted to 24.x - Add .npmrc with engine-strict=true so an unsupported Node version is rejected at install (ERR_PNPM_UNSUPPORTED_ENGINE) instead of warned - Add tests/node-engine.test.mjs locking in both acceptance criteria (range is 24.x; unsupported versions are outside the range; runtime satisfies the range; engine-strict enforcement is committed; CI runs 24) - Update docs/development/non-container.md prerequisite + troubleshooting rows that reference the T08 restriction as future work - Open PR feature/161 -> main with criterion→test table ```
Member
agent: reviewer
verdict: 
```yaml agent: reviewer verdict: ```
Member
agent: reviewer
verdict: approve
```yaml agent: reviewer verdict: approve ```
bot-dispatcher added
status
review
and removed
status
in-progress
loop
1
kind
task
labels 2026-08-28 09:16:14 +00:00
Member
agent: implementer
phase: complete
issue: 161
task: "[E00-S01-T08] Node engine restricted to 24.x"
pr: 375
pr_url: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/pulls/375
result: |
  - PR #375 open (feature/161 -> main); CI green (run #47, 5/5 steps success)
  - Root package.json: engines.node ">=24.0.0 <25.0.0" (24.x)
  - pnpm-workspace.yaml: engineStrict: true (pnpm 11 ignores .npmrc for
    non-auth settings; verified against the pinned pnpm 11.23.0)
  - tests/node-engine.test.mjs locks in both acceptance criteria
  - 21/21 pass on Node 24 (v24.20.0); frozen install green, lockfile unchanged
  - Rejection proven: install on Node 22 fails ERR_PNPM_UNSUPPORTED_ENGINE;
    suite on Node 22 fails exactly the runtime-satisfies test
  - Criterion→test table in the PR description
```yaml agent: implementer phase: complete issue: 161 task: "[E00-S01-T08] Node engine restricted to 24.x" pr: 375 pr_url: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/pulls/375 result: | - PR #375 open (feature/161 -> main); CI green (run #47, 5/5 steps success) - Root package.json: engines.node ">=24.0.0 <25.0.0" (24.x) - pnpm-workspace.yaml: engineStrict: true (pnpm 11 ignores .npmrc for non-auth settings; verified against the pinned pnpm 11.23.0) - tests/node-engine.test.mjs locks in both acceptance criteria - 21/21 pass on Node 24 (v24.20.0); frozen install green, lockfile unchanged - Rejection proven: install on Node 22 fails ERR_PNPM_UNSUPPORTED_ENGINE; suite on Node 22 fails exactly the runtime-satisfies test - Criterion→test table in the PR description ```
Member
agent: tester
phase: start
issue: 161
pr: 375
objective: independently probe the PR for #161
acceptance:
  - "Node engine is restricted to 24.x in the package manifest"
  - "an unsupported Node version is rejected"
constraints:
  - "never edit the implementer's tests in the same PR"
method: |
  - Read PR #375 diff and committed files on feature/161
  - Run tests/node-engine.test.mjs under the unsupported Node 22 runtime
  - Attempt `pnpm install --frozen-lockfile` under Node 22 (expect rejection)
  - Verify CI workflow pins Node 24 and PR run is green
```yaml agent: tester phase: start issue: 161 pr: 375 objective: independently probe the PR for #161 acceptance: - "Node engine is restricted to 24.x in the package manifest" - "an unsupported Node version is rejected" constraints: - "never edit the implementer's tests in the same PR" method: | - Read PR #375 diff and committed files on feature/161 - Run tests/node-engine.test.mjs under the unsupported Node 22 runtime - Attempt `pnpm install --frozen-lockfile` under Node 22 (expect rejection) - Verify CI workflow pins Node 24 and PR run is green ```
kpcto closed this issue 2026-08-28 09:19:32 +00:00
kpcto added
kind
task
status
done
and removed
status
review
labels 2026-08-28 09:19:32 +00:00
Member
agent: tester
phase: complete
issue: 161
pr: 375
verdict: pass
acceptance:
  - criterion: "Node engine is restricted to 24.x in the package manifest"
    result: pass
    evidence: "root package.json declares engines.node \">=24.0.0 <25.0.0\" (exact 24.x line)"
  - criterion: "an unsupported Node version is rejected"
    result: pass
    evidence: "pnpm install --frozen-lockfile on Node v22.23.2 exits 1 with ERR_PNPM_UNSUPPORTED_ENGINE (expected >=24.0.0 <25.0.0, got v22.23.2)"
probe: |
  - Checked out feature/161 (6323e48) and read the committed package.json / pnpm-workspace.yaml.
  - Ran `node --test tests/**/*.test.mjs` on Node 22 (v22.23.2): 20/21 pass; the sole
    failure is "the current Node runtime satisfies the declared engines range", which
    correctly flags 22.x as unsupported — matching the PR's stated behaviour.
  - `corepack pnpm install --frozen-lockfile` on Node 22 → exit 1, ERR_PNPM_UNSUPPORTED_ENGINE.
  - Mutation probe (local copy, no PR edits): removing `engineStrict: true` from
    pnpm-workspace.yaml makes install only WARN (exit 0); with it present the install is
    hard-rejected. Confirms engineStrict is the actual enforcement mechanism.
ci:
  - workflow: .gitea/workflows/ci.yml pins node-version '24'
  - run: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/actions/runs/47 (success)
  - job: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/actions/runs/47/jobs/59 ("Frozen lockfile install", 5/5 steps success, head_sha 6323e486)
  - pr: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/pulls/375
```yaml agent: tester phase: complete issue: 161 pr: 375 verdict: pass acceptance: - criterion: "Node engine is restricted to 24.x in the package manifest" result: pass evidence: "root package.json declares engines.node \">=24.0.0 <25.0.0\" (exact 24.x line)" - criterion: "an unsupported Node version is rejected" result: pass evidence: "pnpm install --frozen-lockfile on Node v22.23.2 exits 1 with ERR_PNPM_UNSUPPORTED_ENGINE (expected >=24.0.0 <25.0.0, got v22.23.2)" probe: | - Checked out feature/161 (6323e48) and read the committed package.json / pnpm-workspace.yaml. - Ran `node --test tests/**/*.test.mjs` on Node 22 (v22.23.2): 20/21 pass; the sole failure is "the current Node runtime satisfies the declared engines range", which correctly flags 22.x as unsupported — matching the PR's stated behaviour. - `corepack pnpm install --frozen-lockfile` on Node 22 → exit 1, ERR_PNPM_UNSUPPORTED_ENGINE. - Mutation probe (local copy, no PR edits): removing `engineStrict: true` from pnpm-workspace.yaml makes install only WARN (exit 0); with it present the install is hard-rejected. Confirms engineStrict is the actual enforcement mechanism. ci: - workflow: .gitea/workflows/ci.yml pins node-version '24' - run: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/actions/runs/47 (success) - job: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/actions/runs/47/jobs/59 ("Frozen lockfile install", 5/5 steps success, head_sha 6323e486) - pr: https://git.stevanovic.co.uk/Fabrika/PersonalBlog/pulls/375 ```
Sign in to join this conversation.