You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The only generator-based oracle, cli/t27b/tests/differential.rs, builds random IR and compares codegen with eval.rs. It never generates t27 source, never goes through lower.rs (7011 lines, where most changes land) and never runs the reference path (t27c gen-zig + zig). Its seed is fixed (0x7427, 2500 cases per mode), so CI re-tests the same programs forever. The corpus is the only check on lowering, and corpus specs were not written to stress corner cases.
Prior art: Csmith (325+ bugs) and YARPGen (221 + 122 bugs) generate UB-free programs that end in a checksum. cranelift-fuzzgen restricts generation to implemented opcodes (FUZZGEN_ALLOWED_OPS). The wasmtime differential target runs wasm-smith modules on several engines.
Change
A source-level generator, tri t27b fuzz --cases N --seed S:
emits random .t27 modules limited to the constructs t27b accepts (allow-list derived from blockers.rs, so it grows with each lane), including integer widths, checked and wrapping arithmetic, shifts, if/switch/for, structs, arrays, optionals and f64;
biases constants toward 0, +-1, powers of two and MIN/MAX (the YARPGen policy);
ends every test in assert_eq(checksum, <value>), with the expected value left open so that the oracle is agreement: the same checksum or the same trap site from t27c gen-zig + zig test and from t27b;
runs on the Railway lab with a fresh seed every run and records failing seeds; each failing case is committed as a regression spec under a fixtures directory, not under specs/;
classifies a disagreement as a t27b bug, a reference bug (t27c gen-zig) or a semantics gap (no written rule), and files the last two kinds separately.
Done when
tri t27b fuzz --cases 1000 runs on the lab and publishes fuzz.{cases,agree,disagree,seeds} in latest.json.
Both done-when items hold: the fuzzer landed in #6848 (+ #6879, #6892), the lab publishes fuzz in latest.json every run, and the 10k-case result is recorded in #6063 (#6063 (comment)): T27B_BUG 0, unjudged 0.
Activity
test(t27b fuzz): fixtures from the 1000-case lab run, seed 1791291854 (…
feat(t27b): differential fuzzer -- tri t27b fuzz, generator and judge…
test(t27b fuzz): fixtures from the 1000-case lab run, seed 1791291854 (…
feat(t27b): tri t27b fuzz -- differential fuzzer, generator and judge…
fix(t27b fuzz): FuzzRng, not Rng; bless the shell census (#6442)
fix(t27b fuzz): FuzzRng, not Rng; bless the shell census (#6442) (#6879)
fix(t27b fuzz): a host that refused the run is UNJUDGED, not T27B_BUG (…
docs: the coordination entry this branch needs to land
fix(ci): bless the quiet census after #6847; seal t27a_mnemonics (Refs …
Merge remote-tracking branch 'origin/master' into feat/tri-night (Refs …
gHashTag commentedon Oct 6, 2026
Both done-when items hold: the fuzzer landed in #6848 (+ #6879, #6892), the lab publishes
fuzzin latest.json every run, and the 10k-case result is recorded in #6063 (#6063 (comment)): T27B_BUG 0, unjudged 0.theory(sieve): re-read the t27c and t27b cells after T741's fix issue…
t27b lab: the ledger steward runs on every red master run, as ledger_…