Skip to content

Declare engines.node >=24.0.0 across root + 10 packages#47

Merged
jasperboerhof merged 3 commits intomainfrom
armory-node-engines-sweep
Apr 23, 2026
Merged

Declare engines.node >=24.0.0 across root + 10 packages#47
jasperboerhof merged 3 commits intomainfrom
armory-node-engines-sweep

Conversation

@Goosterhof
Copy link
Copy Markdown
Contributor

Summary

  • Adds `"engines": { "node": ">=24.0.0" }` to root `package.json` + all 10 workspace packages (11 manifests, `+33/-0`, single commit).
  • No version bumps — this is a config-declaration-only sweep that matches what the code and CI already require. It does not change published API.
  • Closes QM M2 F-6 (Node engines undeclared).

Why this number

  • CI pins Node 24 via `actions/setup-node@v6` — the only version any commit has been green against.
  • Source uses zero Node APIs (grep-verified: no `node:` imports, no `process.*`, no `structuredClone`) — the library surface is pure TS for browser/Vue consumers, so the floor is set by tooling and author intent, not code dependencies.
  • Toolchain floors would permit lower: tsdown `>=20.19.0`, vitest accepts 20/22/24, stryker `>=20.0.0`. Node 22 LTS is viable. But declaring `>=22` when we only ever run 24 invites drift — either the CI pin rises or the declared floor lies.
  • LTS landscape April 2026: Node 20 EOL, Node 22 LTS, Node 24 current.
  • War-room `@types/node` doctrine pinned to ^24.x (Supply Corps sweep 2026-04-21) — `engines` alignment keeps that coherent.

Consumers on Node <24 will now get `EBADENGINE` warnings rather than silent runtime failures.

Nice side-effect

tsdown reads `engines.node` from the manifest and now builds with `target: node24.0.0`. Future library code using Node-24-native APIs will compile correctly without manual `target` config — not visible today (source uses zero Node APIs) but future-relevant.

oxfmt ordering note

oxfmt canonicalizes `engines` to end-of-manifest (after dependencies). One `npm run format` pass during this sweep moved it from after `scripts` to end-of-file; the committed state is the post-format one.

Test plan

All 8 CI gates confirmed locally:

  • `npm audit` — 0 vulnerabilities
  • `npm run format:check` — pass
  • `npm run lint` — 0/0
  • `npm run build` — pass (tsdown reports `target: node24.0.0`)
  • `npm run typecheck` — 10/10 packages
  • `npm run lint:pkg` — 10/10 publint "No problems found", 10/10 attw all-green
  • `npm run test:coverage` — 427/427 tests
  • `npm run test:mutation` — 10/10 ≥ 90% (91.20%–100%)

Closes QM M2 F-6. CI pins Node 24 (actions/setup-node@v6, node-version: 24)
but published manifests advertised no floor, leaving consumers to install
on older Node without EBADENGINE warnings.

Posture: strict >=24.0.0 matches CI. Source code uses zero Node APIs, so
the declaration documents the tested surface, not a runtime requirement
beyond what the toolchain already enforces (tsdown >=20.19.0, vitest
20/22/24, stryker >=20.0.0).

oxfmt canonicalized engines to end-of-manifest on all 10 package files
(I initially placed it after scripts; oxfmt moved it). Root already had
it at the end — no move needed.

Config-only correctness fix: no version bumps, no API change.

Verification (8/8 gates green on this branch):
- npm audit: 0 vulnerabilities
- format:check: pass
- lint: 0/0 (oxlint)
- build: pass (tsdown now targets node24.0.0)
- typecheck: pass
- lint:pkg: 10/10 publint + attw pass (no engines warning)
- test:coverage: 427/427 tests pass
- test:mutation: 10/10 packages >=90% (range 91.20%-100%)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Apr 22, 2026

Deploying fs-packages with  Cloudflare Pages  Cloudflare Pages

Latest commit: 97fe798
Status: ✅  Deploy successful!
Preview URL: https://853a7c12.fs-packages.pages.dev
Branch Preview URL: https://armory-node-engines-sweep.fs-packages.pages.dev

View logs

@jasperboerhof jasperboerhof merged commit 219b114 into main Apr 23, 2026
2 checks passed
@jasperboerhof jasperboerhof deleted the armory-node-engines-sweep branch April 23, 2026 10:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants