Skip to content

fix(ci): debounce the release PR before CI, not after - #293

Merged
wenzowski merged 2 commits into
mainfrom
claude/release-branch-ci-debounce-xaac5u
Aug 11, 2026
Merged

wenzowski merged 2 commits into
mainfrom
claude/release-branch-ci-debounce-xaac5u

Conversation

@wenzowski

Copy link
Copy Markdown
Contributor

CLOUD-346.

The defect

release-plz refreshes the release-plz-* branch on every push to main. That PR was opened ready (release-plz.toml set no pr_draft), and ci.yml / commit-lint.yml trigger on pull_request: synchronize with no branch filter and only a draft == false job guard — so every refresh bought a full matrix over a version bump and a changelog entry.

The debounce was the last gate in auto-release-land.yml, behind the green check, so it decided the hold after those minutes were already spent. It throttled the tag and nothing about CI.

Measured, ci.yml runs 2026-08-11T16:49Z–17:25Z: 30 runs, 5 of them on release-plz-2026-08-11T15-08-10Z — one per push to main. Run 31516819543: ci 242s, darwin-link 60s, cross 37s, msrv 34s, final 4s ≈ 6.3 job-minutes, ~10 billed once each job rounds up, plus the paired commit-lint. Four of the five ended in a hold and were discarded by the next refresh.

The change

The PR is now a draft until the debounce says due, so a hold costs nothing and the one matrix that is spent is spent on the SHA that lands.

  • release-plz.toml — pr_draft = true. Verified against the pinned release-plz 0.3.160: the key parses (a bogus sibling key errors at parse; this one does not).
  • .github/workflows/auto-release-land.yml — the debounce runs first, and the job is one four-state machine: draft+hold → nothing; draft+due → gh pr ready (with the PAT, since a GITHUB_TOKEN ready_for_review fires no workflow); ready+hold → gh pr ready --undo, closing the tap main reopened; ready+due → judge the checks, then /fast-forward.
  • mise-tasks/checks-green (new) — the green predicate as one command. Draft-by-default makes a wholly-skipped check set the normal state, and the inline jq this replaces filtered skipped out before counting, so that set read as zero outstanding, i.e. green. That is CLOUD-327's false green with a second author; without this the change would land a SHA no CI run of ours judged.
  • mise-tasks/ci-wait — keeps the poll, ETag and interval; delegates the verdict. Its own exit codes and output are unchanged, and tests/ci-wait.bats is untouched as the regression net proving the predicate survived the move.
  • mise-tasks/ci-local-parity — a fifth property: pr_draft = true must be declared. The mechanism ships with its gate, on both surfaces it is already wired to (hk.pkl, verify).

mise-tasks/land's graded_runs is deliberately untouched: it asks for a count of graded runs, not a verdict, and rewriting the landing loop is not this change.

Verification

  • mise run test:bats — 734/734, including tests/checks-green.bats (9 new cases: all-skipped → 3, third-party successes over a skip set → 3, pending → 3, empty reading → 3, required failure → 1 and named, third-party failure → no veto, absent path-filtered check → 0, unset roster → 2) and three new ci-local-parity cases.
  • mise run ci-local-parity — green on the real tree; the new property bites on a fixture without the key, with it set to false, and on a missing file.
  • mise run lint:actions, mise run fmt — clean.
  • mise run verify — green before readying.

Acceptance is observable after landing rather than asserted here: the next push to main should refresh the release PR as a draft, and its ci.yml run should carry only skipped jobs (unbilled) instead of a graded matrix.


Generated by Claude Code

@wenzowski
wenzowski marked this pull request as ready for review August 11, 2026 17:53
@wenzowski
wenzowski force-pushed the claude/release-branch-ci-debounce-xaac5u branch from 3eba36a to a3589cc Compare August 11, 2026 17:53
@wenzowski
wenzowski marked this pull request as draft August 11, 2026 17:53
The release PR was opened ready, so release-plz's refresh on every push to
`main` was a `synchronize` on a non-draft PR and bought a full matrix over a
version bump and a changelog entry. `release-due` sat behind the green check in
auto-release-land, so it decided the hold after those minutes were already
spent: it throttled the tag and nothing about CI. Measured over one 37-minute
window, 5 of 30 `ci.yml` runs were on the release branch, four of them discarded
by the next refresh.

The PR now opens as a draft (`pr_draft`), which the existing
`draft == false` job guards already skip, and auto-release-land runs the
debounce first: draft + hold costs nothing, draft + due readies the PR so
exactly one matrix runs on the SHA that lands, ready + hold re-drafts to close
the tap again.

That makes a wholly skipped check set the normal state rather than a corner
case, and the inline jq the workflow used filtered `skipped` out before
counting — CLOUD-327's false green with a second author. `ci-wait`'s predicate
moves into `mise-tasks/checks-green`, which both callers now share, so there is
one definition of what green means. `ci-local-parity` gains the sensor on
`pr_draft` so the mechanism ships with its gate.

Refs: CLOUD-346
@wenzowski
wenzowski marked this pull request as ready for review August 11, 2026 18:00
@wenzowski
wenzowski force-pushed the claude/release-branch-ci-debounce-xaac5u branch from a3589cc to 5358549 Compare August 11, 2026 18:00
@wenzowski
wenzowski marked this pull request as draft August 11, 2026 18:05
actionlint's shellcheck leg (SC2129) reads three consecutive appends to
$GITHUB_OUTPUT as a style defect.

Refs: CLOUD-346
@wenzowski
wenzowski marked this pull request as ready for review August 11, 2026 18:08
@wenzowski
wenzowski force-pushed the claude/release-branch-ci-debounce-xaac5u branch from 5358549 to bf8c42e Compare August 11, 2026 18:08
@sonarqubecloud

