Repository navigation
ci: resync actions.lock and repin standards callers so 4 dead workflows start - #3
Conversation
Dependabot #1 bumped haskell-actions/setup v2.12.0 -> v2.12.1 (pages.yml) and SonarSource/sonarqube-scan-action v8.2.2 -> v8.3.0 (sonarqube.yml) without touching actions.lock, so the lock-sync gate went red on main. Swap the two workflow entries and their dependencies: records in place. No other record changes; every other pin is untouched. haskell-actions/setup@v2.12.1 -> 0f8e8c99d88aeb3fbfd523f1ef2c6f762d10d64d sonarsource/sonarqube-scan-action@v8.3.0 -> d209202bc7d53ff1cc128f7f907dac145c9d6ae9 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (6)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 SummarySummary by CodeRabbit
WalkthroughSix GitHub Actions workflows now reference reusable workflows at commit ChangesReusable workflow pins
Estimated code review effort: 1 (Trivial) | ~5 minutes
Note 🎁 Summarized by CodeRabbit FreeYour organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing. A rabbit checks each workflow line, Comment |
…ecord secret-scanner (gitleaks), rust-ci and governance have died at startup (STARTUP_FAILURE, jobs=0, no check run) on every commit since this repo was created. Their callers pinned hyperpolymath/standards@main, whose actions.lock record carried no uses: closure, while the closed record for the template's pin (standards@da2c748) sat orphaned in the lock. Repin all six standards callers (secret-scanner, rust-ci, governance, hypatia-scan, scorecard, mirror) to da2c748, matching rsr-template-repo, where the same callers run green, and remove the dangling @main record. Verified: gh actions-lock --no-fix rc=0; scripts/check-lock-sync.sh reports in sync and transitively closed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML
…1199) ## Summary `scripts/regen-dependabot-locks.sh` (the D269 lock-regen loop, run every 30 min by `dependabot-lock-regen.yml`) only selected Dependabot PRs. The standards pin applier (`scripts/apply-workflow-pins-remote.sh`, run by `apply-workflow-pins.yml`) also rewrites `uses:` pins without touching `actions.lock`. So once the applier's App exists, every PR it opens would die at startup on an unclosed lock record. That is the same failure that `metadatastician/affinescript-libraries#3` had to cure by hand, and it is the main explained class in the 2026-10-07 estate census (38 workflows in 21 repos with phantom or off-main standards pins). `select_prs` now also selects a PR that has a bot author (`[bot]` login) and is on the applier's fixed branch `chore/re-point-standards-workflow-pins`. The branch name can be overridden with `APPLIER_BRANCH`. A human's branch with the same name is never rewritten. The applier's PRs then pass through the same repair pipeline (`gh actions-lock` → relock-sha-keys → complete-job-refs → close-lock → prune-stale → `--verify-local`). It also carries a stranded fix. That fix was found staged but not committed in the worktree `standards-regen-tolerate-actions-lock-rc`; it had no PR and no live session, and it is left untouched there. A non-zero exit from `gh actions-lock` is now fatal only if the lock is unchanged. A non-zero exit that still rewrote the lock happens with a mutable `@main` ref it will not auto-pin, as measured on proof-burrower#103. In that case `--verify-local` stays the judge, instead of the run being aborted as `tool-failed`. Closes # — no issue; this is the system-level fix chosen by the owner on 2026-10-07 instead of per-repo repin PRs. ## Type of change - [x] 🐛 Bug fix (non-breaking change that fixes an issue) - [ ] ✨ New feature: no. This widens an existing selector. - [ ] 💥 Breaking change: no. Dependabot selection is unchanged (an existing test asserts it). - [ ] 🕳️ Soundness fix: no. - [ ] 📖 Documentation: header and function comments only. - [ ] 🧹 Refactor: no. - [ ] ⚡ Performance: no. - [x] 🔧 Build / CI / tooling ## 📌 New pins Head SHA: **175cebea59050c42c2a65c5771bc64358ab76ef0**. This PR adds or changes no pins: no `uses:` SHAs, no `actions.lock` entries, no lockfiles, no container digests. ## How has this been verified? - `bash scripts/tests/regen-dependabot-locks-test.sh` → `Total: 34 passed, 0 failed`. The new cases are two for the rc tolerance (`partial` fixture) and one for the applier selector: PR 5 (`estate-applier[bot]` on the applier branch) is selected; PR 6 (human, same branch) and PR 7 (bot, other branch) are not. - Mutant check: flipping `.head.ref == $applier` to `!=` makes the selector test fail. Reverted, and back to 34/34. - `bash -n scripts/regen-dependabot-locks.sh` passes. `shellcheck` reports only info-level notes, on existing test lines. - `.githooks/docstring-scan.sh --worktree` → `functions=2 documented=2 undocumented=0 coverage=100.00%`. - The pre-commit hook suite passed: gitleaks, SPDX, sha-pins, actions-lock coverage, permissions. **Not verified, and not verifiable until the owner acts:** an end-to-end run. Both fixers mint a token from `vars.APP_ID` and `secrets.APP_PRIVATE_KEY` on this repo. Neither is set, so the mint steps are skipped and both runs show green while doing nothing. Acceptance after the App exists: 1. Dispatch regen as a dry run on one repo. The mint step must run, not be skipped. 2. Run the applier in audit mode and reconcile its DEAD-REF set with the census's 38 phantom pins. 3. Run fix mode on `metadatastician/cleave`. The PR head must show `scorecard.yml` with jobs > 0. ## Checklist - [x] My commits are **signed** (`git commit -S`): 175cebe shows `%G?` = `G`. - [x] I ran the project's own checks/tests locally and they pass (above). - [ ] New files carry the correct SPDX: no new files. Both edited files keep their existing headers. - [x] Docs are updated, and no public claim now overstates what the code does. The script header now names both PR sources. - [x] I have not introduced a soundness hole. The widening is fenced on bot author AND fixed branch AND same-repo head AND non-draft. The rc tolerance still fails on an unchanged lock. ## Notes for reviewers - The App must be a dedicated one, not OikosBot (STD-R-3). It needs Contents RW, Workflows RW, Pull requests RW and Metadata R, and must be installed on both hyperpolymath and metadatastician. The spec is in the owner's to-do §10. - Do not arm automerge unless the base branch has required contexts (§5c). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
This PR fixes four workflows that never started on
main. GitHub killed each one at startup (startup_failure, 0 jobs, no check run), so none of them showed in the checks list:sonarqube.yml(commit 1,80b5628). Dependabot's actions-group bump (Bump the actions group with 2 updates #1, merged as4b5f580) changed twouses:refs and left.github/workflows/actions.lockbehind, so the lock no longer matched the workflows. The resync also clears the redactions.lock is in sync with the workflow YAMLcheck (run 37542789432).secret-scanner.yml(gitleaks),rust-ci.yml,governance.yml(commit 2,00001f0a). These have died at startup on every commit since the repo was created.hyperpolymath/standards@main, and the lock'sstandards@mainrecord had nouses:closure.standards@da2c748, sat orphaned in the same lock.da2c748, which is the pinrsr-template-repouses, where the same callers run green. It also removes the dangling@mainrecord.About GitGuardian: GitGuardian was running, and it passed ("1 commit scanned, no secrets"). The secret scanning that was not running is the repo's own gitleaks workflow,
secret-scanner.yml, which is case 2 above. On this head,scan / gitleaksruns and passes alongside GitGuardian.Changes
Commit 1 (
80b5628): resync after Dependabot #1..github/workflows/actions.lock, 8 lines changed:pages.ymlworkflow entry and its dependency record now sayhaskell-actions/setup@v2.12.1, matching the workflow.sonarqube.ymlworkflow entry and its dependency record now saysonarsource/sonarqube-scan-action@v8.3.0, matching the workflow.gh actions-lock: a trial run pruned about 12 unrelated closure records.Commit 2 (
00001f0a): repin the standards callers.secret-scanner.yml,rust-ci.yml,governance.yml,hypatia-scan.yml,scorecard.yml,mirror.yml:hyperpolymath/standards/.github/workflows/*-reusable.yml@mainbecomes@da2c748aad55c1a1dcba00b60fe4a35017bc6540.actions.lock: the sixworkflows:entries now point atstandards@da2c748…, and the unclosed'hyperpolymath/standards@main'record is removed.standards@da2c748record is unchanged. Itsuses:list is exactly the union of the six reusables'uses:at that commit (checked againstgit show da2c748:.github/workflows/*-reusable.yml), and every one of those leaves already has a record.📌 New pins
Head SHA:
00001f0adc209bff15de2fc95229dccf5996a98bhyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540(6 reusable callers)@main(lock recordsha1-d556b3db…, which had no closure)haskell-actions/setup@v2.12.1(lock)sha1-0f8e8c99d88aeb3fbfd523f1ef2c6f762d10d64d(annotated tag0f7370ccdereferenced to its commit)v2.12.0at6037f336…sonarsource/sonarqube-scan-action@v8.3.0(lock)sha1-d209202bc7d53ff1cc128f7f907dac145c9d6ae9v8.2.2atba9859ea…da2c748is 118+ commits behind standardsmain. I picked it because it is the template's current pin and has been proven green there. Moving the template's cohort forward is a separate change.RSR Quality Checklist
Required
gh actions-lock --no-fixexits 0. Thegovernance / Workflow security lintercheck passes on the head.unsafeblocks without// SAFETY:comments. Does not apply: no code changed.actions.lockis a generated lockfile..envfiles included.scan / gitleaksand GitGuardian both pass on the head.As Applicable
STATE.a2ml/ECOSYSTEM.a2ml/META.a2mlupdated. Does not apply: A2ML is retired estate-wide (deed replaces it), and project state did not change.TOPOLOGY.mdupdated. Does not apply: the architecture did not change.CHANGELOGor release notes updated. Does not apply: this is a CI-only fix.Testing
Local, on head
00001f0a:gh actions-lock --no-fixexits 0. It printed two advisories about the unrelateddeed-ecosystem@mainandk9-ecosystem@mainrefs, which were inconclusive because the Compare API was rate-limited../scripts/check-lock-sync.shexits 0: "in sync and transitively closed".CI on head
00001f0a(check suites read via GraphQL):secret-scanner.ymlstartup_failure, 0 jobsrust-ci.ymlstartup_failure, 0 jobsCargo.tomlgovernance.ymlstartup_failure, 0 jobssonarqube.ymlstartup_failureat4b5f580lock-sync-gate.yml,k9-validate.yml,deed-validate.ymlKnown limits:
check-lock-sync.shcannot detect an incomplete callee closure. I removed one leaf from thestandards@da2c748record and the script still exited 0. Lock-sync passing is therefore no evidence that a reusable caller will start; the CI run above is the evidence.pull_requestworkflows produce no check suite on this PR at all, includingcodeql.yml. This is why theCODE_SCANNINGrule cannot be satisfied. It is being investigated separately and is not changed by this PR.EstateBranchingruleset also requires code-owner review, Copilot code review and code coverage. These are human or ruleset items that this PR cannot satisfy.Screenshots
Does not apply. The terminal and CI output is summarised in the Testing section.
🤖 Generated with Claude Code
https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML