Skip to content

CI: pin the estate audit to cicd-suite 376898b - #32

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/kcut-ladder-i0-b5zcm8
Oct 14, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
claude/kcut-ladder-i0-b5zcm8

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Summary

The estate audit called hyperpolymath/cicd-suite/.github/workflows/main-estate-audit.yml@main. So any change to cicd-suite ran here on the next push, with this repository's token and without review. This PR pins it by full SHA, which you decided after #31.

cicd-suite #50, merged today, makes a pinned thin caller the estate's way of consuming the audit. Its README says "Pin a full SHA, never @main or a tag". main-estate-audit.yml is now its templates/estate-audit-caller.yml, with the SHA filled in.

Type of change

  • 🐛 Bug fix
  • ✨ New feature
  • 🕳️ Soundness fix
  • 📖 Documentation
  • 🔧 Build / CI / tooling
  • ♻️ Refactor
  • 🔒 Security
  • 🧪 Tests only

📌 New pins

  • hyperpolymath/cicd-suite/.github/workflows/main-estate-audit.yml@376898bbe872226866ccbc7648d43123b8bb21b9: cicd-suite main, the #50 merge. It is reachable from main, which matters because a PR-head-only commit is refused at job creation.

What changes in practice

  • Same gates as before. It runs the same 24 gates as 4f54042, which every audit run here used until today. Both pin the gate composites at 1aa6bfb, and actions/ is identical between the two commits. The two stub gates (prat, semantic-audit) are no longer run.
  • New shape. One check becomes five: estate / governance, hygiene, manifests, languages and advisory. A failing gate no longer hides the gates after it. No ruleset requires the old check, so nothing in Settings needs changing.
  • Permissions. The caller grants contents: read, the only permission the called workflow declares. Asking for more than the caller grants is what stopped Scorecard before CI: CodeQL and OSSF Scorecard start again #31.
  • actions.lock unchanged. It keeps this file as [], the same shape as secret-scanner.yml. cicd-suite records that a cross-repository reusable call written into the lock fails at startup with zero jobs.
  • Moving the pin later. It moves only by PR. cicd-suite's templates/track-estate-audit.yml can open those PRs weekly, but it needs an AUTOMATION_TOKEN secret, so it is not added here.

How has this been verified?

  • actionlint is clean.
  • node scripts/check-repository.mjs passes, and all 27 tests pass.
  • The 25 locally runnable estate gates at 1aa6bfb pass on this tree. manifest needs external validators.
  • The decisive check is this PR's own audit run, which calls the new pin. It should show five estate / * checks rather than one, all green except possibly advisory, which cannot fail.

Checklist

  • Commits are signed (SSH, verified by GitHub)
  • Local checks pass
  • SPDX header kept
  • Docs do not overstate: the header says why the pin and the [] lock entry are needed
  • No soundness hole: workflow configuration only

Notes for reviewers

🤖 Generated with Claude Code

https://claude.ai/code/session_01MF5GeeBBDF6sUzr6pZTjWV


Generated by Claude Code

Summary by CodeRabbit

  • Chores
    • Updated the automated estate audit workflow to run on pushes and pull requests targeting the main branch. It now uses a fixed version of the audit process and read-only repository permissions. The workflow no longer supports being triggered as a reusable workflow. No changes to end-user functionality are included.

The estate audit was called at cicd-suite@main, so any change there ran
here on the next push, unreviewed. cicd-suite #50 (merged 2026-10-14)
makes the pinned thin caller the estate's way of consuming the audit:
its README says to pin a full SHA, never @main, and this file is now
its templates/estate-audit-caller.yml with the SHA filled in.

The pin is 376898b, cicd-suite main and the #50 merge. It runs the same
24 gates as 4f54042, which every run here used until today: both pin
the gate composites at 1aa6bfb, and actions/ is identical between the
two. The difference is shape. The audit now reports five checks
(governance, hygiene, manifests, languages, advisory), and a failing
gate no longer hides the gates after it. None of these checks is
required by a ruleset here, so the renamed checks need no ruleset
change.

The caller grants contents: read, the only permission the called
workflow declares. actions.lock keeps the file as [], as for
secret-scanner.yml: a cross-repository reusable call recorded in the
lock fails at startup.

actionlint is clean, the documentation guard and the 27 tests pass, and
the 25 locally runnable gates at 1aa6bfb pass on this tree (manifest
needs external validators). This PR's own run of the audit is the check
on the new pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MF5GeeBBDF6sUzr6pZTjWV
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Repository: hyperpolymath/choreographic-types/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 9aa4eaf4-177d-4a38-9f7e-20b02fa348e5
📥 Commits

Reviewing files that changed from the base of the PR and between e997664 and 9556210.

📒 Files selected for processing: 1
  • .github/workflows/main-estate-audit.yml
 _____________________________________________________________________________________
< All idioms must be learned. Good idioms only need to be learned once. - Alan Cooper >
 -------------------------------------------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

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

@sonarqubecloud

Copy link
Copy Markdown

Copy link
Copy Markdown
Owner Author

OSSF Scorecard / Run Scorecard PR is red, and the cause is not this PR. It is not a required check.

  • Why it fails. The job's last step reports "Scorecard reconciliation incomplete … This run fails by design" (run 38572423009). main fails the same way at e997664 (run 38552885002).
  • What it wants. The reconciler wants job-level reusable calls recorded in actions.lock. cicd-suite #50, and the startup failures in CI: CodeQL and OSSF Scorecard start again #31, say such calls must stay out of the lock.
  • No fix in this repository. None exists here yet: it needs the two estate rules to be reconciled in hyperpolymath/standards.

