Repository navigation
Drop end-of-life Node 18/20; track latest patches for eMudhra fix - #9
Conversation
Node 18 (EOL 2025-04-30) and 20 (EOL 2026-04-30) get no security backports, including the TLS SPKI blocklist for the compromised eMudhra intermediates (nodejs/node#66871). Declare the supported floor in engines so consumers are warned on an unpatched-forever runtime. npm also synced the lockfile's stale root license field to MIT.
Drop end-of-life 18 and 20 to match engines.node >=22 and cover every supported line. check-latest makes setup-node resolve the newest patch from nodejs.org instead of the runner's cached toolchain, so CI and releases pick up the eMudhra blocklist fix as soon as it is released.
reviewer9io
left a comment
There was a problem hiding this comment.
Reviewed the complete change at a44c7d8e681819ba4d1320da26461bc584b8441b, including workflow/release behavior, engine and lock metadata, documented consumer contract and runtime entry points. No actionable blockers found.
On Node 24.22.0, a fresh locked install, typecheck, build and all 12 existing tests passed. Three additional deterministic Jest probes passed for zero-timeout success, timeout followed by late rejection and reuse, error identity/timer cleanup, and the compiled entry point. Exact-head CI independently passed on Node 22/24/26; I did not rerun 22/26 locally.
This approves the supported-runtime migration. Live OTLP/TLS and CA-blocklist rejection were not exercised; the documented patched-release follow-up remains separate.
Refs #8. This is the first part: no Node.js release contains the fix yet.
What
7cafb89build:engines.node: ">=22"inpackage.jsonand the lockfile (npm also fixed the lockfile's stale rootlicensefrom Apache-2.0 to MIT). README now states the Node requirement and notes that the OTLP/HTTPS exporters validate TLS with the consumer's Node.a44c7d8ci: CI matrix[18, 20, 22]→[22, 24, 26], release job20→24, andcheck-latest: trueon bothsetup-nodesteps so they resolve the newest patch from nodejs.org, not the runner's cached toolchain.Why
Node 18 (EOL 2025-04-30) and 20 (EOL 2026-04-30) will never get the SPKI blocklist backport (nodejs/node#66871, commit
d9a3f3d). Every supported line (22, 24, 26) is still waiting for a release:Source:
https://nodejs.org/dist/index.jsonand the upstream PR'smerged_at(2026-10-20T16:43Z), checked 2026-10-21.Node execution surfaces
.github/workflows/ci.yml): build, lint, test. Updated..github/workflows/release.yml): test, build, GitHub release. No npm publish and no shipped artifact. Updated.engines.nodeand the README state the requirement..nvmrc,.node-version, Dockerfiles, a deployed service.TLS evidence (current, unpatched)
This confirms that v24.22.0 still accepts the compromised chain. The rejection criterion can only pass on a fixed release.
Tests
This is a config/docs change, so there is no unit test to write. Ran locally on Node v24.22.0:
npm run lint,npm test(12/12),npm run build. CI covers 22/24/26. Both commits were checked on their own; the second changes only workflow YAML.Remaining (follow-up)
Once Node publishes releases with the fix, raise
engines.nodeto those exact patch versions, rerun the TLS probe on each line, and recordprocess.versionplus the release notes.Refs #8 (one part; the issue stays open)
Agent usage
claude-opus-5-5· $0.66 · 36 input · 10,503 output · 720,839 cache-read · 38,674 cache-write-1hclaude-sonnet-5-5· $0.11 · 10 input · 1,418 output · 131,480 cache-read · 21,311 cache-write-1hOpened by coder9io. Review comments and CI results on this PR are picked up automatically.