The mistakes are the interesting part.
Notes from building a verifier for hardware. Every one of these started as something we got wrong and only found because we went and looked. Drafts land here as they're written — waitlist members get them first.
Hashing an artifact is not inspecting it
We byte-verified the same rendered schematic seven times. Then someone rasterized it and looked: every passive was an identical yellow box, designators read like R70480, and ground labels stacked into GNDGND. Seven green checks had told us nothing about whether an engineer could review the picture.
Paint order is semantic: 8.7 parts per million
The same KiCad version on two machines emits identical elements in a different sequence. Identical multisets, different order — and compositing isn't associative in the last bit. We measured 67 differing pixels on one sheet at a delta of two out of 255, and reported it as a measurement rather than inventing a threshold. A threshold would have been DPI-dependent anyway: one real defect reads 76, 152, 236, 316 or 938 pixels depending on where you sample it.
Six designs from an empty file, and what the failures taught us
A live model produced six designs against predicates only the engine could judge. It passed 6 of 6 — but an earlier run passed 1 of 4, and every one of those failures was ours, not the model's: a budget that billed the whole transcript every turn, an antenna the catalog couldn't represent, a corner the rules got wrong. Also: every first mutation batch was refused on grammar and corrected on the next turn. Those spellings live in the prompt now.
Why TP4056 and MCP73831 disagree — and why that's the whole argument
Two charger ICs, two different constants in the same I_CH = K / R_PROG formula: K = 1000 V against 1100–1200 V depending on the datasheet revision. Hardcode either one in Python and you've silently mis-sized half your boards. This is why rules are data with authority cited, and why a language model recalling "the charger formula" from memory is unacceptable.
A constraint printed where a value belongs
One capacitor's value field read >=22uF — in the schematic the user owns, and in the exported BOM. The engine was right; the field was the wrong home for it. A constraint belongs in the dossier; a value field carries a chosen part's value or a visible stub. Small bug, load-bearing principle.
Read these as they land.
The weekly changelog carries each note when it's published. One email, no marketing.