diff --git a/.trinity/seals/t27b_T27bLedgerSteward.json b/.trinity/seals/t27b_T27bLedgerSteward.json index caeba23233..e94819d124 100644 --- a/.trinity/seals/t27b_T27bLedgerSteward.json +++ b/.trinity/seals/t27b_T27bLedgerSteward.json @@ -1,5 +1,5 @@ { - "built_by": "t27c-bootstrap@0.5.2+063da049b", + "built_by": "t27c-bootstrap@0.5.2+9448ab4be", "closure": [ { "spec": "specs/tri/t27b/steward.t27", @@ -7,27 +7,27 @@ } ], "config": "gen=c,rust,verilog,zig;tests=zig", - "gen_hash_c": "sha256:7f6f95d85401dbb6dbaa7786ebc835a79450218b97ee0e9fa35a066805841e04", - "gen_hash_rust": "sha256:b002afd8a8e09a735fc529b7fde408eec6234131409a67812facd05a45670a31", - "gen_hash_verilog": "sha256:6c380f5e56877102b97dd5e81447238ef664b32598cafba68c3ee45fcafcb798", - "gen_hash_zig": "sha256:07cdd78d6c7a7380a47e7ebbb1047ad8645cf6670349f77af069ad317ef73621", + "gen_hash_c": "sha256:becd7f62aa56e34cf683608403563d674874423cddf741e2b9932749d71bf33c", + "gen_hash_rust": "sha256:d079237a1a807dceb37d6cf0154eac7551345bf65ead4f441b3deba0b4999b6e", + "gen_hash_verilog": "sha256:217a0e713f35c255769e0834f9f09fa31dd92bef12fc847a344cabcd8c8bc10b", + "gen_hash_zig": "sha256:5654e6fc2055335e4e44042f819337dd922f8b4dccd1150df693acdbe6f4aae8", "module": "T27bLedgerSteward", "ring": 12, "seal_schema": 2, - "sealed_at": "2026-10-18T03:55:24Z", + "sealed_at": "2026-10-19T11:37:03Z", "sealed_by": "t27c-bootstrap@0.5.2", - "spec_hash": "sha256:731eca094910d21ec239964b4df2f4e9890babd1d53395d000440df283b3c8b3", + "spec_hash": "sha256:901c576c4cb4fa673d47180b8f3dee27c6a09f9f9d4d6356d0d95a13178e30c5", "spec_path": "specs/tri/t27b/ledger_steward.t27", "tests": { "failed": 0, "failing": [], "forced": false, - "passed": 11, - "total": 11, + "passed": 12, + "total": 12, "vacuous": 0 }, "toolchain": { - "test_runner": "sha256:1982ae948e24d00c5d221ccec12dfce1eb01204b53e37b0f857f93b16d64629d", + "test_runner": "sha256:8512b80da533b79289110fca4a65f3336abd7a059ca4b72ea595d5e33ff8ad10", "zig": "0.16.0" } } \ No newline at end of file diff --git a/specs/tri/t27b/ledger_steward.t27 b/specs/tri/t27b/ledger_steward.t27 index 26733c277c..7e2397363c 100644 --- a/specs/tri/t27b/ledger_steward.t27 +++ b/specs/tri/t27b/ledger_steward.t27 @@ -29,6 +29,15 @@ ; two or three rows (rust_convert, trios-mesh-node crypto, emit_kit) while about 250 safe rows waited ; and sessions wrote them into the ledger by hand 17 times in a day. A run with nothing to apply but a ; refused finding is still refused, and a stale flood or a cap rise still refuses the whole run. +; A run states the specs of ITS commit, and nothing newer (#11017). The lab takes about 25 minutes per +; run and the PR it earns is cut from master's tip when the job opens it, so a spec that lands in +; between has no finding in the run, and the PR's ratchet names it UNLISTED although the steward +; judged its commit rightly: run 2520ee1a5 (tree of 2323 specs, zig 0.16.0 as on CI) gave #10752 five +; findings and none for specs/fpga/analog_cell_ax7203.t27, which master took in b94c869d2 (#10578), +; 37 minutes after 2520ee1a5 and 1 minute before the PR branch was cut. That row is the NEXT run's. +; The steward does not chase the tip: skipping a run because master moved would starve it, since +; master moves faster than a run. Closing that gap is a gate on spec PRs (a row with the spec), not a +; rule here. ; Codes are steward.t27's; the invariant at the end checks the numbering against its entry_code. ; ASCII only (L3). ; phi^2 + 1/phi^2 = 3 | TRINITY @@ -285,6 +294,26 @@ test batch_8646_nine_rows_one_codegen { assert effect_wanted(RV_APPLY, EF_REFUSAL_ISSUE) == false; } +test run_2520ee1a5_applies_four_rows_and_refuses_one_timeout { + // #10752, lab verdict APPLY {"refused":1,"applied":4,"new_not_pass":2}: UNEXPECTED FAILURE 1 + // (suggest_feed, ledger pass, now timeout), UNLISTED 4 (two pass, deps_card and why_card blocked). + // No finding names analog_cell_ax7203: master took it after this run's commit (#11017). + var refused : u32 = tally_refused(0, RC_UNEXPECTED_FAILURE, T_TIMEOUT, 1); + refused = tally_refused(refused, RC_UNLISTED, T_PASS, 2); + refused = tally_refused(refused, RC_UNLISTED, T_BLOCKED, 2); + var applied : u32 = tally_applied(0, RC_UNEXPECTED_FAILURE, T_TIMEOUT, 1); + applied = tally_applied(applied, RC_UNLISTED, T_PASS, 2); + applied = tally_applied(applied, RC_UNLISTED, T_BLOCKED, 2); + var fresh : u32 = tally_new_not_pass(0, RC_UNLISTED, T_PASS, 2); + fresh = tally_new_not_pass(fresh, RC_UNLISTED, T_BLOCKED, 2); + assert refused == 1; + assert applied == 4; + assert fresh == 2; + assert refusal_reason(RC_UNEXPECTED_FAILURE, T_TIMEOUT) == RR_REGRESSION; + assert run_verdict(run_stewardable(true, true, true), refused, applied, 0, true) == RV_APPLY; + assert effect_wanted(RV_APPLY, EF_REFUSAL_ISSUE) == false; +} + test batch_8548_is_refused_for_its_two_failures { // #8548, run c9d36f314: UNLISTED 8 (6 pass, claude_md and trinity_tokenizer blocked), UNEXPECTED // PASS 44 (pass_vacuous -> pass), STALE 4, UNEXPECTED FAILURE 2 (ternary_gates and