Commit f3b56e0
ci: unbreak standards' own secret scanning; SPDX + pin pages.yml (#511)
## The main fix: standards' own secret scanning has not run since
2026-07-06
`secret-scanner.yml` pinned the reusable at `@891b1ed` (2026-07-06),
which is **21 commits behind #500** (`08e2d246`). At that pin the
reusable's `gitleaks` job requests `pull-requests: write` + `actions:
read`, but this caller grants only `contents: read`. A called workflow
cannot exceed its caller's grant, so **every run terminated at
`startup_failure`**:
```
startup_failure main 2026-07-20T17:36
startup_failure test/signed-push-smoke 2026-07-20T17:33
startup_failure main 2026-07-20T17:24
startup_failure feat/signed-push-app-action 2026-07-20T16:55
startup_failure main 2026-07-20T13:43
startup_failure dependabot/github_actions/actions-5fa456a2a3 2026-07-20T13:28
```
This is worse than a fake-green gate: the scan never executed at all, on
the repo that *defines* the estate's secret-scanning standard.
**Fix:** use the local relative path
`./.github/workflows/secret-scanner-reusable.yml`, mirroring the
`governance.yml` exemplar. This repo owns the reusable, so it should
always scan itself with the current version — and a local path **cannot
re-stale**, so this class of breakage cannot recur here. The current
reusable needs only `contents: read`, so the existing grant is already
correct (the in-file comment was accurate; only the pin was stale).
### Estate-wide corollary (not fixed here)
The same `@d135b05` / pre-#500 pins are still in place on callers across
the estate. Verified for the record:
```
$ gh api repos/hyperpolymath/standards/compare/08e2d246...d135b05
{"status":"behind","ahead":0,"behind":64}
```
At `d135b05` the gitleaks step is literally:
```yaml
- name: Gitleaks Secret Scan
continue-on-error: true # <-- cannot fail
uses: gitleaks/gitleaks-action@e0c47f4f...
```
versus current `main`:
```yaml
- name: Install gitleaks (pinned + checksum-verified) # sha256-verified binary
- name: Gitleaks secret scan (gating)
run: ... gitleaks detect ... --exit-code 1 # gates for real
```
So bumping those caller pins is **not cosmetic staleness** — it converts
the estate's primary secret scanner from cannot-fail to actually-gating,
*and* drops the permission demand to `contents: read` (removing the
startup_failure hazard). That caller sweep is tracked separately.
## Secondary fixes
- **`pages.yml`** (added in #503): had no SPDX header — tripping the
governance "missing SPDX header" gate — and four unpinned tag refs,
which the estate Actions policy rejects at run creation. Added `MPL-2.0`
(**this repo's licence — deliberately not AGPL**) and pinned all four to
release SHAs, keeping the current majors: `checkout` v7.0.0,
`upload-pages-artifact` v5.0.0, `deploy-pages` v5.0.0. (Note:
paint-type's pages.yml pins v3/v4 — copying those here would be a
downgrade.)
- **`spark-theatre-gate.yml`**: corrected a mislabelled pin comment —
SHA `9c091bb2` is v7.0.0, not v4. Cosmetic, no behavioural change.
## Verification
- All three files parse (`yaml.safe_load`).
- The `startup_failure` claim is from `gh run list`, not inference; this
PR's own Secret Scanner run is the direct test — it should execute
rather than startup_failure.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent 45108f9 commit f3b56e0
3 files changed
Lines changed: 16 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | 3 | | |
3 | 4 | | |
| |||
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | | - | |
| 22 | + | |
22 | 23 | | |
23 | | - | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| |||
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
40 | | - | |
| 41 | + | |
41 | 42 | | |
42 | 43 | | |
43 | 44 | | |
| |||
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
53 | | - | |
| 54 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
22 | 31 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
67 | | - | |
| 67 | + | |
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
| |||
0 commit comments