Repository navigation
fix(ci): pin Node releases with incident key rejection - #306
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR pins Node to 26.12.1 in documentation CI and GitHub Pages deployment. Example: A runner has Node 26.12.0 cached.
Review scores
ProductKind: Maintenance · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep open: main still permits older cached Node 26 releases, and this PR narrowly pins both documentation workflows to the verified security release without introducing a concrete defect. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherGitHub Actions selects Node before running documentation tests and generating the static site; the Pages workflow then publishes that site. flowchart TD
A[Workflow trigger] --> B[Setup Node]
B --> C[Matching cache or official download]
C --> D[Documentation tests]
D --> E[Static site build]
E --> F[Pages deployment]
Technical reviewBest possible solution: Use the exact patched Node release in both existing workflow owners. Do we have a high-confidence way to reproduce the issue? The workflows and pinned setup-node source establish how an older cached 26.x release can satisfy main's selector; no target code was executed. Is this the best way to solve the issue? The two exact version substitutions are the smallest complete fix for these workflows and retain the intentionally selected Node major. AGENTS.md: found but not applied because it conflicted with ClawSweeper's review contract. Codex review notes: model internal, reasoning medium; reviewed against 6d670fc461f4. Provenance checked
TestingProof path: none. SecurityNone. EvidenceWhat I checked:
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 21, 2026, 5:42 PM ET / 21:42 UTC. |
What Problem This Solves
Managed CI, hydration and release jobs can select cached Node versions that trust the compromised eMudhra keys.
User Impact
Pin Node 26.12.1 within the existing release line. Installed products and the Actions runner require separate updates.
Why This Change Was Made
Exact fixed patches prevent old cache entries from satisfying setup-node, including its fallback after manifest-resolution failure.
Evidence
Changed workflows passed duplicate-key YAML validation. Unchanged application and Go suites were not rerun. Independent review and
git diff --checkpassed. Official Linux arm64 release binaries rejected all 12 incident chains in eight trust modes, with ordinary HTTPS controls passing. Other platform executions remain hosted CI proof.Also upgrade Alpine
ca-certificatesandca-certificates-bundleto20261020-r0in both image stages before network or build commands. The Go base already contains the older main package, so plainapk add ca-certificatesretains its vulnerable roots. The normal signed package upgrade and real post-install trigger were tested: all twelve incident chains fail with the resulting CA file, hashed CA directory, their union, andcert.pem; a GitHub control succeeds. Application checks from the preceding head remain applicable because application code and build commands are unchanged. Rebuilt image publication and custom CA overrides remain separate.