lacs-project / lacs-project/sysknife
packages/setup claims Node 18 support, and Node 18 has been end-of-life since 2025-04-30
- Dominant language
- Rust
- Stars
- 12
- Forks
- 19
- Avg merge
- 18h 57m
- Merged PRs (30d)
- 116
Description
`packages/setup/package.json` declares:
```json
"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](https://github.com/nodejs/Release/blob/main/schedule.json).
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.
1. **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.
2. **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.
3. **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:124` among them
- 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](https://github.com/lacs-project/sysknife/blob/main/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.
Contributor guide
Research direction
Read packages/setup/package.json and packages/setup/node-preflight.js, then run npm test --prefix packages/setup and inspect packages/setup/tests/node-preflight.test.mjs. Review the six Markdown statements listed in the issue and CONTRIBUTING.md before deciding which support-floor option is accepted. Done means the agreed runtime policy, preflight behavior, tests, and published statements are consistent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- node.js
- Domain
- cli, documentation, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100