Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/emit-bitexact-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ on:
# rewrites the C emitter merges with the cross-target proof never running.
- "bootstrap/**"
- "cli/**"
- "tools/check_specs_parse.py"
- "tools/gft_backprop_microcode.py"
- "tools/verify_emit_bitexact.py"
- "tools/verify_multitarget.py"
Expand Down Expand Up @@ -54,6 +55,15 @@ jobs:
- name: Build t27c
run: cargo build --release -p t27c

# Precondition for everything below. A spec that does not parse produces no
# backend output at all, and the downstream scripts report that as "the C
# backend failed to build" -- which sent four days of readers to the wrong
# subsystem. Ask the parser first, and print its own message.
- name: Required specs parse (negative control)
run: python3 tools/check_specs_parse.py --self-check
- name: Required specs parse
run: python3 tools/check_specs_parse.py

- name: Prove generated RTL == GF-T model (bit-exact) + synthesizes
run: python3 tools/verify_emit_bitexact.py

Expand Down
14 changes: 14 additions & 0 deletions docs/NOW.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
# NOW -- one missing brace, and three layers that named the wrong subsystem (2026-08-18)

Last updated: 2026-08-18

## specs: close 27 unterminated test blocks; the cross-target proof was never running (Closes #2185)

- **`emit-bitexact` was red since 2026-08-14 because of one character.** A bulk edit appended `test <name>_w339_batch_depth_invariant_2 {` to 27 spec files and omitted the closing `}` in every one, so the parser hits the next `test` keyword while still inside the block
- **Three layers each reported something else, and only the innermost was true.** The CI gate said `IGLA RACE CROSS-TARGET MISMATCH`; `verify_igla_race.py` said `FAIL: C backend failed to build/run`; `t27c` said `parse error in fn 'ternary_mac_w339_batch_depth_invariant_2' near line 1815: unexpected token after expression statement: KwTest` -- file, function, line and token, exactly right. The script runs its builds with `capture_output=True` and inspects only `returncode`, so that message was collected and thrown away
- **A diagnostic that names the wrong subsystem costs more than none.** "The C and Rust backends diverge" is a far more alarming claim than "a spec has a typo", and it is where four days of reading went
- **There was no cross-target divergence.** With the braces closed, `verify_igla_race.py` exits 0: C and Rust each match the reference bit-exact over 800 vectors, for both `ternary_mul/mac` and `systolic_ternary_pe` with its i16 accumulator. #2184 is corrected accordingly -- the `i16 + i8` no-cast gap in `gen_rust` is real, is documented in the script, and is worked around there; it was never what made the gate red
- **Gate:** `tools/check_specs_parse.py` asks the question the three layers did not -- does `t27c` accept the file -- and prints the compiler's own message. Negative control plants an unclosed block and proves the gate rejects it. Wired in ahead of every other step, because it is their precondition
- **Reported, not fixed:** closing the braces reveals 15 of 27 igla specs still failing on unrelated parser features (`unknown cast target type f32`, `Unexpected top-level token: KwModule`), overlapping #2174. Different class, left alone
- The `paths:` edit silently failed on an indentation mismatch for the second time today. Caught by a negative control over the filter, not by reading it

# NOW -- the bit-exactness gate could not see the compiler (2026-08-18)

