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
The group is keyed on the branch, so a new push to development cancels the in-flight verification of the previous one. That is the right design — once commit N+1 exists, verifying N matters less.
The failure is one of cadence, not of the concurrency rule:
Merges into development arrive every 8–12 minutes. An automated release cycle pushes chore(release): X.Y.Z-unstable.<ts> [skip ci], then a release/vX PR is merged. Observed on decidesk, scholiq, shillinq, hermiq simultaneously.
A Code Quality run takes 14–23 minutes (decidesk median 14, scholiq median 23; 30–42 jobs including a PHPUnit matrix and Playwright).
Because the run is slower than the interval, the newest commit's run is cancelled too. The branch never converges to a verdict — it only does so during a lull, which is exactly what the 55 successes are.
Why this matters more than it looks
A cancelled run is not a failure, but it is not a pass either. It is no verdict at all, and it renders identically to "nothing wrong here" in every summary that counts failures. Roughly two thirds of what lands on development is currently unverified.
It also undermines the gate-drift routine tracked in #523: even once FLEET_DISPATCH_TOKEN is provisioned, a Friday sweep dispatching Code Quality on development will be cancelled by the next release merge, because a workflow_dispatch run shares the same quality-refs/heads/development concurrency group. Provisioning the token is necessary but not sufficient.
Options (needs a decision — I have not changed anything here)
Throttle the release loop — batch the unstable releases (e.g. hourly) so CI has room to finish. Highest signal recovered per unit of change.
Accept it and verify at the promotion boundary instead — treat development as explicitly unverified and make dev→beta the real gate. Honest, but it moves the discovery of breakage much later.
My recommendation is 1 + 2: the loop is the root cause, and the concurrency-group split keeps the drift sweep meaningful regardless of merge traffic.
69% of the fleet's
developmentpush runs are cancelled — the release loop outruns CIMeasured 2026-08-20, last ≤15 completed
Code Qualitypush runs per app ondevelopment:Mechanism — measured, not inferred
quality.ymlcarries, correctly:The group is keyed on the branch, so a new push to
developmentcancels the in-flight verification of the previous one. That is the right design — once commit N+1 exists, verifying N matters less.The failure is one of cadence, not of the concurrency rule:
developmentarrive every 8–12 minutes. An automated release cycle pusheschore(release): X.Y.Z-unstable.<ts> [skip ci], then arelease/vXPR is merged. Observed on decidesk, scholiq, shillinq, hermiq simultaneously.Code Qualityrun takes 14–23 minutes (decidesk median 14, scholiq median 23; 30–42 jobs including a PHPUnit matrix and Playwright).Because the run is slower than the interval, the newest commit's run is cancelled too. The branch never converges to a verdict — it only does so during a lull, which is exactly what the 55 successes are.
Why this matters more than it looks
A cancelled run is not a failure, but it is not a pass either. It is no verdict at all, and it renders identically to "nothing wrong here" in every summary that counts failures. Roughly two thirds of what lands on
developmentis currently unverified.It also undermines the gate-drift routine tracked in #523: even once
FLEET_DISPATCH_TOKENis provisioned, a Friday sweep dispatchingCode Qualityondevelopmentwill be cancelled by the next release merge, because aworkflow_dispatchrun shares the samequality-refs/heads/developmentconcurrency group. Provisioning the token is necessary but not sufficient.Options (needs a decision — I have not changed anything here)
group: quality-${{ github.ref }}-${{ github.event_name }}, so a dispatched drift sweep is not cancelled by a routine merge. Fixes Fleet gate-drift detection has never run: FLEET_DISPATCH_TOKEN is not provisioned #523's interaction but not the everyday gap.developmentas explicitly unverified and make dev→beta the real gate. Honest, but it moves the discovery of breakage much later.My recommendation is 1 + 2: the loop is the root cause, and the concurrency-group split keeps the drift sweep meaningful regardless of merge traffic.