ci: re-pin codeql-action to the true v4.38.0 commit - #106
Conversation
The pin 1c5b675653bb5c22dbe9b12b556ec555138e09fd is the commit that the annotated tag v4.38.1 dereferences to -- not v4.38.0, despite the trailing comment claiming otherwise. v4.38.1 is blocked estate-wide (nexia-list#100), so every repo carrying this pin has in fact been running the blocked version. v4.38.0 -> tag object 4bd7200e -> commit b96794f015dfd88f77b49b1c93e0fa7110f94c63 v4.38.1 -> tag object c23de5a8 -> commit 1c5b675653bb5c22dbe9b12b556ec555138e09fd Where the ref was a bare tag (@v4.38.1) it was also unpinned -- a mutable ref upstream can re-point at will -- so it is now pinned to a SHA as well as moved off the blocked version. In a number of repos the lock had already been moved to b96794f0 while the workflow was left on the blocked SHA. Those two disagree, so the workflow is currently rejected at startup and has not been running at all; this commit makes the workflow match the lock and brings it back to life. The workflow and actions.lock are changed in a single commit: GitHub compares the lock to the workflow by literal string, so a partial edit is a startup failure rather than a stale lock. Refs: hyperpolymath/standards#1005 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (2)
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. Comment |
|
🔍 Hypatia Security ScanFindings: 70 issues detected
View findings[
{
"reason": "Required workflow `scorecard.yml` is absent from .github/workflows/. The estate baseline expects it; without it this repository is unscanned for whatever that workflow covers, and its absence is silent — no job fails, because no job runs.",
"type": "missing_workflow",
"file": "scorecard.yml",
"action": "create",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Workflow executes remote script directly (curl/wget piped to shell). Download, verify checksum/signature, then execute.",
"type": "download_then_run",
"file": "ui-ci.yml",
"action": "verify_download_integrity",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Job `trigger-boj` in boj-build.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "trigger-boj"
},
{
"reason": "Job `build` in casket-pages.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "casket-pages.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "build"
},
{
"reason": "Job `deploy` in casket-pages.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "casket-pages.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "deploy"
},
{
"reason": "Job `analyze` in codeql.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "analyze"
},
{
"reason": "Job `a2ml-validate` in dogfood-gate.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "a2ml-validate"
},
{
"reason": "Job `dogfood-summary` in dogfood-gate.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "dogfood-summary"
},
{
"reason": "Job `k9-validate` in dogfood-gate.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "k9-validate"
},
{
"reason": "Job `scan` in hypatia-scan.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": "hypatia-scan.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "scan"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |



Re-pin
codeql-actionto the true v4.38.0 commitThis repo pinned
github/codeql-actionto a commit whose trailing comment said# v4.38.0.It is not v4.38.0. Dereferencing both annotated tags:
v4.38.04bd7200eb96794f015dfd88f77b49b1c93e0fa7110f94c63v4.38.1c23de5a81c5b675653bb5c22dbe9b12b556ec555138e09fdSo the pin was v4.38.1 — the version blocked estate-wide (nexia-list#100) — wearing a
v4.38.0label. The comment lied; in several repos theactions.lockrecordedref: 'v4.38.1'for the same SHA and had been telling the truth all along.Where the ref was a bare tag
@v4.38.1, it was additionally unpinned — a mutable refupstream can re-point at any time. Those are now pinned to a SHA and moved off the blocked
version.
Why one commit
GitHub compares
actions.lockto the workflow by literal string. A lock edit and a workflowedit that disagree — even for one commit — produce a
startup_failure, not a stale lock. So theworkflow
uses:, the lock'sworkflows:reference, thedependencies:record(
ref,commit, key) and any nesteduses:sub-list all move together here.Several of these workflows are dead on
mainright nowA base-state census of all 40 affected repos compared each workflow's literal
uses:ref againstits own
actions.lockentry before any change:mainactions.lockat allb96794f0…while the workflow still pins the blocked SHAstartup_failure— deadThat third row is the important one. In those repos the lock had already been moved to the
correct v4.38.0 commit and the workflow never followed, so the two disagree and GitHub rejects the
run at startup. Directly observed:
hyperpolymath/scriptsreportsCodeQL Security Analysis startup_failureon its currentmainhead.So for those repos this PR is not hygiene — it resurrects a CodeQL workflow that has not run at
all. Expect previously-absent checks to appear; a red among them is a scanner speaking for the
first time, not a regression.
The last row was measured, not assumed: a missing lock entry leaves a workflow unvalidated and it
runs normally (
metadatastician/metadatastician-governance, whose lock covers 3 of 8 workflows).Only a disagreeing entry is fatal. No lock keys are added here — adding one would newly enable
enforcement for a workflow that is currently exempt, which is a policy change, not a repair.
How this was verified before it was written
The transformer was dry-run against fetched copies of every distinct shape in the estate and the
result checked semantically at the YAML level, not by reading a diff:
codeql-actionrecord reads exactlyref: v4.38.0,commit: sha1-b96794f0…, withowner_id/repo_iduntouched;workflows:edge and every nesteduses:edge resolves to a record — the lock staystransitively closed, which is what actually keeps jobs from vanishing;
A line may only be dropped as a rename-collapse duplicate, and every drop is reported.
The dry run caught three destructive bugs before any repo was touched — an over-eager dedupe that
deleted pre-existing legitimate refs, a record-body pattern that silently dropped 12-space nested
uses:lists, and a line rebuild that ate the-of list-itemuses:.Mutation-tested, because a passing check proves nothing until it kills a mutant: blinding the
workflow rewriter and blinding the lock retarget were both caught by the cross-file lock guard;
the unmutated control reports
LOCK-OK.Expected effect
CodeQL moves from the blocked v4.38.1 to v4.38.0. Any red here that predates this commit is
pre-existing and is tracked separately under the stopping rule — a new scanner finding is an issue
with acceptance criteria, not a merge blocker.
Refs hyperpolymath/standards#1005.
🤖 Generated with Claude Code
https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm