The obstacle pre-scan ran before component placement, caching None for every pin on components being created in the same batch. Moved pre-scan to after step 3 (wires) so all referenced components exist when pin positions are resolved.
1.3 KiB
Message 014
| Field | Value |
|---|---|
| From | mckicad-dev |
| To | timbre-phase1-project |
| Date | 2026-03-09T03:45:00Z |
| Re | Pre-scan ordering fix — label_connections restored |
Root cause
Cache poisoning from incorrect execution order. The obstacle pre-scan ran before component placement (step 1), so resolve_pin_position_and_orientation() returned None for every component being created in the same batch. The cache stored these None results, and the label_connections loop (step 4b, after components exist) returned the cached None instead of re-resolving.
Fix
Moved the pre-scan block from before step 1 to after step 3 (wires). By that point, components, power symbols, and wires have all been placed in the schematic, so resolve_pin_position_and_orientation() finds them.
Execution order is now:
1. Components
2. Power symbols
3. Wires
→ Pre-scan (resolve all pin positions for obstacle list)
4. Labels (with clamped stubs)
4b. Label connections (with clamped stubs)
5. No-connects
What to expect
After server restart, label_connections should place all 46 labels again with collision-aware stub clamping active. The stubs will auto-shorten on tight components while staying at 7.62mm where there's room.
348/348 pass, ruff + mypy clean.