packages/setup/package.json declares:
"engines": { "node": ">=18" }
and packages/setup/node-preflight.js backs it with MIN_MAJOR = 18, which is what produces the friendly "sysknife-setup needs Node 18 or newer" message instead of a syntax error.
Node 18 reached end-of-life on 2025-04-30, sixteen months ago. Node 20 followed on 2026-04-30. Both numbers come from nodejs/Release.
So the published claim is that npx sysknife-setup supports two runtimes that receive no security fixes. The wizard downloads binaries over the network and verifies them against a SHA-256, which is exactly the kind of code where the runtime's TLS stack and its patch level matter.
What is actually true today
Nothing tests the claim. CI ran the wizard's suite on Node 20 and, after #326, runs it on 24. packages/setup/tests/node-preflight.test.mjs exercises the version-comparison logic in isolation, not the wizard on an old runtime. So >=18 has never been observed to hold; it is an assertion, not a measurement.
The decision
Three options, and they are not equivalent.
- Raise the floor to 22 (maintenance until 2027-04-30) and say why in the message
node-preflight.js prints. Users on 18 or 20 get a clear sentence instead of a subtle failure. This is my preference.
- Keep
>=18 and test it, with a CI matrix that runs packages/setup on the floor as well as on current LTS. Honest, and it costs a job.
- Keep
>=18 untested. Then the number should stop appearing in the docs as a support statement.
Anything but option 3 also wants the published statements updated, and there are
six of them rather than the one this issue first named. Verified 2026-09-09 at
5673d20:
$ grep -rn 'Node 18' --include='*.md' .
docs/quickstart.md:23:**Prerequisites:** Node 18 or newer. On Ubuntu 22.04, `apt install nodejs`
README.md:86:Needs **Node 18 or newer**. On Ubuntu 22.04 `apt install nodejs` gives Node 12,
README.md:430:| **npm** | `npx sysknife-setup` | ... needs Node 18+, no compile |
docs/mcp.md:185:Needs Node 18 or newer (Ubuntu 22.04's apt Node is 12, which is too old). The
apps/sysknife-cli/README.md:40:npx sysknife-setup # needs Node 18+
docs/introduction.md:124:For prebuilt binaries instead of a build, run `npx sysknife-setup` (Node 18+).
Five of those six predate this issue rather than drifting into it: README.md,
docs/quickstart.md and docs/mcp.md all got their line in aeb4d19
(2026-07-28, #116). My omission when I filed this, not new work.
Scope
packages/setup/package.json engines.node
packages/setup/node-preflight.js MIN_MAJOR and the message it composes
packages/setup/tests/node-preflight.test.mjs
- the six Markdown statements listed above,
docs/introduction.md:127 among them (it was :124 in the transcript above; the line moved, the sentence did not)
- A line in
docs/release.md if the floor becomes a release-time check
Difficulty
easy as a code change, medium as a decision. The edit reaches eight files, nine if the floor becomes a release-time check. Five of them are documentation, carrying six sentences between them. Picking the number is the part that needs an opinion about who is still on Node 18.
Getting started
CONTRIBUTING.md has the build and test commands. npm test --prefix packages/setup is the suite. No CLA and no copyright waiver. The project is MIT.
Comment here before you start if you want to argue for a different floor. That conversation is the issue.
packages/setup/package.jsondeclares:and
packages/setup/node-preflight.jsbacks it withMIN_MAJOR = 18, which is what produces the friendly "sysknife-setup needs Node 18 or newer" message instead of a syntax error.Node 18 reached end-of-life on 2025-04-30, sixteen months ago. Node 20 followed on 2026-04-30. Both numbers come from nodejs/Release.
So the published claim is that
npx sysknife-setupsupports two runtimes that receive no security fixes. The wizard downloads binaries over the network and verifies them against a SHA-256, which is exactly the kind of code where the runtime's TLS stack and its patch level matter.What is actually true today
Nothing tests the claim. CI ran the wizard's suite on Node 20 and, after #326, runs it on 24.
packages/setup/tests/node-preflight.test.mjsexercises the version-comparison logic in isolation, not the wizard on an old runtime. So>=18has never been observed to hold; it is an assertion, not a measurement.The decision
Three options, and they are not equivalent.
node-preflight.jsprints. Users on 18 or 20 get a clear sentence instead of a subtle failure. This is my preference.>=18and test it, with a CI matrix that runspackages/setupon the floor as well as on current LTS. Honest, and it costs a job.>=18untested. Then the number should stop appearing in the docs as a support statement.Anything but option 3 also wants the published statements updated, and there are
six of them rather than the one this issue first named. Verified 2026-09-09 at
5673d20:Five of those six predate this issue rather than drifting into it:
README.md,docs/quickstart.mdanddocs/mcp.mdall got their line inaeb4d19(2026-07-28, #116). My omission when I filed this, not new work.
Scope
packages/setup/package.jsonengines.nodepackages/setup/node-preflight.jsMIN_MAJORand the message it composespackages/setup/tests/node-preflight.test.mjsdocs/introduction.md:127among them (it was:124in the transcript above; the line moved, the sentence did not)docs/release.mdif the floor becomes a release-time checkDifficulty
easyas a code change,mediumas a decision. The edit reaches eight files, nine if the floor becomes a release-time check. Five of them are documentation, carrying six sentences between them. Picking the number is the part that needs an opinion about who is still on Node 18.Getting started
CONTRIBUTING.md has the build and test commands.
npm test --prefix packages/setupis the suite. No CLA and no copyright waiver. The project is MIT.Comment here before you start if you want to argue for a different floor. That conversation is the issue.