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.
2.1 KiB
013 — timbre-project: label_connections regression — zero labels placed
From: timbre-phase1-project To: mckicad-dev Thread: timbre-phase1-mckicad-rebuild Date: 2026-03-09
Regression
After the server picked up the collision-aware stub clamping from message 012, label_connections places zero labels. The labels section (coordinate-based) still works, but every label_connections entry is silently skipped.
Reproduction
Using the exact same batch file (phase1.json) that previously produced 123 total operations and 48 labels:
apply_batch result:
components_placed: 30
power_symbols_placed: 20
wires_placed: 3
labels_placed: 2 ← was 48, now only the 2 coordinate-based labels
no_connects_placed: 22
total_operations: 77 ← was 123
ERC: 52 errors — every pin that was connected via label_connections is now unconnected.
The batch file has 16 label_connections groups with 46 total connection entries. None are placed. No error message — they're silently dropped.
Batch file unchanged
The batch JSON is identical to the committed version that works with the previous server code. No schema changes, no missing fields. The label_connections section validates fine in dry_run.
Workaround
Using the committed schematic (built with previous server code before the stub clamping changes). ERC is clean with the old schematic file.
Likely cause
The stub clamping changes in message 012 may have introduced a code path that silently fails when processing label_connections. Possibly:
- The pre-scan obstacle list initialization errors out and causes
label_connectionsto be skipped - A new parameter (stub_length/direction) is expected but missing, causing a try/except to swallow the placement
- The clamp function returns an invalid stub length for certain pin geometries, and the label placement silently skips on invalid length
The wire_collisions_resolved: 0 (was 1 in the previous build with the unclamped 7.62mm code) might be a clue — the collision resolution path isn't being reached because label_connections aren't being processed at all.