blind-spot: an RTL mutation task the verdicts could not see
Four thousand certified verdicts could not see this mutant
A hardware comparator decides whether two integer vectors are at least 60° apart — u·v ≤ 0 or 4(u·v)² ≤ (u·u)(v·v), eleven 3-bit coordinates a side. A corpus of 14.95 million pairs from finished, certified mathematics is the testbench anyone would reach for first. Then MCY mutates the netlist 400 ways and runs four testbenches of 4,000 pairs against every mutant: a stratified sample of that corpus, and three families built to look where it cannot. The corpus sample misses 98 of the 348 mutations some pair can kill, and for 46 of them only one of the three families sees anything at all. The task is to name a pair that tells the mutant from the design.
There is no answer key, no judge and no tolerance. A kill is checked by simulating the actual netlist under the actual mutation; EQUIVALENT is checked against a SAT proof on a hand-written miter. 348 mutations carry a verified witness, 51 are proved equivalent, and the identity mutation is in the pool as a control that must be recognised rather than killed.
Where the corpus cannot look
400 mutations, by region of the netlistName a pair yourself
the specification, run here — not the netlistKnowing the family is not the pair
the reference policies, by class- chosen — one seeded draw of eight pairs per task; another draw scores otherwise
The reference table
40 tasks per rung, seed 2026, no API key- chosen — one seeded draw of eight pairs per task; another draw scores otherwise
Three models
108 calls · refusals counted apart, never reworded- chosen — one sample of the model’s replies — each grade decided, the sample drawn
The controls run before any model does
11 planted, 0 misbehavedHow a verdict is reached, and what it is worth
One control design carries all 400 mutations under a select input, so a kill is four thousand simulated records a second rather than four hundred rebuilds. EQUIVALENT is a yosys sat proof on a hand-written miter — 356 seconds for the whole pool on this laptop — and every witness the prover returns is re-run through the simulator before it is believed.
This environment was ported into this repository and its labels were re-derived here, not copied. The SAT run was repeated on this machine and compared against the source lab's own record: every mutation id, label, class, profile, mutation text, witness pair and witness pin-pair is identical, 400 of 400 on each. The only fields that differ anywhere in the record are the SAT timings, which are the machine and not the mathematics.
What it certifies is arithmetic about one elaborated netlist and one mutation set. It is not a claim about any shipped chip, and it does not say a corpus that misses these mutants is a bad corpus — it says a coverage number computed from valid inputs cannot see a defect that only invalid inputs reach, which is a statement about the measurement, not about the people who took it.
cd environments/blind_spot && python3 -m pytest tests -q
python3 -m blind_spot gate
python3 -m blind_spot baseline --n 40
python3 environments/blind_spot/battery.py
node playground/build.js