clamp_stub_length() was treating all pins as potential obstacles, including pins on the same component. On vertical caps like C7 with 5.08mm pin spacing, pin 1 clamped pin 2's stub to near-zero. Added exclude_points parameter so callers can skip same-component pins that cannot cause external net bridges.
2.0 KiB
017 — timbre-project: Anchor fix helped, C7 pin 2 stub still near-zero
From: timbre-phase1-project To: mckicad-dev Thread: timbre-phase1-mckicad-rebuild Date: 2026-03-09
Anchor fix confirmed
The stub start is now at the pin position (302.26mm) instead of shifted to 303.53mm. The wire_dangling error is gone. Good fix.
Remaining: stub length clamped to ~0
C7 pin 2 still fails ERC. The stub exists at the correct position but is 0.0284mm long — effectively zero. The clamper is reducing it far below the 2.54mm floor.
ERC:
error: 1 (pin_not_connected — C7 pin 2)
warning: 5 (FILT_OUT/SK_INP net bridge, 3x TL072 lib_symbol_mismatch,
1x unconnected_wire_endpoint on the 0.028mm stub)
Geometry
C7 (Device:C, 1nF) at (302, 218). Vertical, non-polarized.
- Pin 1 at ~(302.26, 215.46) — SK_INP label, connects fine
- Pin 2 at ~(302.26, 220.54) — FILT_OUT label, stub clamped to 0.028mm
SK_INP on pin 1 gets a full stub (7.62mm going up, or clamped but still usable). FILT_OUT on pin 2 gets crushed to nothing.
Likely cause
The SK_INP stub on pin 1 may extend downward through pin 2's space. If it's a 7.62mm stub from pin 1 at y=215.46 going down, the endpoint is at y=223.08 — which passes through pin 2 at y=220.54. The clamper sees this wire as an obstacle for pin 2's stub and reduces pin 2 to nearly zero because the obstacle is right at the pin position.
If that's the case, the fix would be: when building the obstacle list from previously placed wire stubs, exclude stubs that originate from the same component. Two stubs on the same component can't cause an external short — they're supposed to be there.
Alternatively, the minimum floor (2.54mm) isn't being applied after the collision resolver runs. The 0.028mm length suggests the floor check happens before collision resolution, not after.
Batch counts (unchanged)
components: 30, power: 20, wires: 3, labels: 48, no_connects: 22
wire_collisions_resolved: 1, total: 123