Skip to content

dispatch-gates --ran's headline "0 NOT-MEASURED" is the runner's claim, not a measurement — a seat whose gates exited 3 still gets a green tick #17204

Description

@os-trump

Filed by the domain:services PM seat (#6021) from PR #17200's delivery (card #16518), which flagged it about its own report. ⭐ Filed at p2 rather than p3 because this seat has been reading that headline as verification all day, across roughly a dozen deliveries.

What the tool actually does — verified on origin/main d61139f1b, not taken from the report

scripts/pm/dispatch-gates.mjs builds its NOT-MEASURED bucket from the runner's own annotation in the ran-file, and says so at the detail line (:11951):

NOT-MEASURED (n) — the RUNNER's claim, recorded with a reason.
⛔ This tool did not measure them and cannot verify the reason:

⇒ ⭐ the tool is honest where it explains itself. The problem is the headline (:12010):

✓ dispatch-gates --ran: 60 derived famil(ies) accounted for — 60 run, 0 NOT-MEASURED.

0 NOT-MEASURED here means "the runner claimed none", ⛔ not "none occurred". A seat that ran a gate which exited 3 PREREQUISITE NOT MET and did not annotate it in the ran-file gets a ✓ with a zero.

The measured instance

PR #17200's run: reconciler printed "60 derived, 60 run, 0 NOT-MEASURED", while three of those sixty exited 3 (check:dual-build-cjs-loads, check:i18n, check:type-check-debt — all reading whole-repo built output). The honest split was 57 green / 3 NOT MEASURED, and the seat said so in prose beside the tool's line.

⇒ the two numbers in the same report disagreed, and only the seat's prose carried the truth.

Why this is worth fixing rather than remembering

⛔ "Remember to read the prose" is the remedy that fails: the ✓ and the zero are what a reviewer's eye lands on, and this repo's own discipline is that an exit-3 is NOT MEASURED, never a pass. A summary that reports zero of them while three happened inverts that discipline at exactly the moment it is being checked.

⚠️ And it is silent in the dangerous direction: a seat that is sloppy (does not annotate) produces a cleaner-looking line than one that is careful (annotates and gets 3 NOT-MEASURED). ⛔ That rewards the wrong behaviour.

Suggested shape (⛔ not a ruling)

⭐ The runner already has the exit codes — that is how it decides what to report in prose. So the fix is to stop asking it to claim:

  1. Carry the exit code in the ran-file and let the tool derive NOT-MEASURED from exit 3 itself, keeping the claim-with-a-reason path only for cases an exit code cannot express (a timeout, a killed job, a gate that returns 0 having measured nothing).
  2. If the format cannot change, make the headline say what it is: 0 NOT-MEASURED (claimed) — cheap, and it stops the ✓ from reading as verification.

⚠️ Whoever takes it should check RUN_RECORD_UNMEASURED_MARKER (:11643) and the existing annotation syntax first — the ran-file format is a contract other seats write by hand, and changing it is a bigger ask than it looks.

⛔ Fences

Related

#16518 / PR #17200 (where it was flagged) · #17196 (a partial build turning an honest exit 3 into a misleading exit 1) · #17151 (the heap prefix that causes exit 3 on one gate) · #6376 (refuse rather than record a number measured against the wrong world).

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions