chore: align the toolchain on Node 22 and pin npm#112
Merged
Conversation
CI built on Node 20, the Dockerfile ships node:22-alpine, and local dev runs Node 26. CI was validating a runtime we do not deploy. The split also broke Dependabot. Node 20 and node:22-alpine both bundle npm 10; a newer npm generates a lockfile tree that npm 10 rejects: npm error code EUSAGE npm error Missing: esbuild@0.28.1 from lock file That is why #106, #107 and #111 are red. It is not a fault in those bumps — their lockfiles were generated by npm 11. The same lockfile would have failed `npm ci` in the Docker build, so this was heading for a broken image, not just a red check. The compatibility runs one way only, which decides the fix: lock generated by npm 11 -> npm 10 FAILS, npm 11 ok lock generated by npm 10 -> npm 10 ok, npm 11 ok So: - CI node-version 20 -> 22, matching the Dockerfile. - engines.node ">=22" documents the floor. Deliberately a floor rather than "22.x" so local Node 26 does not emit EBADENGINE on every install. - packageManager "npm@10.9.8" pins the generator, which is what stops Dependabot re-introducing an npm 11 lockfile next cycle. Lockfile regenerated with npm 10.9.8: unchanged at 839 packages, +3 lines for the engines block. Verified `npm ci` under npm 10.9.8, `next build`, and vitest (9 files, 279 tests) all pass. The three Dependabot PRs need their lockfiles regenerated on top of this. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
chore: align the toolchain on Node 22 and pin npm
CI built on Node 20, the Dockerfile ships node:22-alpine, and local dev runs
Node 26. CI was validating a runtime we do not deploy.
The split also broke Dependabot. Node 20 and node:22-alpine both bundle npm 10;
a newer npm generates a lockfile tree that npm 10 rejects:
npm error code EUSAGE
npm error Missing: esbuild@0.28.1 from lock file
That is why #106, #107 and #111 are red. It is not a fault in those bumps —
their lockfiles were generated by npm 11. The same lockfile would have failed
npm ciin the Docker build, so this was heading for a broken image, not justa red check.
The compatibility runs one way only, which decides the fix:
lock generated by npm 11 -> npm 10 FAILS, npm 11 ok
lock generated by npm 10 -> npm 10 ok, npm 11 ok
So:
"22.x" so local Node 26 does not emit EBADENGINE on every install.
Dependabot re-introducing an npm 11 lockfile next cycle.
Lockfile regenerated with npm 10.9.8: unchanged at 839 packages, +3 lines for
the engines block. Verified
npm ciunder npm 10.9.8,next build, andvitest (9 files, 279 tests) all pass.
The three Dependabot PRs need their lockfiles regenerated on top of this.
Co-Authored-By: Claude noreply@anthropic.com