fix(ci): codeql-action v4.38.1 -> v4.38.0 SHA pin + dependabot hold (estate-wide startup_failure) - #973
Conversation
…d (estate canonical)
v4.38.1 (tag AND its commit SHA 1c5b675) fails GitHub workflow-startup
validation on every repo that took the bump: CodeQL/Hypatia runs die with
startup_failure, zero jobs, no API error text. Proven red on nexia-list,
hypatia, vexometer, rsr-template-repo; proven green <=v4.38.0
(affinescript, boj-server, deed-ecosystem, and nexia-list post-rollback).
Canonical reusables pinned back to the v4.38.0 commit
b96794f015dfd88f77b49b1c93e0fa7110f94c63 ('# v3' comments corrected to
'# v4.38.0'), actions.lock re-keyed to match, and a full dependabot hold
on github/codeql-action added - scoped versions ignores did NOT hold
downstream (nexia-list#101 re-raised the bump in SHA form within an hour).
Full investigation + evidence chain: nexia-list#100. Consumer-repo
rollbacks: nexia-list (merged), hypatia, vexometer, rsr-template-repo,
metadatastician/burble (this batch).
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Warning Review limit reachedNext included review available in 37 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (3)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (3)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (28)
|
| Layer / File(s) | Summary |
|---|---|
Action pins and update hold .github/workflows/codeql-reusable.yml, .github/workflows/hypatia-scan-reusable.yml, .github/dependabot.yml |
The CodeQL initialisation, analysis, and SARIF upload steps now use v4.38.0. Dependabot ignores later github/codeql-action updates and records the current hold. Existing workflow inputs and SARIF settings are unchanged. |
Priority: ⬆️ High
Estimated code review effort: 1 (Trivial) | ~5 minutes
Change: Bug fix
Suggested reviewers: joshuajewell
Merge Risk: ⚪ Minimal · up to 6591d
The workflows use the known-green CodeQL v4.38.0 release, preventing the reported startup failures while updates are held; the change is merge-ready.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
| Check name | Status | Explanation |
|---|---|---|
| Title check | ✅ Passed | The title clearly summarises the rollback from v4.38.1 to v4.38.0 and the Dependabot hold, which are the main changes. |
| Description check | ✅ Passed | The description is directly related to the workflow rollback, startup failures, SHA updates, Dependabot hold, and follow-up actions. |
| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0… |
| Linked Issues check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
❌ Error running CI fixer.
❌ Error running CI fixer.
❌ Error running CI fixer.
❌ Error running CI fixer.
- Commit to this branch
- Create a new PR
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
A rabbit checks the action pin,
Four-point-thirty-eight lets scans begin.
Dependabot waits beside the gate,
While SARIF travels at a steady rate.
CodeQL hops on, secure and bright.
Comment @coderabbitai help to get the list of available commands.
|
✅ Coding Agent task started: View task and status The task will inspect the CI failures, validate its fix, and open a stacked fix pull request automatically.
|
Rate Limit Exceeded
|
Rate Limit Exceeded
|
|
Rate Limit Exceeded
|
Rate Limit Exceeded
|
Rate Limit Exceeded
|
v4.38.1 (tag AND commit SHA 1c5b675) fails GitHub workflow-startup validation estate-wide: codeql/hypatia runs die with startup_failure, zero jobs, no API error text. Full investigation: nexia-list#100. Rollback to the v4.38.0 commit b96794f015dfd88f77b49b1c93e0fa7110f94c63 (green on deed-ecosystem; satisfies repo SHA-pin policy). actions.lock re-keyed; dependabot held unconditionally (versions-scoped ignores were bypassed in SHA form - nexia-list#101). Canonical fix: hyperpolymath/standards#973.
…incident fix) (#978) ## What happened Dependabot **#977** (`68acee77`, merged today) bumped `codeql-action` from 4.38.0 **back to 4.38.1** — the version **#973** had escaped hours earlier because it fails GitHub's workflow-startup validation estate-wide (nexia-list#100). Measured on `hyperpolymath/standards` within the hour: | workflow | state | first red | |---|---|---| | `codeql.yml` | red after 4 consecutive greens | 12:09Z | | `scorecard.yml` | red after 2 consecutive greens | 11:51Z | The newest run of each reports **`jobs = 0`** — startup death, not a failing job. ⚠ GitHub surfaces it here as `conclusion=failure`, **not** `startup_failure`, because the death is in the *called reusable*. Checking only for `startup_failure` would have missed this entirely. ## The five refs | workflow | refs | |---|---| | `codeql-reusable.yml` | `init`, `analyze` | | `hypatia-scan-reusable.yml` | `upload-sarif` | | `scorecard-reusable.yml` | `upload-sarif` ×2 | ⚠ **The first three are the dangerous shape.** #977 replaced the SHA but inherited #973's comment, so each line reads: ``` uses: github/codeql-action@1c5b675... # v4.38.0 (4.38.1 blocked estate-wide; nexia-list#100) ``` An annotation asserting **the exact opposite of the value it annotates**. A reviewer reading the comment sees the safe version and moves on. `scorecard-reusable.yml` was never swept by #973 at all and kept honest `# v3` / `# v4.38.1` comments — so the *un*fixed file was the legible one. ## Why the hold did not hold `.github/dependabot.yml` already carried a hold on `github/codeql-action`. It matched nothing: the workflows reference the **subpath** actions, and Dependabot treats each subpath as its own dependency name. #977's own body says *"Updates `github/codeql-action/init` from 4.38.0 to 4.38.1"*. The entry is now `github/codeql-action*`. **Without this the next scheduled run reopens the same PR and re-breaks both workflows.** ## actions.lock is deliberately untouched The lock already carried `b96794f` for all three workflows — the lockfile was the **correct** side of the drift and the workflows were the stale side. Regenerating it (the cure the gate's own error text prescribes) would have written `1c5b675` **back into the lock** and re-legitimised the blocked version. A lock/workflow drift has two possible stale sides and the message picks one blindly. ## Verification - Zero refs to `1c5b675` remain under `.github/` - actions-lock gate: **no error-severity, no `stale` findings** (93 pre-existing `sha-as-ref` warnings unchanged) - `git diff --stat -- .github/workflows/actions.lock` → empty - `b96794f` confirmed as the commit that tag `v4.38.0` peels to - All pre-commit hooks pass, including `validate-actions-lock` — which was blocking *every* commit carrying a workflow ref Refs #973, #977, nexia-list#100, nexia-list#101, nexia-list#104 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01WPSJ7fBhVAMcpSffCBWUDo Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
… to un-startup-kill CI Root cause of the estate-wide startup_failure that killed every workflow on the previous attempt: github/codeql-action v4.38.1 (1c5b675) is rejected by GitHub's workflow-startup validation — any workflow naming it dies at startup with zero jobs. Dependabot #105 bumped codeql.yml/oikosbot.yml to v4.38.1 while leaving actions.lock at v4.38.0, so main inherited both the startup-kill and a lock drift. Changes - codeql.yml (init/analyze) and oikosbot.yml (upload-sarif): pinned to the v4.38.0 SHA b96794f015dfd88f77b49b1c93e0fa7110f94c63, matching the estate rollback precedent (hyperpolymath/nexia-list#100, hyperpolymath/standards#973/#978). persist-credentials: false retained. - .github/dependabot.yml: full hold on github/codeql-action until upstream clears 4.38.1 or a newer release verifies green (a versions-only rule was bypassed by dependabot re-bumping in SHA form elsewhere in the estate). - actions.lock resynced to the workflow YAML (all four lock-sync clauses): * codeql/oikosbot entries -> v4.38.0 SHA form with a dependencies record * coverage.yml plain drift closed: codecov-action v7.1.0 -> v7.1.1 (303a32d, nested github-script use re-verified upstream) and taiki-e/install-action v2.87.13 -> v2.87.17 (94c31af, no nested uses) * pruned the stale slsa-github-generator chain retired by the #91 release rewrite (slsa records + orphaned softprops/upload-artifact leaves) Verified locally: faithful port of scripts/check-lock-sync.sh passes all clauses; every workflow + lockfile + dependabot.yml parses; workflow-linter SPDX/permissions checks pass; zero references to v4.38.1/1c5b675 outside hold comments. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
… — un-startup-kill CI (#107) ## Summary Follow-up to #106. That PR landed the #102 conflict resolution but inherited Dependabot #105's broken state: `github/codeql-action` bumped to **v4.38.1**, a version under an **estate-wide hold** because GitHub's workflow-startup validation rejects it — any workflow naming it dies at startup with zero jobs (hyperpolymath/nexia-list#100, hyperpolymath/standards#973/#978). This is what caused the `startup_failure`s observed while #106 was being verified, and it is still killing **Coverage**, **OikosBot**, and reddening **Governance / Actions lockfile verify** + **Lock Sync Gate** on main. ## Changes - `codeql.yml` (init/analyze) and `oikosbot.yml` (upload-sarif): pinned to the **v4.38.0 SHA** `b96794f` per the estate rollback precedent; `persist-credentials: false` retained. - `.github/dependabot.yml`: full hold on `github/codeql-action` until upstream clears 4.38.1 or a newer release verifies green (the estate measured that a `versions: ["4.38.1"]` rule gets bypassed when dependabot re-raises in SHA form). - `actions.lock` resynced to the workflow YAML (all four `check-lock-sync.sh` clauses): - codeql/oikosbot entries → v4.38.0 SHA form with a matching `dependencies:` record - plain drift closed: `codecov-action` v7.1.0 → v7.1.1 (`303a32d`, nested `github-script` use re-verified upstream) and `taiki-e/install-action` v2.87.13 → v2.87.17 (`94c31af`, no nested uses) - pruned the stale `slsa-github-generator` chain retired by the #91 release rewrite ## Testing - Faithful local port of `scripts/check-lock-sync.sh`: all clauses pass (locked incl. job-level reusable refs, no orphans, transitively closed with 0 dangling edges, full coverage). - Every workflow + lockfile + dependabot.yml parses as YAML. - Workflow Security Linter steps (SPDX headers, permissions) pass locally. - Zero references to v4.38.1/`1c5b675` outside hold comments. <!-- SPDX-License-Identifier: AGPL-3.0-or-later --> Co-authored-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>



Summary
Estate-wide incident:
github/codeql-actionv4.38.1 fails GitHub workflow startup on every repo that took it — CodeQL/Hypatia runs die withstartup_failure, zero jobs dispatched, no error text in any API surface. The evidence chain (full detail: nexia-list#100):@v4.38.1tag (via dependabot #94)@1c5b675(4.38.1 SHA)@v4.38.1@1c5b675The v4.38.1 tag exists (peels to
1c5b675) and byte-identical workflow content runs under a fresh path — so the failure is the version value itself at GitHub's start-validation layer, not content, permissions (probes withsecurity-eventsstart fine), or the default-setup conflict.Changes here (canonical source of the estate's workflows)
codeql-reusable.yml,hypatia-scan-reusable.yml:codeql-action/*re-pinned1c5b675(v4.38.1) →b96794f0(v4.38.0 commit; wrong# v3comments corrected to# v4.38.0).actions.lock: re-keyed to the v4.38.0 SHA entries (dependabot bumped the reusable pins without regenerating the lock).dependabot.yml: full hold ongithub/codeql-action— scopedversions:ignores do NOT hold for this bot path (nexia-list#101 re-raised the bump in SHA form within an hour, copying the inline warning comment verbatim while swapping the SHA).Follow-ups
Consumer rollbacks shipped in the same batch: nexia-list (merged ✅), hypatia, vexometer, rsr-template-repo, metadatastician/burble (each with the same dependabot hold). Reconsider the hold when upstream clears v4.38.1 or a newer release verifies green on one canary repo.