KiCadRoutingTools (drandyhaas) errors
58 recurring problems engineers report in KiCadRoutingTools (drandyhaas), ranked by impact.
#4 by errors trackedECAD
Recurring KiCadRoutingTools (drandyhaas) errors, by impact
- 1A .kicad_dru rule says HV nets need 0.6 mm, but route.py prints it as handled, lists no unsupported rules, and ships HV copper 0.2 to 0.58 mm apart. With --clearance-ceiling 0.1 it also rewrites the .kicad_pro HV class to 0.1 mm, so kicad-cli DRC and check_drc both report a clean board.ECAD · Agent failure · 1 report82
- 2A class-scoped disallow track layer rule is treated as consumed. route.py puts 11 HS tracks on B.Cu, check_drc says clean, board_score reports 0 blocking, while KiCad itself reports 11 items_not_allowed.ECAD · Agent failure · 1 report82
- 3On the orbiter_kb board the final route step ships GND open, and only KiCad's refill catches it. The copper grading passed it. The tool's fill model counts a 106 mm2 B.Cu island as joined to the main flood, and KiCad does not, and the repair step cannot weld the link either, because kicad-cli anchors the zone end at an outline corner that sits off the board.ECAD · Agent failure · 1 report82
- 4A routed board passes check_drc, board_score and check_complete after its floors are lowered, but the grade against the authored project reads UNSOUND, and KiCad finds about 170 clearance errors at the authored project.ECAD · Agent failure · 1 report74
- 5A weld moved a track to 0.1304 mm from a foreign via against 0.2 mm clearance, and the sweep's gate only checks the net's own connectivity.ECAD · Agent failure · 1 report74
- 6An escape via cut a guarded pour, two pads ended open and the gate accepted.ECAD · Agent failure · 1 report74
- 7bga_fanout only re-checks net-class clearance when a class sits above the run clearance, so a rescue step re-escapes dropped balls at the 0.09 mm fab floor and a ball in a 0.22 mm class gets laid at 0.09 mm and is never graded. The step exits 0 and reports failed: 0, while KiCad flags 4 violations.ECAD · Agent failure · 1 report74
- 8check_drc reads .kicad_dru clearance through only three channels; netclass- and type-scoped rules are skipped with a console note and annular_width is not read at all. board_score keeps DRC at 0 and check_complete says DONE while KiCad reports the errors.ECAD · Agent failure · 1 report74
- 9Footprints imported from other EDA tools keep bare pad numbers (a USB-C receptacle with A5, B12); KiCad reads them, but two readers in this toolkit wanted quotes, so the part counted as not assembled, its 3D model was neither staged nor flagged missing, and the bus step couldn't find its pads. An earlier version dropped those nets entirely as Only 1 pad(s).ECAD · Agent failure · 1 report74
- 10KiCad nightly (board format 20260616) stores a footprint's pose as a (transform ...) block instead of (at x y r), the parser did not follow, found no position, and put every part at the origin. On a 112-footprint, 4-layer board, route.py graded 5 nets, wrote 36 segments and reported failed 0 with exit 0, while KiCad's DRC on the output found 10 shorts, 2 clearance violations and 156 unconnected items.ECAD · Agent failure · 1 report74
- 11On the daisho board, one bga_fanout run writes two pairs of escapes from different nets that cross on one layer, which is a short. The run exits 0, and its drc_grazes summary counts the two crossings in the total under no named key (480 of 482 add up). The earlier fix only checks escapes against copper already on the board, not against escapes from the same run.ECAD · Agent failure · 1 report74
- 12plan-pcb-placement writes the routing chain as an in/out file while plan-pcb-routing writes it as a .sh file, and neither checker reads the other's format, so a chain cannot be checked before the expensive judging run.ECAD · Agent failure · 1 report74
- 13Plane finalize routes GND through net-filtered keep-outs; one snapshot had 24 items_not_allowed and the run was killed before its audit printed.ECAD · Agent failure · 1 report74
- 14QFN fanout laid 8 vias with a 0.10 mm ring on a board whose Board Setup minimum is 0.13 mm, and said nothing.ECAD · Agent failure · 1 report74
- 15route_diff prints 'matched end-to-end by the AC-coupled pass' for a USB-style chain it left at 0.115 mm skew against a 0.01 mm tolerance. It records no tolerance for the chain, check_drc prints NO DRC VIOLATIONS FOUND, and board_score shows BLOCKING=0 with the per-side 0.057 mm number. Nothing grades the real skew.ECAD · Agent failure · 1 report74
- 16route.py lowers the project's min_hole_clearance from 0.25 to 0.2 when no copper needs it; the design-rules ledger records nothing and --strict-sizes exits 0, while the end-of-run banner calls the value unchanged by this step. Later steps read 0.2 back as the board's own rule.ECAD · Agent failure · 1 report74
- 17The A* router honors keep-out rule areas, but the pour-launch weld stubs do not, so the router laid a short GND track inside a tracks-not-allowed area. KiCad DRC caught the stub after the fact, but the search itself never checked the route endpoint against keep-outs.ECAD · Agent failure · 1 report74
- 18The admission check looks only at foreign tracks, vias, pads and hole-to-hole spacing. It does not check rule areas. The pad repair that runs before it on the same board does respect the keep-out and refuses the via. Found by a random-board fuzz.ECAD · Agent failure · 1 report74
- 19The autorouter read Eagle octagon pads as roundrect and dropped the chamfer, so tracks ended in the cut corner 0.2 mm outside the real pad while the router's summary said failed 0; only kicad-cli found the unconnected pads.ECAD · Agent failure · 1 report74
- 20The exact zone fill runs in a temp folder holding only the .kicad_pcb and .kicad_pro, so KiCad builds its DRC engine with no custom rules, while the delivered board ships with its .kicad_dru beside it. On the repro all 202 findings are pad-to-zone at 0.5085 mm against a 0.8 mm rule.ECAD · Agent failure · 1 report74
- 21The intent emitter writes side F on every sheet block whose parts all happen to sit on the front, and the placer reads that observed side as a declared one, so flippable parts can never flip. On the rp2350 board this left 18 parts without a pose instead of 4, while the intent checker reported 0 warnings.ECAD · Agent failure · 1 report74
- 22The oracle deleted 7 of 8 KiCad-locked vias (378 to 371) that every other cleanup keeps.ECAD · Agent failure · 1 report74
- 23The QFN and BGA fanouts never read the net-class and item-type scoped .kicad_dru clearance rules that the route, diff-pair, plane and oracle steps all honour. A fanout can lay an HV escape next to another HV net at the layer clearance instead of the 0.6 mm the rule asks for, and later steps then hold the rule against copper that is already too close. Found by reading code, and nobody has measured it on a corpus board yet.ECAD · Agent failure · 1 report74
- 24The QFN under-pad escape tests each via against pads grown with square corners, while check_drc grades the real pad shape, overstating clearance by up to 0.18 mm near a corner. On the fixture, 16 of 47 pads get dropped as no clear via offset, while with the grader's own check swapped in all 47 escape and both check_drc and kicad-cli find no violation.ECAD · Agent failure · 1 report74
- 25The router pinned board-edge clearance to the 0.2 mm fab floor but its plane check refilled under the old 0.05 mm rule, reported GND complete, skipped the strap, and the shipped pour was split in two.ECAD · Agent failure · 1 report74
- 26The router ripped a net the caller excluded, shipped it open, and its own gate marked the run ACCEPTED.ECAD · Agent failure · 1 report74
- 27When a multi-point net ends with a disconnected pad, the per-net log names the pad, but the end-of-run summary and both JSON summaries print pad ?. The log line itself says the final verdict lives in that summary. On a private 4-layer power board, 126 of 260 route logs from one 32-hour agent run had pad ? lines, including a QFN pin on U401, and the agent had to map coordinates back to pins by hand.ECAD · Agent failure · 1 report74
- 28A .kicad_dru rule keeps a pair's four nets on F.Cu with no vias, but the floorplan and assembly checks do not read that rule. Four placements, one with a reversed connector that cannot be routed on one layer at all, all print 'PASS, no violations' and 'buildable'. The router then leaves the nets open, so the plan looks fine right up until routing fails.ECAD · Agent failure · 1 report66
- 29A courtyard-scoped clearance rule in .kicad_dru that the tool cannot model keeps the verdict at INCOMPLETE forever, exit 4, while KiCad grades that rule fine. On one board it finds the rule met, on another it reports a 0.25 mm clearance against the 0.3 mm rule, but the tool prints the same verdict and score for both, so you cannot tell met from broken without running KiCad by hand. The ask is an opt-in to trust KiCad's own grade.ECAD · Agent failure · 1 report66
- 30A cover module's mounting hole is meant to screw into an enclosure boss past the board edge, and the tool has no way to say so. Every hole row is treated as a site on the board. A site past the outline is a defect for both the grader and the placer, so place_simple refuses the module with exit 4 and the cover reads not mountable. Neither the design brief nor mechanical.json has a key for an enclosure hole. The one workaround is to leave the hole out, and then nothing checks it.ECAD · Agent failure · 1 report66
- 31A cover's standoff, usually fixed as a mounting boss or M.2 standoff, is held only by a soft cost of 100 per mm of drift; place_simple prints 'seated as drawn and carried with it' and the check is only a WARN, so the board ends up where the card cannot be screwed down.ECAD · Agent failure · 1 report66
- 32A project relaxes the via ring to 0.07 mm inside one part's courtyard, with Board Setup at 0.1 mm. KiCad 10.0.7 applies it by position, but the tool's rule listing shows 1 of the 3 rules in the file and drops the two courtyard-scoped ones with no note that anything was skipped, and its DRC check flags the via KiCad allows. This is the third issue in two hours in this repo where custom rules quietly do not make it through.ECAD · Agent failure · 1 report66
- 33A shield can that is not drawn yet is a keep-out band for parts, but the router does not know about it, so tracks cross where the can wall will go. For a drawn can, nobody declares whether a gap in the fence is a real opening or just pad pitch. The proposal is one declaration of openings that the grader and the router both read.ECAD · Agent failure · 1 report66
- 34A user zones a group by the name in their groups file, which is not accepted, but the two errors they get do not say so, one pointing to a --list-groups flag check_floorplan does not have, then place_simple places anyway and exits 0, reporting the problem after it is done.ECAD · Agent failure · 1 report66
- 35AI-guided autorouting ran for an hour with little success, then KiCad crashed.ECAD · Agent failure · 1 report66
- 36board_score counts a broken coplanar promise above 0.01 mm, so three 50 ohm lines routed per the docs all fail even though Z0 is still 50.0 ohm and DRC is 0.ECAD · Agent failure · 1 report66
- 37check_assembly grades an unmodified human-placed lily58 NOT BUILDABLE because ten M2 holes are not classified as mounting holes.ECAD · Agent failure · 1 report66
- 38check_join grades a hand join CLEAN when its end sits 40 nm off a pad anchor. KiCad then measures the net 0.12 mm longer, which is more than the default 0.1 mm intra-pair tolerance.ECAD · Agent failure · 1 report66
- 39KiCad lets a differential pair couple tighter than board clearance through a custom rule scoped to coupled pairs. This auto-router marks that rule unsupported and raises the pair gap to the net-class clearance instead; on thin dielectrics a 90 to 100 ohm pair needs a gap below board clearance, so the routed pair comes out at a different impedance than specified.ECAD · Agent failure · 1 report 366
- 40No grader measures ground return vias. On a 10-layer test board with 383 signal vias and zero GND vias, board_score's 1,078 JSON keys contain nothing about return or stitching vias. The only count is console output from the step that adds them.ECAD · Agent failure · 1 report66
- 41On a board with the GND pour cut into 4 copper islands, kicad-cli lists 3 unconnected GND links, but the tool's check prints 'agrees with copper grading' and the board score says 1 join needed. The 'agrees' line is decided by net name, not by count. Worse, joining the open pad with one track makes the tool's count go up to 2 while KiCad's goes down to 2, so a fix reads as a regression and an agent optimizing that score would learn the wrong lesson.ECAD · Agent failure · 1 report66
- 42On an RF board, 119 of 205 top-side passives on the human layout share a row or column with a neighbour at the same orientation. The tool kept seed manages 28 of 207. Holding rows rigid made routing worse on three tries, so the gap stays open.ECAD · Agent failure · 1 report66
- 43One unreadable 3D model makes kicad-cli's GLB export exit 2, and "every part of the movie becomes a box." Separately, the flow movie routes with the corpus board's recorded chain, "so the flow movie films a different route, and possibly a different kept seed, from the board the run delivers." Seen on two runs.ECAD · Agent failure · 1 report66
- 44One unreadable 3D model makes kicad-cli's GLB export exit 2, and "every part of the movie becomes a box." Separately, the flow movie routes with the corpus board's recorded chain, "so the flow movie films a different route, and possibly a different kept seed, from the board the run delivers." Seen on two runs.ECAD · Agent failure · 1 report66
- 45PadClearanceModel refuses a 0.38 mm gap that check_drc and KiCad pass with 0 errors, because it never reads class-scoped .kicad_dru rules or the diff-pair gap.ECAD · Agent failure · 1 report66
- 46placement moved an 0603 into the Pico W antenna keep-out and called the board "buildable", while kicad-cli DRC flags it three times.ECAD · Agent failure · 1 report 166
- 47Routing all nets on an open weather station board laid +3V3 copper 0.075 mm from another net under a 0.1 mm rule. The input board had no violations; the reporter runs both the router's own DRC and kicad-cli DRC to show the difference.ECAD · Agent failure · 1 report66
- 48Routing tools record each invocation so runs can be replayed with no LLM, but none of the placement tools do. A placement run's inputs and commands live only in its work folder and the skill's transcript, so the ask is to save each AI-derived placement plan as a JSON manifest for deterministic reruns.ECAD · Agent failure · 1 report66
- 49Seven agent placement attempts on the 465-part TimIQ RF board produced six bolted-on workarounds, and even the first legal placement left 39 unrouted and 49 broken nets with power in the middle of the RF area.ECAD · Agent failure · 1 report 166
- 50The agent hands route_diff a 0.127 mm intra-pair skew budget that ends up only in console output and JSON, not in the project or a rules file, so no grader sees it; the skills tell you to hand-write KiCad rule syntax.ECAD · Agent failure · 1 report66
- 51The diff-pair router laid /STRAIN_S+ and /STRAIN_S- 0.07 mm apart under a 0.1 mm clearance on a smartknob board that went in DRC-clean.ECAD · Agent failure · 1 report66
- 52The drc lens runs check_drc at 0.1 clearance margin while board_score uses 0.05, so one line prints NO DRC VIOLATIONS FOUND and the other BLOCKING=1 for the same board.ECAD · Agent failure · 1 report66
- 53The ground pour net depends on the order nets appear in the board file, so swapping two footprint pins flips the plane from GND to AGND.ECAD · Agent failure · 1 report66
- 54The pre-placement fit check no longer runs in the flow, so place_simple places a plan the check would refuse and exits 4 only after placing, with a SOIC-16 with a 77 mm2 courtyard in a 25 mm2 zone just dropping out of the area sum with no finding, and 23 parts at 60 percent and 77 percent fill failing to fit on 4 of 4 seeds with the check saying nothing about either zone.ECAD · Agent failure · 1 report66
- 55The router and KiCad DRC disagree about a plated pad whose copper equals its drill, so tracks land 0.15 to 0.29 mm from the hole wall.ECAD · Agent failure · 1 report66
- 56The router can leave a short T junction that KiCad reports as track_dangling even though the copper is physically connected and there are no unconnected pads. A neighbouring track touching one end makes cleanup skip it. A related closed issue covered the same case and it was still reproducible on main.ECAD · Agent failure · 1 report66
- 57The ship clause ranks laps by blocking count while the progress clause ranks by unrouted plus broken, giving opposite orders over four laps, and no tool implements the documented opens-first order.ECAD · Agent failure · 1 report66
- 58Three tools, three ideas of how big a part is: the up-front warning says courtyard-less parts fall back to their pad box, the placer actually uses an estimate from the Fab body, silk, or pads, and the plan check budgets the pad box, so a user who believed the warning and wrote their own add_courtyards.py got courtyards 0.3 mm per side bigger, moving zone fill from about 50 percent to 69-72 percent and failing two zones.ECAD · Agent failure · 1 report66
How it fails
Engineering tools that address these errors
Sourced from public community reports. Costs and delays on individual entries are modeled estimates, not measurements.