LearnNewsExamplesServices
Frontmatter
id11292
titleBump GitHub Actions workflows from node-version 22 to 24
stateClosed
labels
enhancementaibuildmodel-experience
assigneesneo-opus-4-7
createdAtMay 13, 2026, 9:57 AM
updatedAtMay 13, 2026, 12:17 PM
githubUrlhttps://github.com/neomjs/neo/issues/11292
authorneo-opus-4-7
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 13, 2026, 12:17 PM

Bump GitHub Actions workflows from node-version 22 to 24

Closedenhancementaibuildmodel-experience
neo-opus-4-7
neo-opus-4-7 commented on May 13, 2026, 9:57 AM

Context

Operator @tobiu surfaced 2026-05-13 ~07:35Z: .github/workflows/test.yml still pins node-version: '22' while Node 24 is fully stable in 2026. V-B-A authorized the coordinated bump.

Authored by Claude Opus 4.7 (Claude Code 1M context). Session c2d47e91-625f-4ebf-b066-49442f465830.

V-B-A — verified substrate state

Workflow File:Line Current Pin
Tests .github/workflows/test.yml:36 '22'
Publish .github/workflows/npm-publish.yml:16 '22.x'
Data sync .github/workflows/data-sync-pipeline.yml:28 '22'
Skill manifest lint .github/workflows/skill-manifest-lint.yml:39 '22'

No project-level pins: package.json has no engines field; no .nvmrc; no .node-version. The 4 workflows are the only node-version source-of-truth.

Empirical forward-compatibility anchor: local dev runs node v25.9.0 successfully — strong signal v24 works with the codebase. No engines pin means no breaking-change blocker at the project level.

Node 24 official release calendar (corrected post-Cycle-1 V-B-A by @neo-gpt)

  • Initial release: 2025-05-06
  • Active LTS since: 2025-10-28 (already LTS for 6+ months as of 2026-05-13)
  • Maintenance LTS starts: 2026-10-20 (5 months from now)
  • End-of-Life: 2028-04-30

Correction history: my original ticket body stated "Released April 2026 — Active release line; becomes Active LTS October 2026 (~5 months away)" — this was training-data temporal anchor drift per memory anchor feedback_training_data_anchor_drift. The substrate-decision (bump v22 → v24) remains substrate-correct on technical merits; the framing was wrong but the bump direction is right. Corrected per @neo-gpt's PR #11293 Cycle 1 V-B-A.

Related historical substrate

  • #9598 (CLOSED COMPLETED 2026-03-30): forced JS-actions runner to Node 24 via FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true env var — addresses the actions infrastructure runtime (different from node-version: '22' in setup-node which is the user-project script runtime). Not a duplicate.
  • #9600 (CLOSED COMPLETED 2026-03-30): upgraded actions/setup-node@v4v6 for native Node 24 support. Also addresses actions infrastructure, not user-project script pinning. Not a duplicate.

The Problem

Workflows pin v22, lagging Node release cycle. Project local dev empirically validates v24+. Consistency-of-runtime across dev + CI is substrate-correct.

The Architectural Reality

  • .github/workflows/test.yml line 36
  • .github/workflows/npm-publish.yml line 16
  • .github/workflows/data-sync-pipeline.yml line 28
  • .github/workflows/skill-manifest-lint.yml line 39

The Fix

Single coordinated PR replacing '22' (and '22.x') with '24' across all 4 workflow files. Bounded scope, 4 single-line edits.

Acceptance Criteria

  • AC1: All 4 workflow files updated to node-version: '24' (consistent format — drop the .x suffix variant in npm-publish.yml)
  • AC2: CI passes on all 4 workflows post-bump (test.yml + npm-publish.yml triggers on tag-push so won't fire on PR; skill-manifest-lint.yml + test.yml will fire on PR)
  • AC3: No package.json engines field added in this PR (scope-discipline; can be added in follow-up if substrate-evolution warrants)
  • AC4: PR body cites this ticket + V-B-A findings (post-Cycle-1 correction: release-calendar claims aligned with official Node.js schedule)

Out of Scope

  • Adding package.json engines pin (separate substrate-evolution; defer to follow-up if needed)
  • Adding .nvmrc / .node-version (separate substrate; defer)
  • Bumping actions/setup-node action version (already at @v6 per #9600)
  • Any action infrastructure changes (#9598 + #9600 substrate)

Avoided Traps

  • Bumping to '24.x' vs '24': drop the .x variant for consistency; 3 of 4 workflows already use bare-major form. '24' is the canonical setup-node syntax.
  • Bumping to v25 (current): Node 25 is Current (Oct 2025 release), not LTS-track. Operator framing was "v24 is fully stable" which is the safer Active-LTS-track choice. v25 deferred.
  • Adding engines pin in same PR: scope-creep; separate substrate-evolution if needed.

Related

  • #9598 (closed, completed) — actions infrastructure runtime fix; substrate-adjacent but distinct
  • #9600 (closed, completed) — actions/setup-node@v6 upgrade for native Node 24 support; substrate-adjacent
  • Local dev empirical anchor: node v25.9.0 in active worktree development (forward-compat confirmation)

Origin Session ID

c2d47e91-625f-4ebf-b066-49442f465830

Handoff Retrieval Hints

  • git log --oneline -- .github/workflows/test.yml for prior node-version churn history
  • grep -rn "node-version" .github/workflows/ for the canonical 4-file substrate
tobiu referenced in commit ae03634 - "chore(ci): bump GitHub Actions workflows from node-version 22 to 24 (#11292) (#11293) on May 13, 2026, 12:17 PM
tobiu closed this issue on May 13, 2026, 12:17 PM