Skip to content

fix(t27b): ready uses master's last verdict past a running tip, or waits (Closes #6334) - #6342

Merged
gHashTag merged 1 commit into
masterfrom
claude/t27b-ready-master-fallback
Oct 5, 2026
Merged

gHashTag merged 1 commit into
masterfrom
claude/t27b-ready-master-fallback

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Closes #6334
Refs #6063

What happened

At 02:02Z tri t27b watch merged #6333 with coverage=FAILURE (master PENDING). Master's tip run of coverage was only queued, so the comparison proved nothing (it happened to be safe: coverage failed on the 3 master commits below).

Root cause: pr_ready in specs/tri/t27b/steward.t27 acted on a non-required BLOCK (other == 2) but not on a non-required WAIT, so the Q29 wait (check_effect(2, 1, false) == 1) fell through to READY. Confirmed before the fix: pr_ready(True, "MERGEABLE", True, [None], ["WAIT"]) == "READY".

Where the decisions live (steward.t27)

  • pr_ready: if (other == 1) { return 1; } after the required WAIT.
  • new master_state(running, last) -> u8: what master state a PR check is judged against when master's newest run of it has no conclusion. Red below a running tip stays red (master was already broken: READY, as fix(t27b): reference cache writes whole rows, keys on t27c content #6333 should have been, but now with the evidence); green below is PENDING (Q29, WAIT not BLOCKED); no completed run in the window is PENDING (WAIT, never MERGE).
  • 7 new tests, 111 in all. gen/c/tri/t27b/steward.c regenerated with t27c gen-c (/tmp/t27shared/release/t27c, which reproduces the previously committed C byte for byte from the old spec); tri t27b gen-check on the Railway t27c lab: SAME fbaea4652dba (the lab notes its binary mtime precedes its source checkout d566906, a tooling-only merge).

Plumbing (t27b.py)

  • fold_master(outputs, shas) over the last 12 master commits keeps {last, sha, running} per check: the scan goes past a running tip to the newest completed verdict and its commit. Cancelled/skipped/neutral are still passed over; a check with none of either stays ABSENT.
  • ready asks r.master_state(...) then r.check_effect(...); it reports e.g. coverage=FAILURE (master FAILURE@f329e27c1, newer run going) or coverage=FAILURE (master PENDING, no completed run in window).
  • Fixtures accept the old {name: state} and the new {name: {last, sha, running}}.

Tests (fixture-driven, no network)

  • scripts/ci/test_a_t27b_tick_reads_before_it_acts.py: fold past a queued tip finds FAILURE@f329e27c1; no verdict in window; ready for the fix(t27b): reference cache writes whole rows, keys on t27c content #6333 case (WAIT), red below running tip (READY + commit), green below (WAIT), plain PENDING (WAIT), settled red (READY), required check in new shape; watch with no completed master run -> WAIT, not MERGE. PASS: 0 failure(s).
  • scripts/ci/test_the_t27b_steward_decides_in_t27.py: 111 tests in the generated C, master_state table, pr_ready WAIT; with TRI_T27C set, gen-c byte-identical. PASS.
  • Negative control: dropping the new pr_ready line from the gen C turns 4 checks red (3 ready, 1 watch -> MERGE), reproducing fix(t27b): reference cache writes whole rows, keys on t27c content #6333.
  • Other t27b CI tests (spec-cannot-move, gen-check, lab-heals-clone) pass.

Live read-only: tri t27b ready now prints e.g. #6252 BLOCKED Check L1 TRACEABILITY=FAILURE (master SUCCESS@6cf985a44).

AGENTS.md debt line: t27b.py 1481 -> 1568.

🤖 Generated with Claude Code

…its (Closes #6334)

#6333 merged at 02:02Z with coverage=FAILURE (master PENDING): pr_ready
acted on a non-required BLOCK but not on a non-required WAIT, so the Q29
wait fell through to READY. steward.t27 now waits on it, and a new
master_state(running, last) decides what a check is judged against when
master's newest run is still going: red below stays red, green below or no
completed run in the window is PENDING (WAIT, never MERGE). fold_master
keeps the verdict, its commit and the running flag; ready reports e.g.
coverage=FAILURE (master FAILURE@f329e27c1, newer run going).
111 spec tests; gen-c regenerated, lab gen-check SAME.

Refs #6063

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-05 02:11:29 UTC

Summary

Status Count
Total Open PRs 45
PRs with Failing Checks 33
PRs with All Checks Green 12
READY 11
FAILING 33
PENDING 0
NO CHECKS YET 0

These columns do not partition: 11 + 33 + 0 + 0 = 44, and there are 45 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=8597b6ded596 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 0e37e87 into master Oct 5, 2026
25 of 27 checks passed
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.

t27b ready: a red non-required check against a still-running master tip must use master's last completed verdict or WAIT

1 participant