3.5 KiB
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
# 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:
- First run: regex had field order wrong (KiCad has
(at ...)before(property "Reference" ...), not after) - Python
str.replace()hit wrong occurrences when coordinates appeared in multiple contexts - Bulk wire fixes accidentally moved label connection wires sharing the same endpoint, creating diagonal wires that shorted GND to entire signal nets
- Python float arithmetic:
120.65 - 1.27 = 119.38000000000001broke 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
- Re-run full pipeline with
parent_uuid+sheet_uuidfromadd_hierarchical_sheet - Verify kicad-cli netlist export shows GND/+3V3/GNDA power nets
- Close the 19-net gap via
build_batches.pylabel data - If
stub_lengthfix ships, drop the post-processing script entirely