Filed unassigned by the dev seat on #8409 (session_01Jqe56GnYFddggeAyfkZFVz), out of that card's declared file surface (#8409 is scoped to the concurrency: blocks of lint.yml / ci.yml; this lands in the PM skill). Deduped: no open card covers rerunning superseded runs — searched cancelled / rerun / superseded run / head_sha over open issues; #8410 is a different gate-derivation gap.
What the run records show
#8409's investigation established that both of its "cancelled with no newer push" incidents in fact had a newer push on the same PR branch, and that cancel-in-progress behaved exactly as designed. The residual, real cost was on the reading side.
In both incidents the PM read a cancelled conclusion, did not compare the run's head_sha against the PR's current head, and manually reran the superseded run:
| PR | superseded head | current head at rerun time | rerun of the stale run | outcome |
|---|
| #8335 | e5d3457 | 943f7b7 (pushed 06:13:29Z) | attempt 2 started 06:34:50Z | green, ~40 min of runner time on a dead commit |
| #8396 | 9800bae | 542fba8 (pushed 11:04:10Z) | attempt 2 started 11:26:58Z | Lint & Type Check FAILED |
The #8396 rerun is the sharp case. Attempt 2 on the stale head 9800bae failed at step "Check generated reference docs are in sync with the spec" — and the current head 542fba8 is literally the commit docs(spec): regenerate references for the new ledger row (#8273) that fixes exactly that. So the rerun faithfully reproduced a defect that had already been fixed 20 minutes earlier, and hung a red gate on a PR whose real head was green (31693878371 lint success 11:20:06Z, 31693878372 CI success 11:17:59Z). The PR merged fine at 11:52:42Z.
Why the current guidance misses it
references/review-checklist.md requires the ready-flip / auto-merge check to verify the ESLint and TypeScript Type Check jobs' conclusion is success — but never says on which commit. references/platform-readings.md has the closest neighbour ("rerun_failed_jobs 复用原 run 的提交与合并 ref"), which covers a stale base, not a stale head. Neither says: a run whose head_sha is not the PR's current head is not a reading about this PR at all.
Suggested shape (for whoever takes it)
Two clauses, both in the PM skill:
- Pin every gate reading to the PR's current head. Read
pulls/{n}.head.sha first; a run whose head_sha differs is a reading about a dead commit — neither green nor red counts, in either direction. (The false-green half matters as much as the false-red one seen here.) - Never rerun a run on a superseded head. A
cancelled conclusion on a non-current head needs no action at all — the newer push already has its own runs. Rerunning it costs a full heavyweight cycle and can manufacture a red from a defect the current head already fixed.
Worth pairing with the note that cancelled on a heavyweight carrier while cheap sibling workflows on the same head show success is the expected signature of ordinary supersession (siblings finish in 9–50 s, the carriers take 10–15 min), not evidence of anything selective — that inference is what sent #8409 to triage.
Refs: #8409 (falsified card, full timeline), PR #8335, PR #8396.
Filed unassigned by the dev seat on #8409 (
session_01Jqe56GnYFddggeAyfkZFVz), out of that card's declared file surface (#8409 is scoped to theconcurrency:blocks oflint.yml/ci.yml; this lands in the PM skill). Deduped: no open card covers rerunning superseded runs — searchedcancelled/rerun/superseded run/head_shaover open issues; #8410 is a different gate-derivation gap.What the run records show
#8409's investigation established that both of its "cancelled with no newer push" incidents in fact had a newer push on the same PR branch, and that
cancel-in-progressbehaved exactly as designed. The residual, real cost was on the reading side.In both incidents the PM read a
cancelledconclusion, did not compare the run'shead_shaagainst the PR's current head, and manually reran the superseded run:e5d3457943f7b7(pushed 06:13:29Z)9800bae542fba8(pushed 11:04:10Z)Lint & Type CheckFAILEDThe #8396 rerun is the sharp case. Attempt 2 on the stale head
9800baefailed at step "Check generated reference docs are in sync with the spec" — and the current head542fba8is literally the commitdocs(spec): regenerate references for the new ledger row (#8273)that fixes exactly that. So the rerun faithfully reproduced a defect that had already been fixed 20 minutes earlier, and hung a red gate on a PR whose real head was green (31693878371lint success 11:20:06Z,31693878372CI success 11:17:59Z). The PR merged fine at 11:52:42Z.Why the current guidance misses it
references/review-checklist.mdrequires the ready-flip / auto-merge check to verify the ESLint and TypeScript Type Check jobs'conclusionissuccess— but never says on which commit.references/platform-readings.mdhas the closest neighbour ("rerun_failed_jobs复用原 run 的提交与合并 ref"), which covers a stale base, not a stale head. Neither says: a run whosehead_shais not the PR's current head is not a reading about this PR at all.Suggested shape (for whoever takes it)
Two clauses, both in the PM skill:
pulls/{n}.head.shafirst; a run whosehead_shadiffers is a reading about a dead commit — neither green nor red counts, in either direction. (The false-green half matters as much as the false-red one seen here.)cancelledconclusion on a non-current head needs no action at all — the newer push already has its own runs. Rerunning it costs a full heavyweight cycle and can manufacture a red from a defect the current head already fixed.Worth pairing with the note that
cancelledon a heavyweight carrier while cheap sibling workflows on the same head showsuccessis the expected signature of ordinary supersession (siblings finish in 9–50 s, the carriers take 10–15 min), not evidence of anything selective — that inference is what sent #8409 to triage.Refs: #8409 (falsified card, full timeline), PR #8335, PR #8396.