From 57fb8c5f5aef34a4fba7a8a74ba5a43fd0d71938 Mon Sep 17 00:00:00 2001 From: Dmitrii Vasilev Date: Sun, 18 Oct 2026 09:43:55 +0700 Subject: [PATCH 1/2] fix(ci): master green again -- 8 stale corpus-ledger rows, census re-pin after pr-budget.yml (Closes #10171) Corpus ratchet: #10101 (seven igla/coder specs) and #10095 (nn/attention) now pass every phase; their rows are dropped and the cap follows 81 -> 73. Re-pinned: bench_proxy 738 -> 696, prm 521 -> 520, benchmark 315 -> 319 (bdd-block-fallback only: #10101 lengthened then-conditions in BDD blocks the parser already skips). Census: #10087 added pr-budget.yml. workflow files 66 -> 67, jobs 87 -> 88, run steps 313 -> 314, bash steps 292 -> 293, path-not-quiet 198 -> 200. Re-pinned with tri census pin --bless. Co-Authored-By: Claude Opus 5.5 --- docs/reports/suite_expectations.json | 121 ++------------------------- tools/census/quiet.txt | 4 +- tools/census/shell.txt | 8 +- 3 files changed, 15 insertions(+), 118 deletions(-) diff --git a/docs/reports/suite_expectations.json b/docs/reports/suite_expectations.json index acc0e9f87f..c13dec2cbf 100644 --- a/docs/reports/suite_expectations.json +++ b/docs/reports/suite_expectations.json @@ -2,7 +2,7 @@ "schema_version": 1, "generated_by": "t27c suite --bless-expectations", "max_gate_failures": 2, - "max_entries": 81, + "max_entries": 73, "entries": [ { "path": "specs/api/sdk_contract.t27", @@ -80,30 +80,15 @@ "brace-body/in-fallback": 26 } }, - { - "path": "specs/igla/coder/arch.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 331, - "discard_by_channel": { - "bdd-block-fallback": 299, - "brace-body/in-fallback": 31, - "stray-brace": 1 - } - }, { "path": "specs/igla/coder/bench_proxy.t27", "phase": "parse-no-discard", "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", "issue": 1959, "expires": "2026-11-30", - "discard_tokens": 738, + "discard_tokens": 696, "discard_by_channel": { - "bdd-block-fallback": 712, - "stray-brace": 1, - "top-level-resync": 25 + "bdd-block-fallback": 696 } }, { @@ -112,47 +97,9 @@ "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", "issue": 1959, "expires": "2026-11-30", - "discard_tokens": 315, - "discard_by_channel": { - "bdd-block-fallback": 315 - } - }, - { - "path": "specs/igla/coder/dataset.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 415, - "discard_by_channel": { - "bdd-block-fallback": 384, - "brace-body/in-fallback": 30, - "stray-brace": 1 - } - }, - { - "path": "specs/igla/coder/eval.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 441, - "discard_by_channel": { - "bdd-block-fallback": 440, - "stray-brace": 1 - } - }, - { - "path": "specs/igla/coder/pipeline.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 517, + "discard_tokens": 319, "discard_by_channel": { - "bdd-block-fallback": 490, - "brace-body/in-fallback": 26, - "stray-brace": 1 + "bdd-block-fallback": 319 } }, { @@ -161,46 +108,9 @@ "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", "issue": 1959, "expires": "2026-11-30", - "discard_tokens": 521, - "discard_by_channel": { - "bdd-block-fallback": 520, - "stray-brace": 1 - } - }, - { - "path": "specs/igla/coder/tokenizer.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 250, + "discard_tokens": 520, "discard_by_channel": { - "bdd-block-fallback": 249, - "stray-brace": 1 - } - }, - { - "path": "specs/igla/coder/training.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 647, - "discard_by_channel": { - "bdd-block-fallback": 646, - "stray-brace": 1 - } - }, - { - "path": "specs/igla/coder/weights.t27", - "phase": "parse-no-discard", - "reason": "unclassified: blessed by --bless-expectations", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 319, - "discard_by_channel": { - "bdd-block-fallback": 318, - "stray-brace": 1 + "bdd-block-fallback": 520 } }, { @@ -622,19 +532,6 @@ "top-level-resync": 61 } }, - { - "path": "specs/nn/attention.t27", - "phase": "parse-no-discard", - "reason": "top-level drop-recovery discards tokens; parser reaches EOF so `parse` reports success (T42)", - "issue": 1959, - "expires": "2026-11-30", - "discard_tokens": 417, - "discard_by_channel": { - "bdd-block-fallback": 343, - "brace-body/in-fallback": 10, - "top-level-resync": 64 - } - }, { "path": "specs/nn/gla.t27", "phase": "parse-no-discard", @@ -883,6 +780,6 @@ } } ], - "_why_entries_fell": "74 -> 71 (2026-10-10, #8345): #8209 made specs/math/constants.t27 sample its forall properties, so its top-level-resync channel fell 37 -> 0 (discard 386 -> 349); the entry is re-recorded with the bdd-block-fallback channel only, and the cap follows the count down to the 71 entries it already held. 77 -> 74 (2026-10-08, #7804): the three GoldenFloat lesson specs this change rewrote -- math/phi_split_optimality (pinned 131), math/radix_economy (55) and numeric/phi_ratio (145) -- now consume every token (their `forall` properties are sampled asserts) and pass every phase; the ratchet reported each as an UNEXPECTED PASS and nothing else moved. The pins are dropped and the cap follows the count down. 113 -> 109 (2026-10-05, #6437): four specs whose files were Rust-flavoured pseudo-t27 (a `loop`/`break` with `..` ranges, a `type Trit = Trit` self-alias, `format!`, `for (k, v)` and `if let`) were rewritten in t27 and now pass every phase -- ar/datalog_engine, ar/ternary_logic, test_framework/graph_drift_detection, test_framework/verilog_bench_harness. The ratchet reported each as an UNEXPECTED PASS; nothing else moved. The cap follows the count down. 113 -> 111 (2026-10-04, #6186): typecheck now resolves Zig's prefix optional `?T` (it only knew `T?`) and lets an optional accept its payload, so `specs/pins/parser.t27` (line 330, `cannot assign U32 to ?u32`) and `specs/port/scripts/gen_w378.t27` pass every phase; the ratchet reported both as UNEXPECTED PASS and nothing else moved. The cap follows the count down. 151 -> 133 (2026-10-02, #5497): 51 entries whose specs now pass every phase were removed (the ratchet reported each as an UNEXPECTED PASS); 6 specs that parse now and fail one phase later were re-keyed to that phase; 5 discard pins moved DOWN or only re-split their channels; 33 failures of ported specs merged while the gate was red were added under #5549, whose ports are to be redone. The cap follows the count down so nothing can hide in the slack. 29 core specs that began discarding tokens after bee edits were repaired, not recorded (#5572, #5575).", - "_why_entries_rose": "2026-10-13 (night tick, Refs #9281): 77 -> 83 (+ max_entries 75 -> 83), a hand edit. Six ported specs fail codegen: five W469 [N][]const u8 locals -- depin_rest #7014 (fields, line 60), tri_asm_base #9211 (lines, 136), sweep #7070 (values, 139), trios-server main #9254 (types, 325), trios-train-cpu main #9258 (args, 467) -- and gen_lru_cache_impl #8923, whose ported identifiers lower to a bare Verilog keyword `end` (verilog-no-keyword-decl, generated line 779). The over-cap state itself (77 > 75) was left by the three W469 hand-ledgers #7689/#7795/#9176, which raised the count without raising the cap while the corpus-ratchet job was already red earlier in the job; the cap raise here covers both, one reviewable event. The cap follows the count up. 2026-10-12 (Refs #8823): 72 -> 74, a hand edit. Two ported specs fail gen-verilog on a 2-D array of aggregate type, which the Verilog backend still refuses (W469 lowering, docs/reports/W469_2D_STRUCT_ARRAY_DESIGN.md): #8823 gen_w698 keeps upstream's [8][]const u8 pads and #8555 railway its [1][]const u8 sub_args. Both landed while the corpus-ratchet job was already red at the type-conflict step (that ledger was blessed separately in #9137/#9145), so the suite never ran on them; recorded under #1959 with the other W469 entries until the emitter grows the lowering. The cap follows the count up. 2026-10-05 (#6221, Refs #5776): 111 -> 113, a hand edit. Two ported specs from the 2026-10-04 batch merge (#5755 tri-issue-create, #5836 validation_engine) fail gen-verilog on a local string array, which the Verilog backend refuses (2-D array-of-aggregate lowering, W469). They landed while this job was already red at the type-conflict step, so the suite never ran on them; recorded under #5549 with the other ports to be redone. 2026-10-04 (#5949): 112 -> 113, a hand edit. typecheck now refuses a Rust `match` block, which the parser kept as text and every backend lowered to nothing (a defect that was always present: `auth/config` `get_type` generated `{}`). The corpus held 31 such blocks in 7 specs. 9 were rewritten in t27, as `switch` or `if`: all of auth/config, ar/restraint, ar/coa_planning, igla/training/roadmap and igla/evaluation/multi_lang_harness, and two of ar/composition's three. Two specs stay red: ar/composition already fails `verilog-no-keyword-decl` upstream, so its entry does not move, and git/diff, whose 21 blocks match `Ok`/`Err` of a shell command t27 cannot express, is the one new entry. No ledger entry could be retired against it without inventing a value (the one-token discard in fpga/testbench/bootrom_tb is `0xT27B007`, which has no hex reading and no other source). 2026-10-04 (#5923): 95 -> 112. +25 typecheck failures from a new rule that refuses a struct field with no type or an integer literal for a type (#3225) -- a defect that was always present, which gen-rust wrote as `pub f: ,` and `tri misread` counted; three more of the 28 specs it refuses already fail an earlier phase. -8 parse entries whose files were Markdown documents and are now t27 modules with passing tests. The cap follows the count down, 126 -> 112. a new typecheck rule (constant literal must fit its declared type, #2925) detects a defect that was always present. The five gft specs are recorded rather than edited because their correct values are a question about the GF-T ladder's definition, not about the compiler. Nothing regressed. 2026-10-02 (#5497): +2 typecheck failures that #5572 and #5575 unmasked, both in the frozen compiler core (#5573, #5574, each with its patch in the issue); and 7 discard pins raised by what the parser cannot express -- formal property statements (`forall`, `implies`, `==>`) that six specs gained in commits of 2026-09-23 .. 2026-09-30 (ternary_add 674e214d, top_level 48a9bbdd, opcodes 14d5d103, constants 9f168546, phi_split_optimality 7bf5794d, jones_polynomial 97296ccc) and pilot_pretraining in the bee commit 524387f6 of 2026-09-16. Each entry says which lines. The caps were hand-edited, which is the reviewable event." + "_why_entries_fell": "81 -> 73 (2026-10-18, Refs #10075 #10094): #10101 made seven IGLA CODER specs (arch, dataset, eval, pipeline, tokenizer, training, weights) and #10095 made nn/attention consume every token and pass every phase; the ratchet reported each as an UNEXPECTED PASS and the pins are dropped. Two pins fell with their channels: bench_proxy 738 -> 696 (stray-brace 1 -> 0, top-level-resync 25 -> 0) and prm 521 -> 520 (stray-brace 1 -> 0). The cap follows the count down. 74 -> 71 (2026-10-10, #8345): #8209 made specs/math/constants.t27 sample its forall properties, so its top-level-resync channel fell 37 -> 0 (discard 386 -> 349); the entry is re-recorded with the bdd-block-fallback channel only, and the cap follows the count down to the 71 entries it already held. 77 -> 74 (2026-10-08, #7804): the three GoldenFloat lesson specs this change rewrote -- math/phi_split_optimality (pinned 131), math/radix_economy (55) and numeric/phi_ratio (145) -- now consume every token (their `forall` properties are sampled asserts) and pass every phase; the ratchet reported each as an UNEXPECTED PASS and nothing else moved. The pins are dropped and the cap follows the count down. 113 -> 109 (2026-10-05, #6437): four specs whose files were Rust-flavoured pseudo-t27 (a `loop`/`break` with `..` ranges, a `type Trit = Trit` self-alias, `format!`, `for (k, v)` and `if let`) were rewritten in t27 and now pass every phase -- ar/datalog_engine, ar/ternary_logic, test_framework/graph_drift_detection, test_framework/verilog_bench_harness. The ratchet reported each as an UNEXPECTED PASS; nothing else moved. The cap follows the count down. 113 -> 111 (2026-10-04, #6186): typecheck now resolves Zig's prefix optional `?T` (it only knew `T?`) and lets an optional accept its payload, so `specs/pins/parser.t27` (line 330, `cannot assign U32 to ?u32`) and `specs/port/scripts/gen_w378.t27` pass every phase; the ratchet reported both as UNEXPECTED PASS and nothing else moved. The cap follows the count down. 151 -> 133 (2026-10-02, #5497): 51 entries whose specs now pass every phase were removed (the ratchet reported each as an UNEXPECTED PASS); 6 specs that parse now and fail one phase later were re-keyed to that phase; 5 discard pins moved DOWN or only re-split their channels; 33 failures of ported specs merged while the gate was red were added under #5549, whose ports are to be redone. The cap follows the count down so nothing can hide in the slack. 29 core specs that began discarding tokens after bee edits were repaired, not recorded (#5572, #5575).", + "_why_entries_rose": "2026-10-18 (Refs #10075): no entry added; one pin raised, a hand edit. specs/igla/coder/benchmark.t27 discards 319 tokens, pinned at 315 (+4), all in the bdd-block-fallback channel: #10101 lengthened the `then` conditions of its given/when/then blocks, which the parser skips wholesale. Not a new parser failure; the BDD blocks were already discarded. 2026-10-13 (night tick, Refs #9281): 77 -> 83 (+ max_entries 75 -> 83), a hand edit. Six ported specs fail codegen: five W469 [N][]const u8 locals -- depin_rest #7014 (fields, line 60), tri_asm_base #9211 (lines, 136), sweep #7070 (values, 139), trios-server main #9254 (types, 325), trios-train-cpu main #9258 (args, 467) -- and gen_lru_cache_impl #8923, whose ported identifiers lower to a bare Verilog keyword `end` (verilog-no-keyword-decl, generated line 779). The over-cap state itself (77 > 75) was left by the three W469 hand-ledgers #7689/#7795/#9176, which raised the count without raising the cap while the corpus-ratchet job was already red earlier in the job; the cap raise here covers both, one reviewable event. The cap follows the count up. 2026-10-12 (Refs #8823): 72 -> 74, a hand edit. Two ported specs fail gen-verilog on a 2-D array of aggregate type, which the Verilog backend still refuses (W469 lowering, docs/reports/W469_2D_STRUCT_ARRAY_DESIGN.md): #8823 gen_w698 keeps upstream's [8][]const u8 pads and #8555 railway its [1][]const u8 sub_args. Both landed while the corpus-ratchet job was already red at the type-conflict step (that ledger was blessed separately in #9137/#9145), so the suite never ran on them; recorded under #1959 with the other W469 entries until the emitter grows the lowering. The cap follows the count up. 2026-10-05 (#6221, Refs #5776): 111 -> 113, a hand edit. Two ported specs from the 2026-10-04 batch merge (#5755 tri-issue-create, #5836 validation_engine) fail gen-verilog on a local string array, which the Verilog backend refuses (2-D array-of-aggregate lowering, W469). They landed while this job was already red at the type-conflict step, so the suite never ran on them; recorded under #5549 with the other ports to be redone. 2026-10-04 (#5949): 112 -> 113, a hand edit. typecheck now refuses a Rust `match` block, which the parser kept as text and every backend lowered to nothing (a defect that was always present: `auth/config` `get_type` generated `{}`). The corpus held 31 such blocks in 7 specs. 9 were rewritten in t27, as `switch` or `if`: all of auth/config, ar/restraint, ar/coa_planning, igla/training/roadmap and igla/evaluation/multi_lang_harness, and two of ar/composition's three. Two specs stay red: ar/composition already fails `verilog-no-keyword-decl` upstream, so its entry does not move, and git/diff, whose 21 blocks match `Ok`/`Err` of a shell command t27 cannot express, is the one new entry. No ledger entry could be retired against it without inventing a value (the one-token discard in fpga/testbench/bootrom_tb is `0xT27B007`, which has no hex reading and no other source). 2026-10-04 (#5923): 95 -> 112. +25 typecheck failures from a new rule that refuses a struct field with no type or an integer literal for a type (#3225) -- a defect that was always present, which gen-rust wrote as `pub f: ,` and `tri misread` counted; three more of the 28 specs it refuses already fail an earlier phase. -8 parse entries whose files were Markdown documents and are now t27 modules with passing tests. The cap follows the count down, 126 -> 112. a new typecheck rule (constant literal must fit its declared type, #2925) detects a defect that was always present. The five gft specs are recorded rather than edited because their correct values are a question about the GF-T ladder's definition, not about the compiler. Nothing regressed. 2026-10-02 (#5497): +2 typecheck failures that #5572 and #5575 unmasked, both in the frozen compiler core (#5573, #5574, each with its patch in the issue); and 7 discard pins raised by what the parser cannot express -- formal property statements (`forall`, `implies`, `==>`) that six specs gained in commits of 2026-09-23 .. 2026-09-30 (ternary_add 674e214d, top_level 48a9bbdd, opcodes 14d5d103, constants 9f168546, phi_split_optimality 7bf5794d, jones_polynomial 97296ccc) and pilot_pretraining in the bee commit 524387f6 of 2026-09-16. Each entry says which lines. The caps were hand-edited, which is the reviewable event." } diff --git a/tools/census/quiet.txt b/tools/census/quiet.txt index 808aed5cdd..c75a742499 100644 --- a/tools/census/quiet.txt +++ b/tools/census/quiet.txt @@ -1,8 +1,8 @@ GATE STEPS WHOSE PASS SURVIVES THE SUBJECT GOING MISSING - workflow files read 66 + workflow files read 67 steps in a quiet shape 32 - named a path but not quiet 198 (--excluded prints them) + named a path but not quiet 200 (--excluded prints them) by shape: failure branch passes 14 `… 2>/dev/null … || echo PASSED` diff --git a/tools/census/shell.txt b/tools/census/shell.txt index 1711e2457d..5fb8b5e402 100644 --- a/tools/census/shell.txt +++ b/tools/census/shell.txt @@ -1,11 +1,11 @@ WHICH INTERPRETER EACH GATE STEP IS HANDED TO, AND WHO SAYS SO - workflow files read 66 - jobs 87 - run: steps 313 + workflow files read 67 + jobs 88 + run: steps 314 who names the shell: - the runner does 292 no container, so bash -eo pipefail + the runner does 293 no container, so bash -eo pipefail a `shell:` key does 6 NOBODY 15 a container and no `shell:` key From 34f77c6020acadaa04ac64e2bcd43b896f4b8840 Mon Sep 17 00:00:00 2001 From: Dmitrii Vasilev Date: Sun, 18 Oct 2026 09:47:38 +0700 Subject: [PATCH 2/2] spec(t27mcp): examples.t27 uses check_hints' find/has instead of a second copy (Refs #10171) #10157 landed examples.t27 with byte-identical find(), has() and NO_POS from check_hints.t27, so duplicate-bodies on master reports two new groups. examples.t27 now imports t27mcp::check_hints. gen-c still emits both definitions in the one C file the wasm build compiles; 8/8 tests, 0 vacuous. Co-Authored-By: Claude Opus 5.5 --- specs/t27mcp/examples.t27 | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/specs/t27mcp/examples.t27 b/specs/t27mcp/examples.t27 index 5de96306b6..fbaa7b7360 100644 --- a/specs/t27mcp/examples.t27 +++ b/specs/t27mcp/examples.t27 @@ -22,6 +22,9 @@ module T27mcpExamples; +// find(), has() and NO_POS are check_hints.t27 helpers: one body for both specs. +use t27mcp::check_hints; + /// The commit of gHashTag/t27 every row points into. pub const PIN : str = "a18d7ee14a9994ef9dc84dac10e1a2944367d4c5"; @@ -47,7 +50,6 @@ pub const TOPICS : [8]str = [ ]; pub const NO_ROW : u32 = 4294967295; -pub const NO_POS : u32 = 4294967295; pub const MAX_LINES : u32 = 40; pub const ROWS : u32 = 10; @@ -82,31 +84,6 @@ pub const EX_WHY : [10]str = [ "The header states that nothing here is reset: the counters start from their var initialisers." ]; -/// Byte offset of the first occurrence of `needle` in `hay`, or NO_POS. -pub fn find(hay: string, needle: string) -> u32 { - var hn : u32 = (hay.len as u32); - var nn : u32 = (needle.len as u32); - if (nn > hn) { return NO_POS; } - var i : u32 = 0; - while (i <= hn - nn) { - var j : u32 = 0; - var same : u32 = 1; - while (j < nn) { - if ((hay[i + j] as u32) != (needle[j] as u32)) { same = 0; } - j = j + 1; - } - if (same == 1) { return i; } - i = i + 1; - } - return NO_POS; -} - -/// 1 when `needle` occurs in `hay`. -pub fn has(hay: string, needle: string) -> u32 { - if (find(hay, needle) == NO_POS) { return 0; } - return 1; -} - /// The topic a lower-case question is about, or T_NONE. pub fn topic_code(q: string) -> u32 { if (has(q, "reset") == 1) {