Skip to content

ci: resync actions.lock and repin standards callers so 4 dead workflows start - #3

Merged
hyperpolymath merged 2 commits into
mainfrom
fix/redci-wave2
Oct 7, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
fix/redci-wave2

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

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:

  1. sonarqube.yml (commit 1, 80b5628). Dependabot's actions-group bump (Bump the actions group with 2 updates #1, merged as 4b5f580) changed two uses: refs and left .github/workflows/actions.lock behind, so the lock no longer matched the workflows. The resync also clears the red actions.lock is in sync with the workflow YAML check (run 37542789432).
  2. 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.
    • Their callers pinned hyperpolymath/standards@main, and the lock's standards@main record had no uses: closure.
    • The fully closed record for the template's pin, standards@da2c748, sat orphaned in the same lock.
    • Commit 2 repins all six standards callers to da2c748, which is the pin rsr-template-repo uses, where the same callers run green. It also removes the dangling @main record.

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 / gitleaks runs and passes alongside GitGuardian.

Changes

Commit 1 (80b5628): resync after Dependabot #1. .github/workflows/actions.lock, 8 lines changed:

  • The pages.yml workflow entry and its dependency record now say haskell-actions/setup@v2.12.1, matching the workflow.
  • The sonarqube.yml workflow entry and its dependency record now say sonarsource/sonarqube-scan-action@v8.3.0, matching the workflow.
  • Both are leaf actions, so no closure records are needed. I did not use the fix mode of 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@main becomes @da2c748aad55c1a1dcba00b60fe4a35017bc6540.
  • actions.lock: the six workflows: entries now point at standards@da2c748…, and the unclosed 'hyperpolymath/standards@main' record is removed.
  • The existing standards@da2c748 record is unchanged. Its uses: list is exactly the union of the six reusables' uses: at that commit (checked against git show da2c748:.github/workflows/*-reusable.yml), and every one of those leaves already has a record.

📌 New pins

Head SHA: 00001f0adc209bff15de2fc95229dccf5996a98b

Pin Resolves to Replaces
hyperpolymath/standards@da2c748aad55c1a1dcba00b60fe4a35017bc6540 (6 reusable callers) the same commit (2026-09-10, "fix(scorecard): publish findings reconciled with verified native action locks") @main (lock record sha1-d556b3db…, which had no closure)
haskell-actions/setup@v2.12.1 (lock) sha1-0f8e8c99d88aeb3fbfd523f1ef2c6f762d10d64d (annotated tag 0f7370cc dereferenced to its commit) v2.12.0 at 6037f336…
sonarsource/sonarqube-scan-action@v8.3.0 (lock) sha1-d209202bc7d53ff1cc128f7f907dac145c9d6ae9 v8.2.2 at ba9859ea…

da2c748 is 118+ commits behind standards main. 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

  • Tests pass. The checks this PR affects all pass on the head (see Testing). No code changed, so there are no code tests to run.
  • Code is formatted. Does not apply: no source code changed. YAML indentation and key order are preserved.
  • Linter is clean. gh actions-lock --no-fix exits 0. The governance / Workflow security linter check passes on the head.
  • No banned language patterns. No files were added; only workflow YAML and the lockfile changed.
  • No unsafe blocks without // SAFETY: comments. Does not apply: no code changed.
  • No banned functions. Does not apply: no code changed.
  • SPDX license headers on new or modified source files. Does not apply: no new files. The modified workflows keep their existing headers, and actions.lock is a generated lockfile.
  • No secrets, credentials, or .env files included. scan / gitleaks and GitGuardian both pass on the head.

As Applicable

  • STATE.a2ml / ECOSYSTEM.a2ml / META.a2ml updated. Does not apply: A2ML is retired estate-wide (deed replaces it), and project state did not change.
  • Documentation updated. Does not apply: nothing user-facing changed.
  • TOPOLOGY.md updated. Does not apply: the architecture did not change.
  • CHANGELOG or release notes updated. Does not apply: this is a CI-only fix.
  • New dependencies reviewed for license compatibility. Does not apply: there are no new dependencies, only a repin of an existing estate dependency and two patch/minor bumps from Bump the actions group with 2 updates #1.
  • ABI/FFI changes validated. Does not apply: there are no ABI or FFI changes.