Last updated: 2026-08-18
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/arch.t27
Original file line number Diff line number Diff line change
Expand Up @@ -2329,7 +2329,7 @@ test arch_w339_batch_depth_invariant_1 {
test arch_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (72→73)
test arch_w340_batch_depth_invariant_1 { /* verify baseline */ }
test arch_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/bench_proxy.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1231,7 +1231,7 @@ test bench_proxy_w339_batch_depth_invariant_1 {
test bench_proxy_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (72→73)
test bench_proxy_w340_batch_depth_invariant_1 { /* verify baseline */ }
test bench_proxy_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/benchmark.t27
Original file line number Diff line number Diff line change
Expand Up @@ -4617,7 +4617,7 @@ test benchmark_w339_batch_depth_invariant_1 {
test benchmark_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (73→74)
test benchmark_w340_batch_depth_invariant_1 { /* verify baseline */ }
test benchmark_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/dataset.t27
Original file line number Diff line number Diff line change
Expand Up @@ -2450,7 +2450,7 @@ test dataset_w339_batch_depth_invariant_1 {
test dataset_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (72→73)
test dataset_w340_batch_depth_invariant_1 { /* verify baseline */ }
test dataset_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/eval.t27
Original file line number Diff line number Diff line change
Expand Up @@ -3631,7 +3631,7 @@ test eval_w339_batch_depth_invariant_1 {
test eval_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (74→75)
test eval_w340_batch_depth_invariant_1 { /* verify baseline */ }
test eval_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/pipeline.t27
Original file line number Diff line number Diff line change
Expand Up @@ -2253,7 +2253,7 @@ test pipeline_w339_batch_depth_invariant_1 {
test pipeline_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (73→74)
test pipeline_w340_batch_depth_invariant_1 { /* verify baseline */ }
test pipeline_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/prm.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1559,7 +1559,7 @@ test prm_w339_batch_depth_invariant_1 {
test prm_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (73→74)
test prm_w340_batch_depth_invariant_1 { /* verify baseline */ }
test prm_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/tokenizer.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1381,7 +1381,7 @@ test tokenizer_w339_batch_depth_invariant_1 {
test tokenizer_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (73→74)
test tokenizer_w340_batch_depth_invariant_1 { /* verify baseline */ }
test tokenizer_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/training.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1587,7 +1587,7 @@ test training_w339_batch_depth_invariant_1 {
test training_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (73→74)
test training_w340_batch_depth_invariant_1 { /* verify baseline */ }
test training_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/coder/weights.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1460,7 +1460,7 @@ test weights_w339_batch_depth_invariant_1 {
test weights_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — CODER depth +1 (73→74)
test weights_w340_batch_depth_invariant_1 { /* verify baseline */ }
test weights_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/adder_tree.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1594,7 +1594,7 @@ test adder_tree_w339_batch_depth_invariant_1 {
test adder_tree_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (82→83)
test adder_tree_w340_batch_depth_invariant_1 { /* verify baseline */ }
test adder_tree_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/backend.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1934,7 +1934,7 @@ test backend_w339_batch_depth_invariant_1 {
test backend_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (85→86)
test backend_w340_batch_depth_invariant_1 { /* verify baseline */ }
test backend_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/bram_weights.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1588,7 +1588,7 @@ test bram_weights_w339_batch_depth_invariant_1 {
test bram_weights_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test bram_weights_w340_batch_depth_invariant_1 { /* verify baseline */ }
test bram_weights_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/cordic.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1601,7 +1601,7 @@ test cordic_w339_batch_depth_invariant_1 {
test cordic_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test cordic_w340_batch_depth_invariant_1 { /* verify baseline */ }
test cordic_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/cordic_fixed.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1615,7 +1615,7 @@ test cordic_fixed_w339_batch_depth_invariant_1 {
test cordic_fixed_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (84→85)
test cordic_fixed_w340_batch_depth_invariant_1 { /* verify baseline */ }
test cordic_fixed_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/cordic_top.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1640,7 +1640,7 @@ test cordic_top_w339_batch_depth_invariant_1 {
test cordic_top_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (84→85)
test cordic_top_w340_batch_depth_invariant_1 { /* verify baseline */ }
test cordic_top_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/eda.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1829,7 +1829,7 @@ test eda_w339_batch_depth_invariant_1 {
test eda_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test eda_w340_batch_depth_invariant_1 { /* verify baseline */ }
test eda_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/formal.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1750,7 +1750,7 @@ test formal_w339_batch_depth_invariant_1 {
test formal_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test formal_w340_batch_depth_invariant_1 { /* verify baseline */ }
test formal_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/gemm.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1642,7 +1642,7 @@ test gemm_w339_batch_depth_invariant_1 {
test gemm_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test gemm_w340_batch_depth_invariant_1 { /* verify baseline */ }
test gemm_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/opcodes.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1456,7 +1456,7 @@ test opcodes_w339_batch_depth_invariant_1 {
test opcodes_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test opcodes_w340_batch_depth_invariant_1 { /* verify baseline */ }
test opcodes_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/rtl.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1776,7 +1776,7 @@ test rtl_w339_batch_depth_invariant_1 {
test rtl_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (83→84)
test rtl_w340_batch_depth_invariant_1 { /* verify baseline */ }
test rtl_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/systolic_array.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1755,7 +1755,7 @@ test systolic_array_w339_batch_depth_invariant_1 {
test systolic_array_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (86→87)
test systolic_array_w340_batch_depth_invariant_1 { /* verify baseline */ }
test systolic_array_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/systolic_ternary.t27
Original file line number Diff line number Diff line change
Expand Up @@ -2004,7 +2004,7 @@ test systolic_ternary_w339_batch_depth_invariant_1 {
test systolic_ternary_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool B depth +1 (99→100)
test systolic_ternary_w340_batch_depth_invariant_1 { /* verify baseline */ }
test systolic_ternary_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/ternary_gemm.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1755,7 +1755,7 @@ test ternary_gemm_w339_batch_depth_invariant_1 {
test ternary_gemm_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (82→83)
test ternary_gemm_w340_batch_depth_invariant_1 { /* verify baseline */ }
test ternary_gemm_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/ternary_inference.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1130,7 +1130,7 @@ test ternary_inference_w339_batch_depth_invariant_1 {
test ternary_inference_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Integration depth +1 (82→83)
test ternary_inference_w340_batch_depth_invariant_1 { /* verify baseline */ }
test ternary_inference_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/ternary_mac.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1810,7 +1810,7 @@ test ternary_mac_w339_batch_depth_invariant_1 {
test ternary_mac_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (82→83)
test ternary_mac_w340_batch_depth_invariant_1 { /* verify baseline */ }
test ternary_mac_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
2 changes: 1 addition & 1 deletion specs/igla/race/yosys.t27
Original file line number Diff line number Diff line change
Expand Up @@ -1785,7 +1785,7 @@ test yosys_w339_batch_depth_invariant_1 {
test yosys_w339_batch_depth_invariant_2 {
// Verify baseline properties for 15-variable accumulation
assert(true)

}
// Wave Loop 340 — Pool A depth +1 (84→85)
test yosys_w340_batch_depth_invariant_1 { /* verify baseline */ }
test yosys_w340_batch_depth_invariant_2 { /* verify baseline */ }
Expand Down
Loading
Loading