Retire Node 18, and take the patched test runner - #240
Merged
Merged
Conversation
|
CI workflow and scripts clearly enforce the updated Node 20 floor with robust consumer testing. 🎯 Quality: 90% Elite · 📦 Size: Extra Large — strongly consider breaking this down 🛡️ Standards: no pre-flight fit check ran for this change — wire 📈 This month: Your 209th PR — above team average · Averaging Good |
This was referenced Sep 9, 2026
Contributor
Author
|
/review |
mariojgt
approved these changes
Sep 9, 2026
patchstackdave
force-pushed
the
chore/retire-node-18
branch
5 times, most recently
from
September 9, 2026 09:41
8db81f5 to
52a802d
Compare
The package engines field is a consumer support contract. The package now declares Node 20 or newer, validates the packed artifact at the exact floor read from engines.node, and no longer claims or tests Node 18. The artifact may still execute on 18, but installation there is outside the supported range. The declared-floor job installs no repository development dependencies. It consumes a tarball built on the release runtime and runs an explicit six-shape package/runtime contract: ESM and CommonJS imports, screening through both published module formats, the installed CLI, and export-map encapsulation. The selector refuses a missing shape or one that acquires a fixture dependency, so the floor check cannot silently narrow. The ordinary Node 22 consumer matrix continues to run all nine shapes. The maintainer toolchain is a separate contract: Vitest 4.1.11 and its Vite/Rolldown dependencies require ^20.19.0 or >=22.12.0. Validate pins both exact boundaries beside the current supported lines and installs with engine-strict. The test-runner update takes the patched release for GHSA-82fw-gwwq-j7x9. The build target follows the consumer floor at node20. Runtime comments refer to the availability of web crypto rather than to a particular Node release, because the fallback remains relevant to edge runtimes. Releasing this compatibility change requires 0.5.0. RELEASING states that a compatibility break is at least a minor while the package is 0.x and a major from 1.0 onward.
patchstackdave
force-pushed
the
chore/retire-node-18
branch
from
September 9, 2026 10:01
52a802d to
27e1fa3
Compare
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.
Two runtime contracts answer different questions and are tested separately.
Consumer support
The engines.node range moves from >=18 to >=20. This is the supported consumer floor: Node 18 is no longer tested, and package managers may warn or refuse installation there according to their engine policy. The artifact may still execute on Node 18, but that runtime is outside this package's supported range.
The floor is exercised as a consumer sees it:
Only a plain >= floor is accepted by the version reader. A range it cannot map to one exact minimum is refused instead of guessed.
Maintainer toolchain
The maintainer toolchain requires ^20.19.0 || >=22.12.0. This is a union rather than one floor: Node 21 and Node 22.0 through 22.11 are outside it. Validation therefore pins exact 20.19.0 and 22.12.0 beside the current Node 20, 22, 24, and 26 lines, with strict engine checks enabled.
Vitest moves to 4.1.11, the first patched release for GHSA-82fw-gwwq-j7x9. The build target follows the consumer floor at node20. Runtime comments now describe the availability of web crypto rather than tying the fallback to one Node release, since edge runtimes expose different globals.
Release constraint
This change must ship as 0.5.0 using a minor release. RELEASING.md records the durable rule: while the package is 0.x, a compatibility break needs at least a minor release; from 1.0 onward it needs a major release.
Verified locally on this head