Before You Fab

Accuracy and rules

How often it is right, and how I know.

A checker that cries wolf gets ignored. So I tested this one on open-source boards it had never seen, opened every serious finding, and wrote down whether it was real. These are the results, bad rounds included.

Latest untouched run

Round 4: 18 repositories, 30 KiCad projects, none used before. The engine was frozen (not edited) between the run and the review.

12real problems the owner should fix
9true but harmless or intentional
8wrong
7my test setup was wrong (left out)

29 serious findings counted. 72% were correct and 41% were problems worth acting on. If my test-setup mistakes are counted against the tool, those fall to 58% and 33%.

Every round

RoundFindingsRealHarmlessWrongReal onlyReal + harmless
Round 1211101052%52%
Round 236891922%47%
Round 324144658%75%
Round 429129841%72%

Findings are blockers and warnings only. Notes are not counted. “Real” means a true problem or a true disagreement between the project’s own files. “Harmless” means correct but intentional or irrelevant in context. Round 3 had one project that produced 15 of its 24 findings, which flatters its percentage. Round 2 is the worst: a missing feature (buses between sheets) caused most of its wrong findings; it was fixed and later checked against KiCad itself.

What the wrong ones were (round 4)

I fixed each of these and added a test that fails without the fix. After the fixes, the same round-4 boards give 19 serious findings with 14 real and 5 harmless, none wrong (two of the real ones had been hidden by a mistake in my test setup, which also got fixed). Do not read that as accuracy: I looked at those boards before making the fixes. The untouched number above is the honest one, and the next fresh round will be reported the same way.

If a part is really missing, does it notice?

I removed parts from real boards in memory (a bypass capacitor, a pull-up, a footprint) and checked whether the engine reported it. On 29 boards it had not been tuned on it found 235 of 246 (96%). On the 280 boards that were also used to tune the rules it found 1931 of 1990 (97%), which is a ceiling, not a promise.

What this does not show: it only tests removed parts, not wrong values or wrong wiring. The two weak spots are named here so you do not lean on them. ESP32 EN pull-up: found 12 of 23 on the tuning boards and 0 of 3 on fresh ones, because the rule stays quiet when a transistor, switch or connector shares the EN net (they may define the level), so a removed pull-up goes unseen on boards with an auto-reset circuit. Bypass capacitors: 63% on fresh boards, with most misses on rails shared between many parts or covered by another rule.

Does it read the schematic the way KiCad does?

I compared the nets this engine builds from .kicad_sch files with the netlist KiCad 10 itself exports (kicad-cli 10.0.7), as groups of pins. They match on 318 of 318 projects, 14,274 nets. That includes wires, junctions, local, global and hierarchical labels, power symbols and buses. The last mismatch was found on fresh boards in round 4 and fixed, so that figure is partly tuned too.

How the checker can be wrong

All 38 rules

RuleWhat it checksGroupNeeds
reg-capsRegulator input and output capacitorsPowerschematic or netlist
reg-vinRegulator input voltage against datasheet limitsPowerschematic or netlist
reg-thermalLinear regulator dissipation and dropoutPowerschematic or netlist
decouplingSupply pins without bypass capacitorsPowerschematic or netlist
polar-capPolarised capacitor orientationAssembly riskschematic or netlist
power-pin-openSupply or ground pins connected to nothingNetlist sanityschematic or netlist
rail-namesSame voltage under two different rail namesNetlist sanityschematic or netlist
rail-no-sourceSupply rail with consumers and no sourceNetlist sanityschematic or netlist
input-protectionExternal power input without reverse-polarity or surge protectionHardeningschematic or netlist
usbc-ccUSB-C CC pins need a 5.1 k pull-down eachInterfacesschematic or netlist
usb-esdUSB connector data lines without ESD protectionHardeningschematic or netlist
i2c-pullupsI2C lines need pull-ups, and not too strongInterfacesschematic or netlist
led-resistorLEDs without a current-limiting elementSignalsschematic or netlist
fet-gateMOSFET gate driven by an IC pin with no pull-downSignalsschematic or netlist
crystal-capsCrystals without load capacitorsSignalsschematic or netlist
esp-enESP32 EN pin must not floatChip rulesschematic or netlist
esp32-mtdiESP32 GPIO12 (MTDI) pulled high at bootChip rulesschematic or netlist
esp32-supplyESP32 supply must be able to deliver 500 mAChip rulesschematic or netlist
stm32-boot0STM32 BOOT0 must be definedChip rulesschematic or netlist
stm32-vcapSTM32 VCAP pins need their capacitorChip rulesschematic or netlist
rp2040-usbRP2040 USB lines need 27 ohm series resistorsChip rulesschematic or netlist
programming-accessNo way to program the MCUBring-upschematic or netlist
mcu-overvoltage3.3 V-class chips on a higher-voltage railChip rulesschematic or netlist
orphan-labelLabels that reach only one pinNetlist sanityschematic or netlist
floating-inputAddress or select pins left floatingNetlist sanityschematic or netlist
pcb-syncBoard out of date against the schematicFab readinessschematic or netlist + board file
footprint-pinsSymbol pins with no pad on the assigned footprintFab readinessschematic or netlist + board file
pcb-outlineBoard outline missing or not closedFab readinessboard file
duplicate-refsTwo footprints share one referenceFab readinessboard file
jlc-limitsFeatures below JLCPCB manufacturing minimumsFab readinessboard file
assembly-classWhich JLCPCB assembly class this board needsFab readinessboard file
bom-lcscBOM lines JLCPCB cannot match to a stocked partAssembly readinessBOM CSV
bom-cpl-matchBOM and placement file must list the same partsAssembly readinessBOM CSV + placement CSV
bom-structureBOM structure problemsAssembly readinessBOM CSV
bom-vs-designBOM against the schematicAssembly readinessBOM CSV + schematic or netlist
cpl-structurePlacement file structure problemsAssembly readinessplacement CSV
cpl-vs-pcbPlacement file does not match the boardAssembly readinessplacement CSV + board file
cpl-sidesPlacement on both board sidesAssembly readinessplacement CSV

Rules marked with only a schematic need nothing else. Rules that need a file you did not provide are shown as “not run” in the report, never as passed.