ci(gate): require CI gate again — it is the only thing gating the path-gated legs - #70
Merged
Merged
Conversation
…ath-gated legs
Restored to branch protection 2026-07-30 (13 contexts, verified against the API before
and after). This syncs the repo's checked-in claim and every prose statement that moves
with the count.
WHY IT BELONGS IN THE REQUIRED SET. `CI gate` is a ROLL-UP, not a test: `if: always()`
over six legs that are path-gated or nightly -- sqlserver-store, postgres-store,
load-test, load-test-sqlserver, windows-service-smoke, changes -- failing if any of them
failed or was cancelled.
Requiring the roll-up is the ONLY way to gate those six. They cannot be required
directly: a path-gated job does not report on a PR that touches none of its paths, which
is the required-but-absent trap and would wedge every such PR forever. The roll-up
always reports, so it is safe to require -- verified on a real run where all six legs
SKIPPED and `CI gate` still returned success.
It matters because those six cover exactly what the three `test` legs SKIP: the store
suites skip unless a leg supplies the database. While it was off the required set, a PR
touching the SQL Server or Postgres store, the load path, or the Windows service could
merge with those legs red and nothing on the merge path would notice.
WHY THE OBVIOUS OBJECTION DOES NOT HOLD. Checked its record before recommending it: 18
success / 2 failure over 20 runs, and NEITHER failure would have blocked a PR.
* run 30518291879 was a `schedule` (nightly) run whose sqlserver load-test legs failed.
Not a PR context, so it gates nothing.
* run 30510353692 was a superseded re-push where every job was CANCELLED. `CI gate`
fails on `cancelled` by design, but branch protection gates on the LATEST head SHA,
so a cancelled old run does not block the current head -- ci.yml's concurrency note
already records that auto-merge tolerates cancelled contexts on superseded SHAs.
The file's stale note (written when it was removed, saying it is NOT in the list) is
replaced with the reasoning above, so the next reader learns why it is required rather
than just that it is.
Same four-file shape as the last sync, and the drift test named every one: the count pin
in test_required_contexts.py, the job-collapse pin in test_security_posture.py (13
contexts -> 11 distinct jobs; the three `test` legs share one matrix job), docs/CI.md's
bullet list, and the "12 status checks" prose in tests/test_push_guard.py and
scripts/hooks/push_guard.py.
Verified: the file parses to 13 and is IDENTICAL to what the API returns; 64 tests pass
across the drift, posture, push-guard, ledger, backlog and worktree-constraint suites.
SEPARATELY, and not fixed here: that nightly failure is real. `load test (smoke,
sqlserver)` failed on both 2022 and 2025 against 9b3606e. With `CI gate` required
again, a PR touching the load path will block on it until it is fixed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CI gatewas restored to branch protection on 2026-07-30 (13 contexts, verified against the API before and after). This syncs the repo's checked-in claim and every prose statement that moves with the count.Why it belongs in the required set
CI gateis a roll-up, not a test:if: always()over six legs that are path-gated or nightly —sqlserver-store,postgres-store,load-test,load-test-sqlserver,windows-service-smoke,changes— failing if any of them failed or was cancelled.Requiring the roll-up is the only way to gate those six. They can't be required directly: a path-gated job doesn't report on a PR that touches none of its paths, which is the required-but-absent trap and would wedge every such PR forever. The roll-up always reports, so it's safe to require — verified on a real run where all six legs skipped and
CI gatestill returned success.It matters because those six cover exactly what the three
testlegs skip: the store suites skip unless a leg supplies the database. While it was off the required set, a PR touching the SQL Server or Postgres store, the load path, or the Windows service could merge with those legs red and nothing on the merge path would notice.Why the obvious objection doesn't hold
Checked its record before recommending it — 18 success / 2 failure over 20 runs, and neither failure would have blocked a PR:
3051829187930510353692CI gatefails oncancelledby design, but protection gates on the latest head SHAci.yml's own concurrency note already records that auto-merge tolerates cancelled contexts on superseded SHAs.The file's stale note — written when it was removed, saying it is not in the list — is replaced with the reasoning above, so the next reader learns why it's required rather than just that it is.
Scope
Same four-file shape as the last sync, and the drift test named every one: the count pin in
test_required_contexts.py, the job-collapse pin intest_security_posture.py(13 contexts → 11 distinct jobs; the threetestlegs share one matrix job),docs/CI.md's bullet list, and the "12 status checks" prose intests/test_push_guard.pyandscripts/hooks/push_guard.py.Verified: the file parses to 13 and is identical to what the API returns; 64 tests pass across the drift, posture, push-guard, ledger, backlog and worktree-constraint suites.
Separately, and not fixed here
That nightly failure is real:
load test (smoke, sqlserver)failed on both 2022 and 2025 against9b3606ed. WithCI gaterequired again, a PR touching the load path will block on it until it's fixed.