You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
main has no required status checks in any repo. The swimblocks-default ruleset carries deletion, non_fast_forward, required_linear_history and pull_request — but nothing that makes CI a gate. .github/settings.yml's legacy branches: block says required_status_checks: null too, so the gap is deliberate-looking in both places.
Two reasons to close it:
On its own: a PR with failing tests is mergeable today. The check is advisory — someone has to notice the red X.
Only ci / test is confirmed, from deck-eval-gen PR #19. The rest need verifying against a real PR before being written into config.
The footgun
A required check that never reports blocks every merge, permanently. So this cannot be applied uniformly from settings.yml as things stand:
Contexts differ (ci / test vs test) because rems-sync and deck-eval-parser define jobs inline instead of calling the reusable workflow — despite AGENTS.md §5 stating that each repo's ci.yml calls reusable-python-ci.yml. That claim is currently false in two repos.
Three repos produce no PR check at all. swim-club-tech-survey's only workflow is the scheduled crawl; officials-admin has no CI yet (officials-admin#12).
Proposed approach
Standardising on the reusable workflow is the fix — it makes the context uniform, which is what makes a single org-wide rule possible. Order matters:
Converge rems-sync and deck-eval-parser onto reusable-python-ci.yml, with the calling job id ci so the context is ci / test everywhere. One PR each; makes AGENTS.md §5 true.
Verify the context string on a real PR in each repo before step 3.
apply_ruleset() POSTs the ruleset verbatim, so no apply-settings.py change is needed.
Decide the repos with no CI. They're private and unprotected today (Free plan), so nothing to do until they go public or gain CI. Worth an explicit note in settings.yml rather than silence.
strict_required_status_checks_policy: true requires branches be up to date before merging. Pairs with allow_update_branch: true, already set — but it does mean a busy main forces more rebases. Reasonable at this repo count; flagging it as a deliberate choice.
Also worth knowing
verify_ruleset() only checks that a ruleset name exists, not that its rules match settings.yml. So a hand-edited rule set won't be reported as drift. Out of scope here, but it limits how much the reconciler actually guarantees.
Scope
rems-sync calls reusable-python-ci.yml
deck-eval-parser calls reusable-python-ci.yml
Context string confirmed on a real PR in every repo with CI
required_status_checks rule added to .github/settings.yml
Reconciler run; verified on each public repo
CONTRIBUTING.md updated — it currently explains the SKIP for private repos but not that CI is a gate
mainhas no required status checks in any repo. Theswimblocks-defaultruleset carriesdeletion,non_fast_forward,required_linear_historyandpull_request— but nothing that makes CI a gate..github/settings.yml's legacybranches:block saysrequired_status_checks: nulltoo, so the gap is deliberate-looking in both places.Two reasons to close it:
Current state
deck-eval-genci.yml→ reusableci / test✅ observed.githubci.yml→ reusable (local path)ci / testinferredrems-syncci.yml, inline jobtesttestinferreddeck-eval-parsertests.yml, inline jobtesttestinferredswim-club-tech-surveyrun_survey.ymlonly (schedule + dispatch)officials-adminrems-sync-apps-scriptOnly
ci / testis confirmed, fromdeck-eval-genPR #19. The rest need verifying against a real PR before being written into config.The footgun
A required check that never reports blocks every merge, permanently. So this cannot be applied uniformly from
settings.ymlas things stand:ci / testvstest) becauserems-syncanddeck-eval-parserdefine jobs inline instead of calling the reusable workflow — despite AGENTS.md §5 stating that each repo'sci.ymlcallsreusable-python-ci.yml. That claim is currently false in two repos.swim-club-tech-survey's only workflow is the scheduled crawl;officials-adminhas no CI yet (officials-admin#12).Proposed approach
Standardising on the reusable workflow is the fix — it makes the context uniform, which is what makes a single org-wide rule possible. Order matters:
Converge
rems-syncanddeck-eval-parserontoreusable-python-ci.yml, with the calling job idciso the context isci / testeverywhere. One PR each; makes AGENTS.md §5 true.Verify the context string on a real PR in each repo before step 3.
Add the rule to
.github/settings.yml:apply_ruleset()POSTs the ruleset verbatim, so noapply-settings.pychange is needed.Decide the repos with no CI. They're private and unprotected today (Free plan), so nothing to do until they go public or gain CI. Worth an explicit note in
settings.ymlrather than silence.strict_required_status_checks_policy: truerequires branches be up to date before merging. Pairs withallow_update_branch: true, already set — but it does mean a busymainforces more rebases. Reasonable at this repo count; flagging it as a deliberate choice.Also worth knowing
verify_ruleset()only checks that a ruleset name exists, not that its rules matchsettings.yml. So a hand-edited rule set won't be reported as drift. Out of scope here, but it limits how much the reconciler actually guarantees.Scope
rems-synccallsreusable-python-ci.ymldeck-eval-parsercallsreusable-python-ci.ymlrequired_status_checksrule added to.github/settings.ymlCONTRIBUTING.mdupdated — it currently explains theSKIPfor private repos but not that CI is a gateBlocks: #16