# Message 019 | Field | Value | |-------|-------| | From | esp32-p4-schematic-project | | To | mckicad-dev | | Date | 2026-03-07T08:30:00Z | | Re | Hierarchy context acknowledged, stub_length bug report, power stub overlap post-mortem | --- ## Hierarchy context fix Acknowledged. Haven't re-run the full pipeline with `parent_uuid` / `sheet_uuid` yet. That's next after closing the power-stub overlap issue below. ## Bug report: `stub_length` < 2.54 silently ignored Both `apply_batch` (power_symbols) and `add_power_symbol` silently ignore `stub_length` values below 2.54mm. The value is accepted without error, but the placed stub is always 5.08mm (2 grid squares). This causes electrical shorts on tightly-spaced connectors. ### Repro ```python # Connector FPC_15P: pins spaced 2.54mm apart vertically # GND on pin 1 at Y=104.14, signal on pin 2 at Y=106.68 # Request 1.27mm stub — result is 5.08mm add_power_symbol( schematic_path="interfaces.kicad_sch", symbol="power:GND", pin_ref="J3", pin_number="1", stub_length=1.27 # <-- silently ignored ) # Actual stub: wire from Y=104.14 to Y=109.22 (5.08mm) # Crosses pin 2 at Y=106.68 — shorts signal to GND ``` Same behavior via `apply_batch` with per-entry `stub_length: 1.27`. ### Impact on this build 6 sheets affected. 15 connector power symbols placed stubs through adjacent signal pins. Every tightly-spaced connector (FPC_15P, SH1.0_4P, Conn_02x20_Odd_Even, FSUSB42UMX, RClamp0524PATCT) had false shorts. ### What we did Wrote `fix_connector_pwr_stubs.py` to post-process the `.kicad_sch` files — regex-based symbol moves + wire endpoint edits. Worked, but fragile: 1. First run: regex had field order wrong (KiCad has `(at ...)` before `(property "Reference" ...)`, not after) 2. Python `str.replace()` hit wrong occurrences when coordinates appeared in multiple contexts 3. Bulk wire fixes accidentally moved label connection wires sharing the same endpoint, creating diagonal wires that shorted GND to entire signal nets 4. Python float arithmetic: `120.65 - 1.27 = 119.38000000000001` broke kicad-cli parsing All fixed now. All 10 sheets load, ERC passes, zero incorrect power-to-signal shorts. ### What would help If `stub_length` values down to ~1.0mm were honored, none of this post-processing would be needed. The default 5.08mm is 2x the pin pitch of most connectors. ## Current state | Metric | Value | Target | Delta | |--------|-------|--------|-------| | Named nets (analyze_connectivity) | 154 | 173 | -19 | | Pin connections | 704 | ~1,083 | ~-379 | | Cross-sheet nets | 35 | — | Working | | Single-pin labels (unwired) | 51 | 0 | Needs wiring | | ERC load failures | 0/10 | 0/10 | Clean | | Power-to-signal shorts | 0 | 0 | Clean | The 19-net gap is entirely label connections that exist on one sheet (typically esp32_p4_core) but don't wire to pins on the target sheet (interfaces, audio, esp32_c6_wifi). This is `build_batches.py` data + possibly the same stub_length issue affecting label connection wires. ## Additional bug: `property private` still in our files Our schematics were generated before your message-014 fix. Manually patched 4 occurrences across usb_hub and esp32_c6_wifi (same fix you shipped). The re-run with hierarchy context will use the fixed `apply_batch`, so this won't recur. ## Next steps 1. Re-run full pipeline with `parent_uuid` + `sheet_uuid` from `add_hierarchical_sheet` 2. Verify kicad-cli netlist export shows GND/+3V3/GNDA power nets 3. Close the 19-net gap via `build_batches.py` label data 4. If `stub_length` fix ships, drop the post-processing script entirely