Closed bug report

Router ignores no-net pads as obstacles and emits escape stubs below spec.track

Ray · ·closed by John Lauer

Versions: AI Flow 0.1.25 installed binary; native KiCad 10.0.2; Linux. STM32F407 LQFP144 prototype, many intentionally unconnected GPIO pads.

The router reports 0 unrouted after4 passes, but gate reports31 shorts, many against MCU pads with no net. Source inspection finds stamp_pads assigns unknown/no-net pads nid=-1, the same value as empty space. These pads are physical copper and must remain foreign obstacles. Example: pad132 of U1 has no net and VCC tracks run straight through it; GND/VCC vias also collide with NC pads.

Second related contract violation: spec.track=.25 generates98 segments at.20mm (escape stubs), below the chosen minimum. Rules::from_spec changes track but does not change/expose stub=.2. Escape width must be separately configurable and validated against the manufacturing minimum, or inherit track.

Do not fix the first problem by tying NC pins together or deleting their copper. I am testing a task-local router example adapter that gives each no-net pad a unique obstacle identity in memory only, filters these identities from the plan, and sets stub=track. The source board/netlist stays unchanged. Original failed plan and native gate report preserved locally. This is a tooling trial, not a clean result.

2 Replies

Ray ·

Additional findings from the same compact F407 trial:

  1. Via-in-pad is an implicit fallback. The candidate passed native DRC (0 errors / 0 opens) but had five distinct via-drill locations intersecting SMT capacitor pads. We require ordinary both-side tented vias, not filled/capped via-in-pad fabrication. A board-level allowViaInPad: false should be the default or an explicit fabrication decision, and it must govern VIP cells, terminal layer changes, and plane-stub fallback. Our task-local adapter rejects same-net SMT-pad intersections in via_clear_exact; the resulting candidate audit finds zero via holes in SMT pads, but routing closure is still in progress.

  2. A ripped net can disappear from a nominally closed plan. In one higher-bottom-cost run the router reported 0 failed connections, while PA5 and PA6 had no entries at all in the emitted plan. Native gate correctly reported both nets open. The run restored a best intermediate snapshot after rip-up. I added a local completeness guard: any non-plane net with >=2 clusters and no remaining routes must count as failed, rather than retaining an empty failure list. This is only a guard, not a substitute for full connected-component validation.

  3. One emitted plan contains duplicate same-net vias at exactly the same coordinate. Native output should deduplicate by position, layer span, net and geometry, and measure unique physical vias.

The native gate remains authoritative; none of these rejected candidates have been landed in the live editor. These are task-local experiments, not changes to the installed 0.1.25 binary or a published fix.

John Lauer ·

Published and installed from insiders: adom-aiflow0.1.27 (and adom-fields0.3.1 for input identities). Source and registry publication both completed; installed hashes match the tested builds.

No-net pads use an obstacle identity distinct from the empty-grid sentinel, without inventing a net. Escape stubs inherit track width and respect minTrackWidth; a clamp is disclosed in a hint. Regression tests cover orthogonal/diagonal/via blocking and width contracts.

Release notes: https://wiki.adom.inc/adom/adom-aiflow/files/docs/release-0.1.27.md Validation records: /home/adom/project/adom-aiflow-release-audit/ .

John Lauer closed this ·

Log in to reply.