Skip to content

fix(install): provision Node 26 so managed npm satisfies engines (#80769) - #86688

Merged
teknium1 merged 1 commit into
mainfrom
salv-node26
Aug 15, 2026
Merged

teknium1 merged 1 commit into
mainfrom
salv-node26

Conversation

@teknium1

Copy link
Copy Markdown
Collaborator

What does this PR do?

Salvages Christopher-Schulze's PR #85299 with authorship preserved: scripts/install.sh still provisioned Hermes-managed Node 22, but root engines.node is >=22.22.0 with engines.npm <11.10.0 || >=11.17.0, and the script itself already warns "Hermes requires Node >=26". Node 26 ships npm ≥11.17.0, satisfying the floor.

Premise verified against live data before salvaging (the Aug 1 engines churn burned us once — per the ship-provisioning-before-pin rule, the runtime must actually ship before/with any pin):

  • nodejs.org/dist/index.json today: v26.7.0 bundles npm 11.19.0, v26.5.1 was the first to bundle 11.17.0 — the provisioned latest-v26.x tarball satisfies engines.npm with margin.
  • Node 22.23.2 bundles npm 10.9.8 (also in-range via the <11.10.0 arm) — so this is a hardening against the trap where a user's or a future Node 22.x's npm lands in the fatal 11.10–11.16 band (npm there ignores .npmrc min-release-age-exclude; engine-strict=true makes it fatal), and aligns the managed runtime with the "requires Node >=26" warning install.sh already prints.
  • No engines pin changes in this PR — it only upgrades what the installer provisions. Existing installs are untouched (managed-tree heal/force-re-provision paths from fix(update): provision a managed Node runtime when system npm fails engines.npm #76464/fix(update): re-provision outdated managed Node on engine failure #76558 handle them); this changes fresh managed installs only, which is the safe ordering.
  • _STOCK_NPM_BY_NODE_MAJOR in the test maps 26 → 11.17.0, matching the real first-26.x-bundle.

The new test locks the invariant for good: the Node major install.sh fetches must ship a stock npm that clears engines.npm, so a future engines bump without a matching NODE_VERSION bump fails CI instead of bricking fresh installs (#80769's failure shape).

Related Issues

Fixes #80769. Supersedes #85299 (cherry-picked with authorship preserved).

Verification (Linux)

  • scripts/run_tests.sh tests/test_engines_satisfiable.py11 passed, 0 failed.
  • bash -n scripts/install.sh — syntax OK.
  • Live check: curl https://nodejs.org/dist/latest-v26.x/ resolves node-v26.7.0 tarballs for linux-x64 (the exact URL pattern install.sh uses).
  • python3 scripts/audit_pr_attribution.py — contributor mapped (GitHub-noreply email, auto-resolved).

Infographic

node26

Node 22 ships npm 11.16.0, which engines.npm rejects (11.10–11.16
ignore min-release-age-exclude). Fresh Hermes-managed installs then
fail npm ci with EBADENGINE. Node 26 ships 11.17.0.
@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists area/install-update Installer, updater, packaging, wheels, doctor javascript Pull requests that update javascript code labels Aug 15, 2026
@teknium1
teknium1 merged commit 9b3823d into main Aug 15, 2026
48 checks passed
@teknium1
teknium1 deleted the salv-node26 branch August 15, 2026 04:48
@github-actions

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on 441bbed — fix(install): provision Node 26 so managed npm satisfies eng

⚠️ Warnings

OSV vulnerability scan · View job

5 known vulnerabilities found in pinned dependencies.

How to fix:

Review the findings in the Security tab. Update the affected dependencies if a patched version is available.


debug info

CI timings

CI timings · View report · View job

Wall time 26m52s vs 28m33s (-5.9%). 8 job(s) slower, 14 faster, 2 unchanged.

  • Python tests / Run tests slice 9/12: -48.0s
  • Python tests / Run tests slice 4/12: +34.0s
  • Python tests / Run tests slice 7/12: +31.0s
  • Python tests / Run tests slice 11/12: -27.0s
  • Python tests / Run tests slice 5/12: +16.0s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/install-update Installer, updater, packaging, wheels, doctor javascript Pull requests that update javascript code P2 Medium — degraded but workaround exists type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: update bug

3 participants