Skip to content

chore: require Node.js 22 and test Node.js 22 and 24 on Ubuntu, Windows and macOS - #171

Merged
Nagi-Inaba merged 1 commit into
mainfrom
chore/node-22-24-support
Oct 12, 2026
Merged

Nagi-Inaba merged 1 commit into
mainfrom
chore/node-22-24-support

Conversation

@Nagi-Inaba

Copy link
Copy Markdown
Owner

Problem

  • Node.js 20 reached end of life on 2026-04-30, yet the README, package engines, doctor and CI still treated it as the baseline. Node.js 24 was never exercised.
  • macOS is advertised for the installers, but no CI job ran on it.
  • The v4 actions run on Node.js 20 and are forced onto Node.js 24 by the runner.
  • ubuntu-latest moves to Ubuntu 26.04 on 2026-10-19, and the two Chromium workflows run playwright install --with-deps, which installs system packages.
  • With no root package.json, npm uses the nearest parent directory that has a package.json or node_modules as the project, so a stray one above the clone captures npm install. This was reproduced locally while verifying this change (the install targeted a project in a parent directory; nothing was modified).

Change

  • Raise the minimum to Node.js 22 in package engines, doctor (one constant), the Web capability contract, the README files, docs/installing.md and docs/version-support.md. tests/runtime-baseline.test.mjs fails when any of these, the root manifest or the CI matrix disagree, so the baseline cannot drift again.
  • Verify runs Node.js 22 and 24 on ubuntu-latest, windows-latest and macos-latest (six jobs, 30 minute limit).
  • Move every workflow action to a release that runs on Node.js 24 (actions/checkout 7.0.1, actions/setup-node 7.0.0, actions/upload-artifact 7.0.1) and pin them by full commit SHA, as the browser workflows already were. The three SHAs were resolved from the release tags on GitHub before opening this PR.
  • Pin the two Chromium workflows (report-accessibility-e2e, web-evidence-e2e) to ubuntu-24.04.
  • Add a private root package.json (npm run sync, npm run verify, test dependency exceljs 4.4.0) and .npmrc (package-lock=false, ignore-scripts=true). The CI install step becomes npm install. Neither file is a release path.
  • Describe the new baseline in CONTRIBUTING.md and CHANGELOG.md.

permissions of every workflow are unchanged (contents: read, plus contents: write for the existing branch cleanup).

Verification

  • node scripts/verify-all.mjs on Windows / Node.js 22.19.0: PASS, 92 test files
  • node scripts/verify-all.mjs on Windows / Node.js 24.21.0: PASS, 92 test files
  • Codex / Claude parity remains valid
  • Canonical files were edited and node scripts/sync-distributions.mjs --write was followed by --check
  • Focused regression test added: tests/runtime-baseline.test.mjs derives the minimum major from the skill's engines.node and checks the root manifest, the Web capability contract, doctor --format json, the documentation statements, the Verify matrix and every workflow node-version
  • Not verified before this PR: the macOS and Ubuntu jobs and the six-cell matrix itself have never run. This PR's CI is their first run. The workflow files in this PR also trigger the path-filtered Chromium, NVDA and report accessibility workflows.

Compatibility

  • Schema/profile/procedure version impact: none
  • Migration required: yes for Node.js 20 users. Upgrade to Node.js 22 or later; doctor reports an unsupported runtime and engines is >=22.
  • CHANGELOG and docs/version-support.md updated for this breaking change
  • Primary source / license review: not applicable (no metadata change)

Security and privacy

  • No credentials, private URLs, local paths, or real audit evidence are included
  • Public-report/privacy boundaries are unchanged
  • Actions are pinned by full commit SHA; workflow permissions are unchanged
  • Release preparation, publication and remote CI results are reported separately

Merge note

Sibling PRs from the same batch also add one bullet at the same place in CHANGELOG.md. After one of them merges, the others need a trivial conflict resolution that keeps both bullets.

Issue

Part of the follow-ups listed after PR #169. Closes no issue.

🤖 Generated with Claude Code

…ws and macOS

Node.js 20 reached end of life on 2026-04-30, yet the README, engines, doctor
and CI still treated it as the baseline, and macOS was advertised for the
installers without any CI coverage.

- Raise the minimum to Node.js 22: package engines, doctor (one constant), the
  Web capability contract, README, the installing guide and the version-support
  guide. tests/runtime-baseline.test.mjs fails when any of these, the root
  manifest or the CI matrix disagree, so the baseline cannot drift again.
- Verify on Node.js 22 and 24 across ubuntu-latest, windows-latest and
  macos-latest, with a 30 minute job limit.
- Move every workflow action to a release that runs on Node.js 24 (checkout
  7.0.1, setup-node 7.0.0, upload-artifact 7.0.1), pinned by commit as the
  browser workflows already were. The v4 actions run on Node.js 20 and are
  forced onto Node.js 24 by the runner.
- Pin the two Chromium workflows to ubuntu-24.04: ubuntu-latest moves to
  Ubuntu 26.04 on 2026-10-19 and playwright install --with-deps installs system
  packages.
- Add a private root package.json and .npmrc so contributors run npm install and
  npm run verify. Without a root manifest npm uses the nearest parent directory
  that has a package.json or node_modules as the project, so a stray one above
  the clone captures the install.

Verified locally on Node.js 22.19.0 (Windows): verify-all passes with 92 test
files. The macOS jobs and the matrix itself run only on GitHub Actions.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-12T05:41:26.505528Z 102b3ef PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 102b3efed6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

test("the Node.js baseline is declared once per surface and agrees everywhere", () => {
// Node.js 20 reached end of life on 2026-04-30.
assert.ok(Number.isInteger(minimumMajor) && minimumMajor >= 22, `engines.node must be >=N with N of at least 22: ${skillPackage.engines.node}`);
const workspace = readJson("package.json");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include the root manifest in release archives

release-files.json now ships this test, but the rootFiles allow-list in scripts/build-release.mjs still excludes the newly required root package.json and .npmrc. In every generated source release, node scripts/verify-all.mjs therefore reaches this line and fails with ENOENT for package.json; the documented npm run verify cannot start either. Add the workspace files to the release allow-list and inventory, or keep the shipped verifier independent of files excluded from the archive.

Useful? React with 👍 / 👎.

@Nagi-Inaba
Nagi-Inaba merged commit 028373f into main Oct 12, 2026
9 checks passed
@github-actions
github-actions Bot deleted the chore/node-22-24-support branch October 12, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant