Repository navigation
Commit 4b21c8d
fix(ci): anchor the unmeasured-gate-tail by position when the failing step has no final conclusion yet (#19166)
Fixes #18874
Clause-②: no
## The defect, in one line
`judge()` located the failure with `conclusion === 'failure'`, but this
reporter runs as a **later step in the same job**, so that field is the
least final one in the response it reads. Over the instrument's whole
lifetime — a census, not a sample — **24 of 42** failing `Lint & Repo
Gates` jobs disclosed `NOT MEASURED` for exactly this reason, and the
step is green either way, so nothing escalated.
⭐ The file had already solved the same race **for the COUNT** and
written the principle down twice (`Position decides; conclusion only
subtracts`). The residue was the ANCHOR.
## Which of the two in-lane shapes this takes, and why the other one is
rejected
The card prescribed no remedy and named three shapes. The dispatch
removed the third (taking the failing step from the runner's own context
lands in `.github/workflows/**`, not this lane's surface). Of the
remaining two:
**Taken — anchor on position/status rather than `conclusion`.**
**Rejected — re-read the API after a short wait.** It fails the file's
**own** stated criterion, the one written twice in it:
> Behind it, none of them are. Position decides; `conclusion` only
subtracts.
> A step the runner has not reached yet is not evidence of anything, and
is not read as one.
A wait keeps the anchor's authority on `conclusion` and merely hopes it
becomes final later — the *same* dependency the file already rejected
for the count, with a timer bolted on. Two further readings back that
up, neither of them this PR's own work:
* the read-gap has **no threshold to aim at**. Per the census in comment
5737448141, the smallest gap in the timing sub-sample (0.5221 s) belongs
to a job that did **not** measure, while the lit control's gap (0.6407
s) is *larger* than a `measured=no` one. Any wait length would be a
number this repo has measured to be unrelated to the outcome — i.e. a
guess, and the card's constraint 1 says a repair that makes the anchor
guess is worse than the honest refusal;
* it is **not expressible in `--self-test`**. The battery drives the
pure `judge()` over recorded shapes; a retry can only be tested by
faking a *sequence* of responses, which grades the retry harness while
`judge()` itself stays exactly as blind as it is today. That is the
constraint the card called this round's most important deliverable.
1 parent 5d0ee8f commit 4b21c8d
1 file changed
Lines changed: 283 additions & 24 deletions
0 commit comments