Summary
hyperpolymath/standards — the repository that defines the estate's CI policy — has no required status checks on main, and no rule requiring a pull request at all. Every gate this repo ships and enforces elsewhere is advisory here.
This is why six consecutive PRs merged over a red governance / Debt ratchet (#955) without anyone needing an admin bypass: nothing was ever blocking.
Measured
The authoritative endpoint for what actually applies to a branch is /repos/{owner}/{repo}/rules/branches/{branch} — not /rulesets, which lists rulesets that may target other refs.
$ gh api repos/hyperpolymath/standards/rules/branches/main --jq '[.[].type]|unique|join(", ")'
deletion, non_fast_forward
$ gh api repos/hyperpolymath/standards/branches/main/protection
404 "Branch not protected"
So on standards/main: no required_status_checks, no pull_request, no required_signatures, no classic protection. The only rules are "don't delete it" and "don't force-push it".
Comparison across the estate
| repo |
effective rules on main |
requires checks? |
hyperpolymath/standards |
deletion, non_fast_forward |
no |
hyperpolymath/rsr-template-repo |
code_coverage, code_quality, code_scanning, copilot_code_review, deletion, required_signatures |
no |
metadatastician/stapeln |
code_coverage, code_quality, code_scanning, copilot_code_review, deletion, merge_queue, pull_request, repository_delete, repository_transfer, repository_visibility, required_deployments, required_signatures, required_status_checks |
yes |
hyperpolymath/a2ml |
deletion, non_fast_forward |
no |
hyperpolymath/marid |
deletion, non_fast_forward |
no |
hyperpolymath/hypatia |
deletion, non_fast_forward |
no |
stapeln shows the pattern already exists and works:
CodeQL
SonarCloud Code Analysis
governance / Code quality + docs
scan / Hypatia Neurosymbolic Analysis
governance / Validate Hypatia Baseline
analyze (actions, none)
Five of the six sampled repos have no required_status_checks. standards is the least protected of the three policy repos.
Why this matters now — it changes the ci-pipeline rollout
The agreed rollout shape is "repos whose pipeline is green at adoption get the caller blocking; red repos are seeded into a shrink-only ledger."
Adding a caller workflow does not make it blocking. A workflow only blocks a merge when a required_status_checks rule names its check context. Without that rule, the "blocking" arm and the "ledgered" arm are behaviourally identical — both just produce a red X that anyone can merge past. The ratchet would be measuring debt no one is obliged to pay.
This is the vacuous-gate condition: a gate that cannot fail anything is decoration.
Proposed cure
Two parts, both owner decisions:
- Decide the policy. Should
standards/main require (a) a pull request, (b) a named set of status checks, (c) signatures? The stapeln ruleset is a working template. Note that requiring a PR on standards changes the owner's own direct-push workflow, which is a real cost — this is a judgement call, not an obvious yes.
- Decide what "blocking" means for the rollout. Either the rollout includes adding a
required_status_checks rule naming the pipeline context on adopting repos, or the plan should stop using the word "blocking" and describe both arms honestly as advisory-with-a-ledger.
⚠ Both parts are configuration changes to live repositories. Nothing here should be applied without an explicit ruling.
Acceptance criteria
Related: #955 (the Debt ratchet failure this explains), #787 (decision surface).
Summary
hyperpolymath/standards— the repository that defines the estate's CI policy — has no required status checks onmain, and no rule requiring a pull request at all. Every gate this repo ships and enforces elsewhere is advisory here.This is why six consecutive PRs merged over a red
governance / Debt ratchet(#955) without anyone needing an admin bypass: nothing was ever blocking.Measured
The authoritative endpoint for what actually applies to a branch is
/repos/{owner}/{repo}/rules/branches/{branch}— not/rulesets, which lists rulesets that may target other refs.So on
standards/main: norequired_status_checks, nopull_request, norequired_signatures, no classic protection. The only rules are "don't delete it" and "don't force-push it".Comparison across the estate
mainhyperpolymath/standardsdeletion, non_fast_forwardhyperpolymath/rsr-template-repocode_coverage, code_quality, code_scanning, copilot_code_review, deletion, required_signaturesmetadatastician/stapelncode_coverage, code_quality, code_scanning, copilot_code_review, deletion, merge_queue, pull_request, repository_delete, repository_transfer, repository_visibility, required_deployments, required_signatures, required_status_checkshyperpolymath/a2mldeletion, non_fast_forwardhyperpolymath/mariddeletion, non_fast_forwardhyperpolymath/hypatiadeletion, non_fast_forwardstapelnshows the pattern already exists and works:Five of the six sampled repos have no
required_status_checks.standardsis the least protected of the three policy repos.Why this matters now — it changes the ci-pipeline rollout
The agreed rollout shape is "repos whose pipeline is green at adoption get the caller blocking; red repos are seeded into a shrink-only ledger."
Adding a caller workflow does not make it blocking. A workflow only blocks a merge when a
required_status_checksrule names its check context. Without that rule, the "blocking" arm and the "ledgered" arm are behaviourally identical — both just produce a red X that anyone can merge past. The ratchet would be measuring debt no one is obliged to pay.This is the vacuous-gate condition: a gate that cannot fail anything is decoration.
Proposed cure
Two parts, both owner decisions:
standards/mainrequire (a) a pull request, (b) a named set of status checks, (c) signatures? Thestapelnruleset is a working template. Note that requiring a PR onstandardschanges the owner's own direct-push workflow, which is a real cost — this is a judgement call, not an obvious yes.required_status_checksrule naming the pipeline context on adopting repos, or the plan should stop using the word "blocking" and describe both arms honestly as advisory-with-a-ledger.⚠ Both parts are configuration changes to live repositories. Nothing here should be applied without an explicit ruling.
Acceptance criteria
standards/maingains arequired_status_checksrule, and which contexts it names.gh api repos/hyperpolymath/standards/rules/branches/main --jq '[.[].type]'includesrequired_status_checks, and a PR with a deliberately failing gate cannot be merged without an explicit bypass.rules/branches/mainacross all repos, reporting how many haverequired_status_checks. The six-repo sample above is not a census.Related: #955 (the Debt ratchet failure this explains), #787 (decision surface).