lacs-project / lacs-project/sysknife

packages/setup claims Node 18 support, and Node 18 has been end-of-life since 2025-04-30

Open
#327 1 comment 0 reactions 0 assignees View on GitHub
easy enhancement good first issue help wanted twir-listed
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.