Repository navigation
feat(ci): default-branch actions.lock repair in the Dependabot lock sweep - #1248
Conversation
…weep The sweep only repaired open Dependabot and applier PRs, so a stale lock that already reached a default branch (proof-burrower#110, merged red because "Actions lockfile verify" is not required) stayed stale. Every caller workflow then hits startup_failure and its required checks never report. REGEN_MAIN=1 (the new 04:41 UTC tick, or dispatch with main-repair) runs the same repair chain on each default branch. When the lock changes it opens one lock-only PR from chore/regenerate-actions-lock. It skips a repo that already has that PR open, reuses the branch only when its head is its own leftover repair commit, and never touches a branch it did not write. The App needs Pull requests R/W for this. Tests: 59/59 in scripts/tests/regen-dependabot-locks-test.sh; the always-force-move and ignore-open-repair-PR mutants both fail them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019a95kk88TZ1iegsBK3kox3
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 26 minutes. View limit details
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 |
K9 contract conformancerun https://github.com/hyperpolymath/standards/actions/runs/38544926415 K9 normative contract typecheckK9 contract self-testK9 conformance fixturesK9 corpus conformance (L2) |
K9 contract conformancerun https://github.com/hyperpolymath/standards/actions/runs/38548645118 K9 normative contract typecheckK9 contract self-testK9 conformance fixturesK9 corpus conformance (L2) |
K9 contract conformancerun https://github.com/hyperpolymath/standards/actions/runs/38549501368 K9 normative contract typecheckK9 contract self-testK9 conformance fixturesK9 corpus conformance (L2) |
|



What
dependabot-lock-regen.ymlonly repaired open Dependabot and applier PRs. A staleactions.lockthat had already reached a default branch stayed stale. That happened with proof-burrower#110, which dependabot-automerge merged red because "Actions lockfile verify" is not a required check. After that, every caller workflow in the repo hitsstartup_failureand its required checks never report. proof-burrower#111 sat on "analyze (actions, none) — Expected" for this reason.This PR adds a default-branch repair mode,
REGEN_MAIN=1:When it runs. A new daily
41 4 * * *tick, or a dispatch withmain-repair: true. The half-hourly ticks behave as before.What it does. For each repo it runs the same repair chain on the default branch:
gh actions-lock--verify-localcheck-lock-sync.shIf the lock changes, it creates
chore/regenerate-actions-lockfrom the default-branch head, commits the lock throughcreateCommitOnBranch(withexpectedHeadOid), and opens one lock-only PR.Safety.
select_prsnow also matches bot-authored PRs from the repair branch, so later sweeps keep that PR's lock current.No new
uses:. The gh-actions-lock pin is the estate pin, which matches the governance reusable workflow. Sincemainwas merged in (58d3c80, carrying fix(ci): move the estate's gh-actions-lock pin to v0.2.0, with a real-binary contract test #1250), both are v0.2.0.scripts/tests/gh-actions-lock-contract-test.shholds every install to one version.Owner action this depends on (decision O11, "App + regen + required")
The workflow is
disabled_manuallyand the applier App doesn't exist yet. To turn this on:vars.APP_IDandsecrets.APP_PRIVATE_KEYon standards.dependabot-lock-regen.yml.After one green sweep, the follow-up makes "Actions lockfile verify" required, so a red lock can no longer auto-merge.
Evidence
scripts/tests/regen-dependabot-locks-test.sh: 59/59 pass. New cases:select_prs, bot vs human author;REGEN_MAINwiring on and off.bash -n: clean. actionlint v1.7.7: clean. Workflow duplicate-key check: clean.Status: TESTED (stubbed
gh, local fixture clone). Not yet run live, because the App is absent.🤖 Generated with Claude Code
https://claude.ai/code/session_019a95kk88TZ1iegsBK3kox3
Generated by Claude Code