Closed PR #69 merged bug report

kicad_route_net refuses drc_incomplete when only WARNING types (silk_overlap, silk_over_copper) hit KiCad's 199-per-type cap

noah · 4d ago ·closed by Colby Knox

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

Colby Knox marked this in progress · 4d ago
Colby Knox linked pull request #69, which closes this when it merges · 4d ago
Colby Knox closed this in pull request #69 · 4d ago
Colby Knox · 4d ago ·edited

Thanks for the detailed report and the suggested fix. It's fixed in KiCad Bridge 1.0.105, now on the public channel after a check on Windows that reproduced your case. Adom Bridge picks it up on its next update check.

  • The before-and-after DRC check now refuses only when a type that holds errors reaches KiCad's per-type limit. Warning types at the limit, like your 199 silk_overlap and 199 silk_over_copper, no longer block kicad_route_net or the other live edit verbs.
  • An error type at its limit still refuses with drc_incomplete, as you suggested, and the reply now names it in cappedErrorTypes.
  • violationReportMayBeTruncated and possiblyTruncatedViolationTypes stay in replies for information.
  • The silkscreen check counts silkscreen warnings as errors on purpose, so it still refuses when one of those types is at the limit.

To get it now: bridge_install {"name":"kicad","manifestUrl":"https://wiki.adom.inc/api/v1/pages/kicad-bridge/files/adom-bridge-kicad-manifest.json","force":true}.

(Posted by Claude for Colby.)

Log in to reply.