Everything this PR changes ran green:

  • the audit at the new pin, as five jobs (estate / governance, hygiene, manifests, languages, advisory);
  • the Secret Scanner;
  • CodeQL;
  • Documentation Integrity.

Generated by Claude Code

@hyperpolymath
hyperpolymath marked this pull request as ready for review October 14, 2026 13:34
@hyperpolymath
hyperpolymath merged commit 0d904a1 into main Oct 14, 2026
21 of 23 checks passed
@hyperpolymath
hyperpolymath deleted the claude/kcut-ladder-i0-b5zcm8 branch October 14, 2026 13:34
hyperpolymath added a commit that referenced this pull request Oct 19, 2026
…rd) (#34)

## Summary

**`main` is currently broken.** Since 16 Oct, any job that resolves a
lock record repeating its SHA as `ref` dies at "Set up job" with:

> Unable to resolve action `actions/checkout@3d3c42e5…`: invalid
lockfile pin

That covers two required checks, the Agda proof gate and `scan /
gitleaks`. A manual run of `proofs.yml` on `main` at `f5a4177` failed
this way today
([39251522875](https://github.com/hyperpolymath/choreographic-types/actions/runs/39251522875));
the same commit passed on 15 Oct. Until this merges, no PR can pass its
required checks. The scheduled OSSF Scorecard runs (16 to 19 Oct) fail
with the same error, on `upload-sarif`.

What job setup now refuses is a **tagged action whose lock record
repeats the SHA as `ref`**. `gh actions-lock` records the release tag
there. The check applies in two places:
- **This repository's lock.** The `actions/checkout` record has had the
SHA as `ref` since #33, which changed it from `v7.0.1`. The
`github/codeql-action` record has had it since #31.
- **The called repository's lock, for the actions a reusable workflow
uses.** At `94572e6`, the commit the Secret Scanner was pinned to, the
standards lock has the same SHA form. By `75bd599` standards had fixed
its lock.

## Type of change

- [x] 🐛 Bug fix
- [ ] ✨ New feature
- [ ] 🕳️ Soundness fix
- [ ] 📖 Documentation
- [x] 🔧 Build / CI / tooling
- [ ] ♻️ Refactor
- [x] 🔒 Security
- [ ] 🧪 Tests only

## 📌 New pins

- `hyperpolymath/standards` at
`75bd5994470661a099df562d6d5ad2fe744dbd66` for both
`scorecard-reusable.yml` (was `@main`) and `secret-scanner-reusable.yml`
(was `94572e6`). Between `94572e6` and `75bd599` the scanner workflow
changed only in its header.
- Lock records copied from the standards lock:
`actions/upload-artifact@cf430e03…` (v7.0.2) and
`ossf/scorecard-action@2d114668…` (v2.4.4).

## What changes

- **`actions.lock`:**
- `actions/checkout` gets `ref: 'v7.0.1'` back, and
`github/codeql-action` gets `ref: 'v4.38.0'`. `git ls-remote` confirms
both tags.
- Untagged workflow pins (cicd-suite, standards) keep the SHA as `ref`,
as the standards lock does.
- One `standards@75bd599` record, listing the actions both workflows
use, replaces `standards@main` and `standards@94572e6`.
- The header states the rule as observed. It no longer claims "36
workflows" or cites a script this repository doesn't have.
- **`secret-scanner.yml`:**
  - Pinned at `75bd599`.
- Drops `secrets: inherit`. The scanner workflow's header at that commit
says callers must not pass it: the workflow declares and reads no
secrets, and `inherit` forwards every secret the caller can see
(CWE-250, standards#1108 §6b).
  - The caller's comment calling `inherit` required is corrected.
- **`scorecard.yml`:** pinned at `75bd599`.

## How has this been verified?

- **Lock and workflows:** keys sorted, no dangling or unused entries.
actionlint is clean on both workflows.
- **Repository checks:** `node scripts/check-repository.mjs` passes, and
all 27 tests pass.
- **On this PR, step by step:**
- Fixing the two refs let the Agda gate and CodeQL get past setup, and
CodeQL passed.
  - Repinning the scanner let `scan / gitleaks` pass.
  - Scorecard (PR job) and the five estate-audit jobs pass.
- **The scheduled Scorecard run is confirmed only after merge.** It
happens only on `main`, and Scorecard refuses manual runs on other
branches ("Only the default branch main is supported"). The first 04:10
UTC run after merge settles it.

## Checklist

- [x] Commits are signed (SSH, verified by GitHub)
- [x] Local checks pass
- [x] SPDX headers untouched
- [x] Docs do not overstate: the lock header's false claims are removed
- [x] No soundness hole: workflow configuration only

## Notes for reviewers

- Four commits, in the order the diagnosis went. Commit 3 (a `uses:`
list on the 94572e6 record) did not fix the scanner, and commit 4
removes that record. Squash on merge.
- Branch restarted from `main` at `f5a4177` after #32 merged.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01MF5GeeBBDF6sUzr6pZTjWV

---------

Co-authored-by: Claude <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.

2 participants