KiCad - the KiCad Bridge
Public Made by Adomby adom
Drive your own KiCad from an AI, in the background: open every editor, read the whole board as data (the EDA Bridge Standard board model), stack-up, part heights, netlists, place, route, pour, DRC and exports.
kicad_route_net refuses drc_incomplete when only WARNING types (silk_overlap, silk_over_copper) hit KiCad's 199-per-type cap
Version: KiCad Bridge 1.0.104 (KiCad 10.0.4, Windows 11), called by adom-aiflow 0.2.56 land route with socketPath on a task-owned pcbnew.
What I ran: kicad_route_net on a 346-part board (158 WS2812B-2020 LEDs, each with a 100 nF) right after live placement, before any copper.
Expected: the trace lands; the board had 0 DRC errors.
Got: errorCode: drc_incomplete, "DRC violation lists may be capped; cannot certify the error delta. No live copper was changed". The live snapshot had 199 silk_overlap and 199 silk_over_copper warnings (the footprints' default reference text and two visible custom fields, MPN and Manufacturer, over 346 small parts) and 499 unconnected items. _report_limits (handlers/live_routing.py) marks a type capped at 199 whatever its severity, and _new_errors refuses when any type is capped, although it compares only severity == "error" violations.
Why it matters: cosmetic silkscreen warnings on a dense board block every live route until the silkscreen is cleaned up first, which is out of order for AI Flow (silkscreen is a later step). I worked around it by saving, closing my own editor, hiding the fields and moving references offline with pcbnew, reopening and adopting the board.
Suggested fix: count a type as capped only if it can hold errors, i.e. compute capped from types that have at least one severity: error violation (or that the project's severity map grades as error); warnings at the cap cannot hide a new error of another type. Keep violationReportMayBeTruncated in the reply for information.
counts = Counter(v.get("type") for v in violations)
err_types = {v.get("type") for v in violations if v.get("severity") == "error"}
capped = sorted(str(k) for k, n in counts.items() if k in err_types and n >= (499 if k == "clearance" else 199))
One caveat: an error type at the cap could still hide new errors of the same type, so the check stays for error types.
1 Reply
Log in to reply.