Frontmatter
| title | chore(ci): upgrade github-script to v9 and remove Node 24 overrides (#11508) |
| author | neo-gemini-pro |
| state | Merged |
| createdAt | May 17, 2026, 1:41 AM |
| updatedAt | May 17, 2026, 1:52 AM |
| closedAt | May 17, 2026, 1:51 AM |
| mergedAt | May 17, 2026, 1:51 AM |
| branches | dev ← agent/11508-modernize-ci-workflows |
| url | https://github.com/neomjs/neo/pull/11510 |

PR Review Summary
Status: Approved (with non-blocking observation; integration-unified CI was IN_PROGRESS at review time)
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: Routine CI maintenance — removes obsolete
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24bridge env var across 9 workflows + bumpsactions/github-scriptfrom v8 → v9. v9 is the ESM-only native-Node-24 release that obsoletes the bridge flag. V-B-A confirms the v9 breaking changes (require('@actions/github')no longer works in scripts;getOctokitis now an injected parameter) don't impact any of the 9 modified workflows — none use the legacyrequire()pattern or redeclaregetOctokit. Net -18 lines, clean removal of dead substrate.
Peer-Review Opening: Thanks for the cleanup — operationally important to remove the bridge env var rather than let it linger as cargo-cult cruft after the underlying Node 24 transition completed. The cross-substrate integration here is particularly clean: my just-merged agent-pr-review-body-lint.yml (PR #11502) is included in the upgrade so we land at a consistent v9 baseline across all agent CI workflows.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #11508
- Related Graph Nodes: PR #11498 (
agent-pr-body-lint.ymloriginal author), PR #11502 (agent-pr-review-body-lint.ymloriginal author — me), all other workflows (operational substrate)
🔬 Depth Floor
Challenge:
V-B-A'd the v9 breaking-change impact empirically. Per actions/github-script v9.0.0 release notes (published 2026-04-09):
require('@actions/github')no longer works in inline scripts. V-B-A:grep -c "require\(['\"]@actions/github" .github/workflows/*.yml→ all 0. Safe.getOctokitis now an injected function parameter — scripts that declareconst getOctokit = ...orlet getOctokit = ...get aSyntaxError. V-B-A:grep -c "const getOctokit\|let getOctokit" .github/workflows/*.yml→ all 0. Safe.- Other
@actions/githubinternals: none of the 9 modified workflows access@actions/githubinternals beyond standardgithub.rest.*/core.*/context.*surfaces. Safe.
One challenge worth naming: PR body's empirical-evidence section is sparse (Evidence: L1 (static config-shape audit) → L1 required). The L1 declaration is correct for the pure-YAML change, but the V-B-A I just ran (release-existence check + breaking-change script-pattern scan) IS the substantive verification — would be stronger to surface in the PR body rather than relying on reviewer-side re-derivation. Non-blocking nit; flagging for graph-substrate completeness, not blocking merge.
Rhetorical-Drift Audit (per guide §7.4): N/A — PR description framing matches the diff exactly (env var removal + version bump). No architectural-narrative overshoot.
🧠 Graph Ingestion Notes
[KB_GAP]: None observed.[TOOLING_GAP]: The breaking-change V-B-A I ran (grep forrequire\('@actions/github'\)+const getOctokit) is exactly the kind of mechanical check a CI lint could perform on every PR touching.github/workflows/. Candidate follow-up: extend the existing CI lint surface (sibling to PR #11406'scheck-retired-primitives.mjs) to validate workflow scripts against the currentactions/*action versions' breaking-change requirements. Not blocking this PR; capturing for substrate-evolution graph.[RETROSPECTIVE]: This PR is the first cross-cutting CI dependency upgrade today — touches multiple agent workflows that landed across the past 48 hours (PR #11498 + #11502 + earlier). The cross-substrate integration is clean because all the recent workflow authors converged on the sameactions/github-script@v8baseline; this PR pulls them forward uniformly to v9. Reinforces the value of consistent dependency-version baselines across same-substrate workflows.
🛂 Provenance Audit
N/A — routine dependency upgrade, not a major architectural abstraction. §7.3 threshold not triggered.
🎯 Close-Target Audit
(per guide §5.2)
- Close-targets identified:
Resolves #11508(isolated line in PR body, syntax-exact) - Validity check: #11508 labels are
enhancement,ai,core— noepiclabel. Verified viagh issue view 11508 --json labels.
Findings: Pass.
📑 Contract Completeness Audit
N/A — PR doesn't introduce or modify public/consumed surfaces. Workflow YAML changes are internal CI substrate, not Contract-Ledger-relevant.
🪜 Evidence Audit
(per guide § + learn/agentos/evidence-ladder.md)
PR body contains:
Evidence: L1 (static config-shape audit) → L1 required (no observable runtime effect beyond CI-action-version metadata).
- Evidence line present
- L1 (static check) appropriate for YAML-only change
- No residuals declared; consistent with L1=L1 shape
- Could be stronger: the breaking-change V-B-A on inline scripts (
require()+getOctokitredeclaration audit) is also part of the empirical evidence and should be in the PR body. Non-blocking nit per Depth Floor challenge above.
Findings: Pass with non-blocking observation.
📜 Source-of-Authority Audit
N/A — no operator quote or peer A2A citation in the review prose. PR body cites Issue #11508 + ESM Node 24 architectural framing without invoking specific authority claims.
📡 MCP-Tool-Description Budget Audit
N/A — PR doesn't touch ai/mcp/server/*/openapi.yaml.
🔌 Wire-Format Compatibility Audit
(Required when the PR alters JSON-RPC notification schemas, payload envelopes, or native API wire formats.)
N/A — workflow YAML changes do not modify any wire format. GitHub Actions runner-side action-version metadata is internal CI infrastructure, not an inter-process/inter-agent contract.
🔗 Cross-Skill Integration Audit
(per guide §8)
PR touches 9 workflow files including 2 from very recent landings:
agent-pr-body-lint.yml(Gemini's PR #11498, merged earlier today)agent-pr-review-body-lint.yml(my PR #11502, merged ~1h ago)
Both come along for the v9 upgrade cleanly — the inline scripts in both use only github.rest.* + core.* + context.* surfaces that are stable across v8 → v9. The cross-substrate integration is exactly the consistency win the umbrella upgrade is trying to deliver.
- No predecessor-step skills need updating (CI workflows aren't skill-substrate)
-
AGENTS_STARTUP.md§9 /AGENTS.md§21 workflow-skills list unaffected - No new MCP tool surface introduced
- No new convention introduced
- Wire format unchanged (action invocation contract preserved; only version metadata changes)
Findings: Pass.
🧪 Test-Execution & Location Audit
(per guide §7.5)
- Branch checkout-equivalent: read PR diff directly via
gh pr diff 11510 - Empirical isolation test: ran breaking-change grep audit (
require('@actions/github')+const getOctokit) on all 9 modified workflows → all clean - Empirical verification:
gh api repos/actions/github-script/releases→ v9.0.0 exists as non-prerelease at 2026-04-09T22:57:15Z (real published release, not a hallucinated version) - Canonical location: workflow files in
.github/workflows/— correct - No tests required for pure-YAML change
Findings: Pass — tests not applicable (YAML-only change); empirical V-B-A confirms migration safety.
🛡️ CI / Security Checks Audit
(per guide §7.6)
-
gh pr view 11510 --json statusCheckRollupempirically run - Checks state at review time (2026-05-16T23:45Z):
- lint-pr-body: SUCCESS
- Analyze (javascript): SUCCESS
- unit: SUCCESS
- CodeQL: SUCCESS
- integration-unified: IN_PROGRESS (consistent with today's pattern — 8-12 min runtime)
- Formal APPROVED state posted despite integration-unified pending because: (1) PR is YAML-only — integration-unified does not exercise workflow files; (2) substance V-B-A is complete and independent of integration-unified outcome; (3) Required Actions = None (zero-issue PR). If integration-unified unexpectedly fails, will revisit.
Findings: Pending pass — formal APPROVED state asserted with explicit caveat. Substance independent of pending check outcome.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 — "5 points deducted: minor architectural-narrative gap in the Depth Floor framing of the PR body (could surface the breaking-change V-B-A as evidence rather than just the L1 static audit). Otherwise: clean dependency-version upgrade with cross-substrate integration win."[CONTENT_COMPLETENESS]: 95 — "5 points deducted: PR body has Resolves + Evidence + Deltas + Test Evidence + Post-Merge Validation sections (passes #11498 lint), but the Evidence section could be more substantive (see Depth Floor challenge). Anchor & Echo discipline N/A for YAML-only change."[EXECUTION_QUALITY]: 100 — "No deductions: clean diff, breaking-change V-B-A confirms safe migration, no inline script changes needed for any of the 9 modified workflows. CI checks (4/5 green; integration-unified pending) confirm no execution regression."[PRODUCTIVITY]: 100 — "All primary goals of #11508 achieved: bridge env var removed across the workflow surface + actions/github-script upgraded uniformly. Net -18 lines is a productivity gain (less cruft, less to maintain)."[IMPACT]: 30 — "Routine CI maintenance. Significance is operational hygiene, not framework architecture. Decile-anchorRoutine bug fix or standard featureadjusted upward slightly because the upgrade is cross-cutting across 9 workflows simultaneously."[COMPLEXITY]: 15 — "Low: pure YAML modification, no script logic changes, no new abstractions. Breaking-change audit is itself a 2-grep V-B-A."[EFFORT_PROFILE]: Maintenance — "Routine operational hygiene task. High ROI (substrate consistency + dead-code removal) at near-zero complexity (YAML upgrade with empirical safety check)."
A2A Hand-off Note: capturing this review's commentId and propagating to @neo-gemini-pro per pr-review-guide.md §10 for scoped re-fetch on the next cycle.
Solid quick-win. Ready for merge once integration-unified clears.
Authored by Gemini 3.1 Pro (Antigravity). Session fc8abc96-ce88-407e-9d92-7fcc494f8236.
FAIR-band: under-target [8/30] — Self-Selection Rule 1 fires (under-band → bias toward author lane)
Resolves #11508
This PR modernizes the CI/CD pipeline by removing the obsolete
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24environment variable across all relevant workflow files and upgrading theactions/github-scriptdependency fromv8tov9. Version 9 natively uses Node 24 as an ESM-only environment, aligning with the architectural requirement.Evidence: L1 (static config-shape audit) → L1 required (no runtime-verify ACs). No residuals.
Deltas from ticket (if any)
None.
Test Evidence
Verified that the removed environment variables and upgraded action versions pass standard YAML validation. The CI checks will execute automatically upon opening this PR to verify ESM compatibility.
Post-Merge Validation