Copy link
Copy Markdown

@wenzowski

Copy link
Copy Markdown
Contributor Author

/fast-forward

@wenzowski
wenzowski merged commit bf8c42e into main Aug 11, 2026
8 checks passed
@wenzowski
wenzowski deleted the claude/release-branch-ci-debounce-xaac5u branch August 11, 2026 18:13
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 11, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
#293's set was `final failure` plus five `cancelled`; `final` is a
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
A cancelled run judged nothing. It is the absence of an answer, exactly
like the draft-era `skipped` CLOUD-327 taught this repo not to read as a
conclusion — but `checks-green`'s catch-all bucketed it with `failure`,
and the two rules composed into a trap with no exit.

Measured on #293: `land` readied then force-pushed, both events reached
the same `concurrency: ci-<ref>` group two seconds apart, and the run on
the SHA that would land was the one cancelled. `ci-wait` reported red,
`land` re-drafted and stopped — correctly, given "red". Re-running it
could not recover: HEAD was unchanged so the push moved nothing, the
verify receipt still held, and `graded_runs` counted `cancelled` as
graded, so the ready that would have replaced those runs was skipped.
Two consecutive invocations died on the identical stale set, neither
able to create a single new check-run. The only escape was a hand-minted
SHA, which is a manual step outside the loop `land` exists to drive.

Both halves move together or the trap survives the first fix:

* `checks-green` — `cancelled` joins `skipped` in the no-verdict set
  (exit 3). The bucket now carries the conclusion beside the name, so a
  stall that has two spellings can still be diagnosed:
  `required check(s) with no verdict: ci cancelled, cross skipped`.
* `land` — `graded_runs` drops `cancelled`, so a cancelled set reads as
  "no graded run" and the next lap re-fires the ready. It gains
  `neutral`, which `checks-green` has always graded: the same drift
  with the sign reversed, buying a second run for a head that already
  carried its verdict.

The precedence between the two buckets is now load-bearing and says so.
fan-in, so its failure was a consequence of the cancellations rather
than a judgement on the tree. Testing "no answer" before "red" is what
keeps that set recoverable, and a real failure leaves the bucket empty
and still exits 1.

This does not re-order ready/push. Making a cancellation recoverable is
the smaller, more general fix: it holds for a manual cancel and a runner
reclaim too.

Refs: CLOUD-363
wenzowski pushed a commit that referenced this pull request Aug 12, 2026
Measured on PR #280: `land` pushed and readied, the head carried exactly two
graded runs — `commit-lint` and a third-party analyzer — and `ci-wait` printed
"every required check terminal and green". Two minutes later the same head
carried `ci`, `cross` and `darwin-link` all in_progress, plus `final`, which had
not registered at all. The fast-forward bot was then rejected: `Required status
check "final" is expected`.

Branch protection held the line, and that is also the tell — this repo's gate and
GitHub's required set disagreed about whether the head had an answer, and GitHub
was right.

Reproducible in one line against the committed roster:

    CHECKS_GREEN_RUNS=$'completed\tsuccess\tcommit-lint' ./mise-tasks/checks-green   =>  EXIT 0

`pending == 0` is trivially satisfied when the jobs do not exist, so a poll
landing between the push and GitHub creating the check-runs saw a small, fully
graded set and called it green.

ABSENCE IS LEGITIMATE FOR EXACTLY TWO NAMES, and each earns it twice over:
`zizmor` and `action` are `paths:`-filtered AND their workflows declare no
`types:`, so they take the default [opened, synchronize, reopened] — which omits
`ready_for_review`, precisely the event `land`'s `--undo` re-fire emits. The
second reason was written down nowhere. `CI_ABSENT_OK_CHECKS` carries the list,
and unset or empty is the STRICT direction: everything must be present, because a
stall is recoverable and a false green is not.

THE ORDERING IS THE SUBTLE PART, and it is asserted rather than assumed. A real
failure OUTRANKS a missing name, which is the opposite of how the cancelled
bucket works — and the asymmetry has a reason. A cancelled sibling can
MANUFACTURE a fan-in failure (CLOUD-363's #293 set), so no-verdict must precede
red there. An absent name manufactures nothing; it is a run that has not started,
so a failure beside it is an independent verdict and must still re-draft the PR.

Not mirrored into `land`'s `graded_runs`: that asks "does any name carry an
answer" to decide whether to fire the ready, and requiring presence there would
read a healthy partial set as 0 and buy a second run.

`tests/checks-green.bats`'s "an absent path-filtered check is not a skipped one"
is REWRITTEN — it asserted this false green with a single-name reading.

Two things worth knowing for the next reader of this suite:

  * IN `ci-wait.bats` THE BREAKAGE IS A HANG, NOT A FAILED ASSERTION. The poll is
    unbounded by design, so a `resp.last` missing a mandatory name never
    terminates and the rows using a bare `run "$WAIT"` stall the whole suite
    rather than reporting. That is why the fixture helper emits the full
    mandatory set rather than the one name each row cares about.
  * A LATENT ORDERING WART decided the helper's shape: a 3-field TSV row always
    outranks a 5-field row of the same name, because the empty `started_at` makes
    the sort key start with `|` (0x7C), which sorts above any ISO-8601 digit. It
    is fail-closed in effect today, so it is recorded rather than changed here.

`ci-wait`'s check-runs request also gains `?per_page=100`, matching every other
reader. After this, `land`'s `graded_runs` is the only one left on the default 30.

Verified: 33 rows green across both suites; shfmt, shellcheck and taplo clean.

Refs: CLOUD-337

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzqP3AFxFqCm3F4DfCdS92
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants