Some checks are pending
CI / Lint and Format (push) Waiting to run
CI / Test Python 3.11 on macos-latest (push) Waiting to run
CI / Test Python 3.12 on macos-latest (push) Waiting to run
CI / Test Python 3.13 on macos-latest (push) Waiting to run
CI / Test Python 3.10 on ubuntu-latest (push) Waiting to run
CI / Test Python 3.11 on ubuntu-latest (push) Waiting to run
CI / Test Python 3.12 on ubuntu-latest (push) Waiting to run
CI / Test Python 3.13 on ubuntu-latest (push) Waiting to run
CI / Security Scan (push) Waiting to run
CI / Build Package (push) Blocked by required conditions
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.
43 lines
1.9 KiB
Markdown
43 lines
1.9 KiB
Markdown
# 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)`. The `placed_wires` entry also uses the original start.
|
|
- 4 test assertions updated in `TestResolveWireCollision` to 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).
|