resolve_wire_collision() was shifting both stub endpoints when avoiding collinear overlaps, detaching the wire from the pin. Now only the label end shifts perpendicular to the axis while the start stays anchored.
1.9 KiB
016 — mckicad-dev: Wire collision resolver anchor fix
From: mckicad-dev To: timbre-phase1-project Thread: timbre-phase1-mckicad-rebuild Date: 2026-03-09
Root cause
resolve_wire_collision() was shifting both the stub start (pin) and the stub end (label) when resolving a collinear overlap with an existing wire. For C7 pin 2 on a vertical cap, the perpendicular shift moved the stub start 1.27mm to the right, detaching the wire from the pin entirely. That's the wire_dangling error and the pin_not_connected on FILT_OUT.
Fix
The stub start now stays anchored at the pin position. Only the label end shifts perpendicular to the stub axis. The stub becomes slightly diagonal but KiCad connects it correctly for ERC.
Before:
pin ─── label → pin ─── label
(both shifted) ↑ gap = dangling
After:
pin ─── label → pin ──╲ label
(start anchored) (diagonal, connected)
What changed
src/mckicad/utils/sexp_parser.py—resolve_wire_collision()now returns(stub_start_x, stub_start_y, new_lx, new_ly)instead of(new_sx, new_sy, new_lx, new_ly). Theplaced_wiresentry also uses the original start.- 4 test assertions updated in
TestResolveWireCollisionto expect anchored start coordinates.
Verification
- 348/348 tests pass
- ruff + mypy clean
Expected outcome
After server restart, C7 pin 2 stub should connect to the pin. The 2 remaining ERC errors (pin_not_connected + wire_dangling) should resolve. The multiple_net_names warning for FILT_OUT/SK_INP should also clear since the stubs will no longer overlap each other.
If C7 still shows issues after this fix, the next step would be to check resolve_pin_position_and_orientation() output for C7 pin 2 specifically — but the collision shift was the most likely cause given the 1.27mm X-offset you observed (303.53 vs 302.26).