Testing

Local, on head 00001f0a:

  • gh actions-lock --no-fix exits 0. It printed two advisories about the unrelated deed-ecosystem@main and k9-ecosystem@main refs, which were inconclusive because the Compare API was rate-limited.
  • ./scripts/check-lock-sync.sh exits 0: "in sync and transitively closed".

CI on head 00001f0a (check suites read via GraphQL):

Workflow On every earlier commit On this head
secret-scanner.yml startup_failure, 0 jobs success, 3 jobs: gitleaks, shell-secrets, rust-secrets
rust-ci.yml startup_failure, 0 jobs success, 5 jobs. Detect passes; the Cargo jobs are skipped because there is no Cargo.toml
governance.yml startup_failure, 0 jobs success, 15 jobs
sonarqube.yml startup_failure at 4b5f580 success, 1 job
lock-sync-gate.yml, k9-validate.yml, deed-validate.yml — success

Known limits:

  • check-lock-sync.sh cannot detect an incomplete callee closure. I removed one leaf from the standards@da2c748 record 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.
  • About 15 other pull_request workflows produce no check suite on this PR at all, including codeql.yml. This is why the CODE_SCANNING rule cannot be satisfied. It is being investigated separately and is not changed by this PR.
  • The EstateBranching ruleset 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

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
@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Free
  • Run ID: 9fe90599-eedd-4eba-addf-59f6d57d4a37
📥 Commits

Reviewing files that changed from the base of the PR and between 80b5628 and 00001f0.

⛔ Files ignored due to path filters (1)
  • .github/workflows/actions.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • .github/workflows/governance.yml
  • .github/workflows/hypatia-scan.yml
  • .github/workflows/mirror.yml
  • .github/workflows/rust-ci.yml
  • .github/workflows/scorecard.yml
  • .github/workflows/secret-scanner.yml

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Summary

Summary by CodeRabbit

  • Chores
    • Pinned shared governance, security scanning, mirroring, CI and scoring workflows to a specific revision for more consistent automation.

Walkthrough

Six GitHub Actions workflows now reference reusable workflows at commit da2c748aad55c1a1dcba00b60fe4a35017bc6540 instead of the moving main branch.

Changes

Reusable workflow pins

Layer / File(s) Summary
Update reusable workflow references
.github/workflows/governance.yml, .github/workflows/hypatia-scan.yml, .github/workflows/mirror.yml, .github/workflows/rust-ci.yml, .github/workflows/scorecard.yml, .github/workflows/secret-scanner.yml
Each workflow now references its reusable workflow at commit da2c748aad55c1a1dcba00b60fe4a35017bc6540. The mirror workflow’s explicit seven-secret mapping remains unchanged.

Estimated code review effort: 1 (Trivial) | ~5 minutes

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

🎁 Summarized by CodeRabbit Free

Your 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,
Six pins now point to one commit.
No branch can shift their chosen place,
The mirror keeps its secrets set.
The rabbit hops, then calls it done.

Comment @coderabbitai help to get the list of available commands.

…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
@hyperpolymath hyperpolymath changed the title ci: resync actions.lock with Dependabot's actions-group bump (#1) ci: resync actions.lock and repin standards callers so 4 dead workflows start Oct 7, 2026
@hyperpolymath
hyperpolymath merged commit 0638859 into main Oct 7, 2026
30 checks passed
@hyperpolymath
hyperpolymath deleted the fix/redci-wave2 branch October 7, 2026 09:01
@hyperpolymath hyperpolymath mentioned this pull request Oct 7, 2026
8 of 14 tasks
hyperpolymath added a commit to metadatastician/standards that referenced this pull request Oct 7, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant