Measured on main @ d309505b on 2026-09-22. Filed under the standing stopping rule:
a scanner finding does not block a merge — it becomes an issue with acceptance criteria.
One issue, four items, acceptance criteria per item. Fixes go in separate PRs.
1. actions.lock is in sync with the workflow YAML — ✅ cure already open as #104
Status: resolved pending merge of #104. Recorded here for completeness because it was red
when this triage was taken.
The gate went red on main within five minutes of #101 merging. Concurrent commit b506eeda
(12:29:23Z) added .github/workflows/standards-pipeline.yml, which pins
hyperpolymath/standards/.github/workflows/ci-pipeline.yml@2eb9bb19…, and wrote that workflow's
lock entry as []. #101 merged at 12:34:39Z, so the gate it shipped caught the very next
desync — which is the behaviour it was built for.
Because standards-pipeline.yml triggers on pull_request + workflow_dispatch only, nothing
had been startup-killed yet. The next PR would have been the first.
#104 adds the dependency record with its 4 nested refs, closes 3 dangling edges
(haskell-actions/setup@6037f336, hyperpolymath/standards@571cc734, oven-sh/setup-bun@0c5077e5),
prunes 1 orphan, and ships the case-folding gate script.
Acceptance criteria
2. governance / Allowlist Preflight — one action not covered by the estate allowlist
Job log, verbatim:
GAP step-security/harden-runner@v2.16.0 (add its owner/* or owner/repo@* pattern, or run set-allowed-actions.sh)
checked 21 `uses:` refs across .github/workflows — 1 not covered by the allowlist
##[error]Process completed with exit code 1.
step-security/harden-runner was introduced by concurrent commit dca455e. The allowlist it is
checked against is not in this repo — it lives in hyperpolymath/standards at
rhodium-standard-repositories/actions-allowlist/allowed-actions.json.
So this is one of two decisions, and it is an estate decision, not a repo one:
- (a)
step-security/harden-runner is wanted estate-wide → add step-security/harden-runner@*
to the standards allowlist. Every other estate repo then inherits the permission.
- (b) it is not → remove the
uses: from this repo's workflow.
Acceptance criteria
3. lint-workflows / Check SPDX Headers — 27 of 29 workflows have no SPDX header on line 1
Re-measured against the default branch via the contents API, not a working copy. The CI log
enumerates fewer files than this because its output is truncated; the true count is 27.
The 27:
codeql.yml container-build.yml dependabot-automerge.yml dogfood-gate.yml
e2e.yml estate-rules.yml governance.yml guix-policy.yml
hypatia-scan.yml instant-sync.yml labels.yml label-triage.yml
mirror.yml openssf-compliance.yml pages.yml push-email-notify.yml
quality.yml release.yml rhodibot.yml runtime-policy.yml
rust-ci.yml scorecard.yml secret-scanner.yml security-policy.yml
static-analysis-gate.yml wellknown-enforcement.yml workflow-linter.yml
Only lock-sync-gate.yml and standards-pipeline.yml comply.
⚠ Trap to avoid when fixing this. gh actions-lock prepends its own stamp above line 1
(# This workflow is managed by gh actions-lock.). Any fix that adds SPDX and then lets the lock
tool run will have the SPDX displaced off line 1 and this check will stay red. Add the header
after any lock regeneration, and assert head -1 afterwards.
Acceptance criteria
4. SonarCloud Code Analysis — Quality Gate failed on new code
From the check-run output on main:
Quality Gate failed
Failed conditions:
C Security Rating on New Code (required ≥ A)
Dashboard: https://sonarcloud.io/dashboard?id=hyperpolymath_cicd-squabbler&branch=main
⚠ Method note for whoever picks this up. A SonarCloud measure requested without
&pullRequest=N is the default branch, not a PR — the same metric has returned different
numbers unscoped vs scoped. This measurement is deliberately the default branch. Scope any
per-PR follow-up explicitly.
A "C on New Code" means at least one issue at severity ≥ major was introduced inside the new-code
period; it does not by itself say the repo is insecure overall. Enumerate the actual issues before
deciding — they may all be one class, and some may be false positives worth marking as such in
SonarCloud rather than changing code.
Acceptance criteria
Not in scope here
These were red before this triage and are already green again, fixed by #101:
governance / Actions lockfile verify, governance / Code quality + docs,
governance / Guix packaging policy.
🤖 Generated with Claude Code
https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
Measured on
main@d309505bon 2026-09-22. Filed under the standing stopping rule:a scanner finding does not block a merge — it becomes an issue with acceptance criteria.
One issue, four items, acceptance criteria per item. Fixes go in separate PRs.
1.
actions.lock is in sync with the workflow YAML— ✅ cure already open as #104Status: resolved pending merge of #104. Recorded here for completeness because it was red
when this triage was taken.
The gate went red on
mainwithin five minutes of #101 merging. Concurrent commitb506eeda(12:29:23Z) added
.github/workflows/standards-pipeline.yml, which pinshyperpolymath/standards/.github/workflows/ci-pipeline.yml@2eb9bb19…, and wrote that workflow'slock entry as
[]. #101 merged at 12:34:39Z, so the gate it shipped caught the very nextdesync — which is the behaviour it was built for.
Because
standards-pipeline.ymltriggers onpull_request+workflow_dispatchonly, nothinghad been startup-killed yet. The next PR would have been the first.
#104 adds the dependency record with its 4 nested refs, closes 3 dangling edges
(
haskell-actions/setup@6037f336,hyperpolymath/standards@571cc734,oven-sh/setup-bun@0c5077e5),prunes 1 orphan, and ships the case-folding gate script.
Acceptance criteria
actions.lock is in sync with the workflow YAMLis green onmaingh actions-lock --verify-localexits 0 on a fresh clone ofmain2.
governance / Allowlist Preflight— one action not covered by the estate allowlistJob log, verbatim:
step-security/harden-runnerwas introduced by concurrent commitdca455e. The allowlist it ischecked against is not in this repo — it lives in
hyperpolymath/standardsatrhodium-standard-repositories/actions-allowlist/allowed-actions.json.So this is one of two decisions, and it is an estate decision, not a repo one:
step-security/harden-runneris wanted estate-wide → addstep-security/harden-runner@*to the standards allowlist. Every other estate repo then inherits the permission.
uses:from this repo's workflow.Acceptance criteria
allowed-actions.jsononstandardsmaingovernance / Allowlist Preflightis green onmain3.
lint-workflows / Check SPDX Headers— 27 of 29 workflows have no SPDX header on line 1Re-measured against the default branch via the contents API, not a working copy. The CI log
enumerates fewer files than this because its output is truncated; the true count is 27.
The 27:
Only
lock-sync-gate.ymlandstandards-pipeline.ymlcomply.⚠ Trap to avoid when fixing this.
gh actions-lockprepends its own stamp above line 1(
# This workflow is managed by gh actions-lock.). Any fix that adds SPDX and then lets the locktool run will have the SPDX displaced off line 1 and this check will stay red. Add the header
after any lock regeneration, and assert
head -1afterwards.Acceptance criteria
# SPDX-License-Identifier: MPL-2.0as line 1 — byte 1, not line 2lint-workflows / Check SPDX Headersis green onmaingh actions-lockdoes not displace any of them (asserthead -1after the tool)4.
SonarCloud Code Analysis— Quality Gate failed on new codeFrom the check-run output on
main:Dashboard: https://sonarcloud.io/dashboard?id=hyperpolymath_cicd-squabbler&branch=main
⚠ Method note for whoever picks this up. A SonarCloud measure requested without
&pullRequest=Nis the default branch, not a PR — the same metric has returned differentnumbers unscoped vs scoped. This measurement is deliberately the default branch. Scope any
per-PR follow-up explicitly.
A "C on New Code" means at least one issue at severity ≥ major was introduced inside the new-code
period; it does not by itself say the repo is insecure overall. Enumerate the actual issues before
deciding — they may all be one class, and some may be false positives worth marking as such in
SonarCloud rather than changing code.
Acceptance criteria
SonarCloud Code Analysisgreen onmainNot in scope here
These were red before this triage and are already green again, fixed by #101:
governance / Actions lockfile verify,governance / Code quality + docs,governance / Guix packaging policy.🤖 Generated with Claude Code
https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm