Skip to content

Drop end-of-life Node 18/20; track latest patches for eMudhra fix - #9

Merged
prathamesh-sonpatki merged 2 commits into
mainfrom
coder9io/issue-8
Oct 21, 2026
Merged

prathamesh-sonpatki merged 2 commits into
mainfrom
coder9io/issue-8

Conversation

@coder9io

@coder9io coder9io commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Refs #8. This is the first part: no Node.js release contains the fix yet.

What

  • 7cafb89 build: engines.node: ">=22" in package.json and the lockfile (npm also fixed the lockfile's stale root license from 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.
  • a44c7d8 ci: CI matrix [18, 20, 22] → [22, 24, 26], release job 20 → 24, and check-latest: true on both setup-node steps 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:

Line Latest release Date Contains fix
26 v26.12.0 2026-10-14 no (predates the 2026-10-20 merge)
24 v24.22.0 2026-10-14 no
22 v22.23.3 2026-09-23 no

Source: https://nodejs.org/dist/index.json and the upstream PR's merged_at (2026-10-20T16:43Z), checked 2026-10-21.

Node execution surfaces

  • CI (.github/workflows/ci.yml): build, lint, test. Updated.
  • Release (.github/workflows/release.yml): test, build, GitHub release. No npm publish and no shipped artifact. Updated.
  • Consumer runtime: the library runs in the user's process; engines.node and the README state the requirement.
  • None of these exist here: .nvmrc, .node-version, Dockerfiles, a deployed service.

TLS evidence (current, unpatched)

process.version v24.22.0
https://dv-g3b-emudhra.we-have-a-problem.com/ -> HTTP 200
https://registry.npmjs.org/ -> HTTP 200

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.node to those exact patch versions, rerun the TLS probe on each line, and record process.version plus the release notes.

Refs #8 (one part; the issue stays open)

Agent usage


Opened by coder9io. Review comments and CI results on this PR are picked up automatically.

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.
@coder9io coder9io added urgent Requires urgent attention security Security vulnerability or incident labels Oct 21, 2026

@reviewer9io reviewer9io left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@prathamesh-sonpatki
prathamesh-sonpatki merged commit 2cf915a into main Oct 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security Security vulnerability or incident urgent Requires urgent attention

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants