Skip to content

[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

Description

@Chris0Jeky

What

ci-required.yml declares

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

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:

Run Head Created Cancelled
33923946316 df1559fd8 (#2542) 22:04:39Z 22:15:48Z
33924741549 46fb41d53 (#2567) 22:15:36Z 22:22:48Z
33925232957 7155f1042 (#2564) 22:22:28Z 22:25:03Z
33925392077 ea3e39e7d (#2566) 22:24:43Z 22:28:07Z
33925610356 0886b6c42 (#2569) 22:27:48Z 22:39:38Z
33926429510 330ccb4de (#2568) 22:39:26Z in progress at 22:50Z

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.
  • The SC-4 observation window (20 PRs without a false red at 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.
  • A real regression introduced by merge N is invisible until the wave ends, and then it is attributed to merge N+k.

Proposed fix

Keep cancellation for PR refs, never on the default branch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ciCI/CD pipeline, workflow, and build infrastructure changes.hardeningReliability, safety, operability, and production-readiness improvements.

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions