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
[CI][Control plane] ci-required cancel-in-progress on main discards the tip's evidence during a merge wave (six consecutive main runs cancelled 2026-09-04) #2582
with no branch condition, so on refs/heads/main every merge cancels the previous merge's push run. During a merge wave main therefore has no completed required run at all until the queue drains, and the readiness view's clause 4 ("main green") cannot be measured at the tip.
Evidence (2026-09-04)
Six consecutive push runs on main, all cancelled, none with a failing job:
The 0886b6c42 run had 13 of 17 jobs green when it was cancelled (E2E Smoke and Secret Scan skipped by design; only the two windows-latest legs unfinished). The last completed green run on main is 33886539482 at 61e94f672 (15:21Z). Each merged PR head carried its own green required run, so nothing merged unproven; what is missing is the post-merge proof of the combined tip.
Why it matters
Global law 1 and the readiness view measure "green at the exact head". A cancelled run is not red, but it is not evidence either, and the gap widens exactly when the lanes are most productive.
Runs on main then queue instead of cancelling, which costs hosted minutes only on Linux legs (SC-3: Windows legs are already slated for local runners). An alternative is a per-SHA group on main (${{ github.workflow }}-${{ github.ref }}-${{ github.sha }}), which runs them in parallel; queueing is the cheaper and more legible option.
Boundaries
.github/workflows/ci-required.yml is a declared control path (ci/policy.v1.json), so the PR is T2 under the ADR-0066 amendment (2026-09-03): fresh-context review plus the maintainer's review, parked under OUTSTANDING_TASKS.md SC-10. Green is not authority.
One-line change; the smart-ci-shadow.yml and smart-ci-self-test.yml concurrency blocks should be checked for the same shape in the same PR and changed only if they match.
Owner: beta lane (platform integrity). Seeded by the coordinator from the 2026-09-04 readiness re-measure.
What
ci-required.ymldeclareswith no branch condition, so on
refs/heads/mainevery merge cancels the previous merge's push run. During a merge wavemaintherefore has no completed required run at all until the queue drains, and the readiness view's clause 4 ("maingreen") cannot be measured at the tip.Evidence (2026-09-04)
Six consecutive push runs on
main, allcancelled, none with a failing job:33923946316df1559fd8(#2542)3392474154946fb41d53(#2567)339252329577155f1042(#2564)33925392077ea3e39e7d(#2566)339256103560886b6c42(#2569)33926429510330ccb4de(#2568)The
0886b6c42run had 13 of 17 jobs green when it was cancelled (E2E SmokeandSecret Scanskipped by design; only the twowindows-latestlegs unfinished). The last completed green run onmainis33886539482at61e94f672(15:21Z). Each merged PR head carried its own green required run, so nothing merged unproven; what is missing is the post-merge proof of the combined tip.Why it matters
Smart CI / Required Gate) and the CI-03 landed-commit verifier (CI-03: Smart CI / Required Gate, branch-current contract, landed-commit verifier and event topology #2327) both want a completed run per landed commit.Proposed fix
Keep cancellation for PR refs, never on the default branch:
Runs on
mainthen queue instead of cancelling, which costs hosted minutes only on Linux legs (SC-3: Windows legs are already slated for local runners). An alternative is a per-SHA group onmain(${{ github.workflow }}-${{ github.ref }}-${{ github.sha }}), which runs them in parallel; queueing is the cheaper and more legible option.Boundaries
.github/workflows/ci-required.ymlis a declared control path (ci/policy.v1.json), so the PR is T2 under the ADR-0066 amendment (2026-09-03): fresh-context review plus the maintainer's review, parked underOUTSTANDING_TASKS.mdSC-10. Green is not authority.smart-ci-shadow.ymlandsmart-ci-self-test.ymlconcurrency blocks should be checked for the same shape in the same PR and changed only if they match.