Repository navigation
actions.lock desync (taiki-e v2.87.24, smtp-notify v0.5.0) turns lockfile-verify and Hypatia Baseline red on main #914
Description
Problem
Two non-required governance checks fail on main (297e70c) and on every PR head cut from it, including #913:
-
governance / Actions lockfile verifyreports 5ref-changederrors. Dependabot bumped refs in the workflows without regenerating.github/workflows/actions.lock:taiki-e/install-action: workflows usev2.87.24, the lock pinsv2.87.22. Affectsbuild-gossamer-gui.yml,ci.yml,security-policy.ymlandtests.yml.hyperpolymath/smtp-notify-action:push-email-notify.ymlusesv0.5.0, the lock pinsv0.3.0.- The matching
stalewarnings flag the old entries (@v2.87.22,@v0.3.0).
Source: job 113489371196 in run 37829065650. It prints "actions-lock gate: lockfile verification FAILED (exit 1). Regenerate with scripts/update-actions-lock.sh in the same PR as the uses: change."
-
governance / Validate Hypatia Baselinefails with 5baseline_status: "new"findings, allworkflow_audit/unpinned_action, in the same 5 workflows. The scan reports "8 findings >= medium (critical=0, high=2, medium=6)"; the other 3 are acknowledged. Source: job 113489453679 in run 37829065650.This one is not fixed by a relock. The gate scans the
uses:lines, not the lock. Either the refs are SHA-pinned, or the baseline ACKs are re-keyed for the new refs. Choosing between those is an owner decision. -
Four workflows die at startup on
mainand on PR heads (startup_failure, zero jobs):ci.yml,build-gossamer-gui.yml,security-policy.ymlandtests.yml. On297e70c(push) and on fix(dispatch): send echidnabot proof obligations as GraphQL variables #913 heads11cb915and83a0c59, these are exactly the four workflows that usetaiki-e/install-action@v2.87.24, the ref missing from the lock. A fifth,codeql.yml, also dies at startup; that is the codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 case. GitHub reports only "likely failed because of a workflow file issue", so the lock desync is the consistent explanation, not a proven one. Consequence: CI currently runs no Elixir test suite at all, onmainor on PRs, becauseci.ymlandtests.ymlboth die before a job is scheduled.
Gitbot-fleet had the same desync in hyperpolymath/gitbot-fleet#604, fixed by hyperpolymath/gitbot-fleet#605. Related: #901 (codeql.yml bare commit not vouched for by the lock).
Acceptance criteria
-
.github/workflows/actions.lockis regenerated with standardsscripts/update-actions-lock.sh, not by hand. The lock records peeled commits, and the diff touches only the 5 entries above. (Amended 2026-10-09 to name accepted codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 scope: fix(ci): relock actions.lock for Dependabot-bumped refs; codeql to v4.38.2 symbolic (#914, #901) #915 also addedgithub/codeql-action@v4.38.2→2892aa5efor codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901, and the owner merged it with that change declared. All three new tags peel to the locked commits: taiki-ev2.87.24=e407f7ba, smtp-notifyv0.5.0^{}=c1c9fa07, codeqlv4.38.2^{}=2892aa5e.) -
governance / Actions lockfile verifyis green on amainpush run. (Job 113509146074 at69cf5cad; re-confirmed by job 113560800560 at4be38c80.) - The 5
unpinned_actionfindings are resolved by SHA-pinning or by re-keyed baseline ACKs (owner decision), with no blanket baseline entry. (Amended 2026-10-09 per the owner's correction comment: the relock alone resolved them, becauseActionsLock.pinned?treats lock-vouched refs as pinned. fix(ci): relock actions.lock for Dependabot-bumped refs; codeql to v4.38.2 symbolic (#914, #901) #915 added no inline SHA pins and changed no baseline ACKs, and.hypatia-baseline.jsonis untouched.) -
governance / Validate Hypatia Baselineis green on amainpush run. (Job 113509896859 at69cf5cad: 3 findings, all acknowledged, 0 new, 0unpinned_action. Re-confirmed by job 113560967990 at4be38c80.) -
CI,Tests (E2E / Integration / Stress / Bench),SecurityandBuild Gossamer GUIstart on amainpush run (nostartup_failure). If they still die at startup after the relock, the cause is something else; record it here. (Amended 2026-10-09:Build Gossamer GUIhas apaths:filter, so no push since the fix has triggered it. It is evidenced by aworkflow_dispatchatmaininstead: run 37923173066 at4be38c80, 3/3 jobs succeeded. The next push touching its paths will confirm the push case. Push runs at69cf5cad: CI 37834844329, Tests 37834844475, Security 37834844328.) - No other workflow
uses:line changes. Rewrite mode can de-pin SHAs, so the workflow diff must be checked. (Amended 2026-10-09 to name accepted codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 scope: the only exceptions are 5github/codeql-action/*lines, changed from@2892aa5e…to@v4.38.2. That is the same commit, now pinned by the lock.)
Activity
coderabbitai commentedon Oct 8, 2026
🔗 Related PRs
#823 - chore(ci): refresh actions.lock so the lockfile gate goes green (
#818) [merged]📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:💬 Have feedback or questions? Drop into our discord!
fix(dispatch): send echidnabot proof obligations as GraphQL variables (…
hyperpolymath commentedon Oct 8, 2026
Correction to item 2 above. I wrote that the
Validate Hypatia Baselinefailure "is not fixed by a relock", and that clearing it needed either inline SHA pins or re-keyed ACKs. That was wrong.lib/rules/workflow_audit.ex:317-333treats any ref the lock vouches for as pinned (ActionsLock.pinned?). #908 measured this: 9 ×unpinned_actioncleared with a relock alone. The same comment records that inline SHA-pinning is a regression under lockfile enforcement: on 2026-08-07, 40 inline pins put 14 workflows intostartup_failure.So the relock in #915 should clear all 5 findings with no inline pins and no baseline change. #915's CI on its head is the test of that.
hyperpolymath commentedon Oct 9, 2026
Verification before close (2026-10-09)
#915 (merged as
69cf5cad) fixed this issue, and the merge auto-closed it. It was reopened for two reasons. Both are now resolved:mainpush run. That could not exist at merge time, and all six boxes were unticked. The evidence is below. Every AC is now ticked, with its evidence inline.scripts/update-actions-lock.sh. Peeled tags (git ls-remote) match the lock: taiki-ev2.87.24=e407f7ba(lightweight tag), smtp-notifyv0.5.0^{}=c1c9fa07, codeqlv4.38.2^{}=2892aa5e. The codeql entry is the amended #901 scope.governance / Actions lockfile verify: job 113509146074 (Governance run 37834845333, push,69cf5cad) success. Re-confirmed by job 113560800560 (run 37850159347, push,4be38c80).ActionsLock.pinned?,lib/rules/workflow_audit.ex:317-333; see the correction comment above). #915 changed onlyactions.lock,codeql.ymlandsecurity-policy.yml: no inline SHA pins, no baseline change, no blanket entry.governance / Validate Hypatia Baseline: job 113509896859 (69cf5cad) success with 3 findings, allacknowledged, 0new, 0unpinned_action. Re-confirmed by job 113560967990 (4be38c80). Before the fix, run 37829065650 (#913 head11cb915,pull_request) had 8 findings, 5 of themnew.69cf5cad: CI 37834844329 success, 9 jobs. Tests 37834844475 success, 10 jobs. Security 37834844328 started, 9 jobs; its 3 job failures (Rust Dependency Audit,Rust License & Ban Check,Security Status) predate this issue and are tracked in #916. Build Gossamer GUI has apaths:filter, so no push since the fix has triggered it. Instead,workflow_dispatchatmainran as run 37923173066 at4be38c80: 3/3 jobs succeeded. Its lastmainpush run, 37755241662 at297e70c, wasstartup_failure.github/codeql-action/*lines (init/analyzeincodeql.yml;init/analyze/upload-sarifinsecurity-policy.yml), changed from@2892aa5e…to@v4.38.2. That is the same commit, now pinned by the lock. No otheruses:line changed.Scope of this evidence:
mainpush runs at69cf5cadand4be38c80, plus oneworkflow_dispatchatmain(4be38c80) forBuild Gossamer GUI. A push that touches the GUI'spaths:has not yet run onmain.Closing as completed. The Security job failures continue in #916.