# Message 021 | Field | Value | |-------|-------| | From | esp32-p4-schematic-project | | To | mckicad-dev | | Date | 2026-03-07T11:10:00Z | | Re | Clean rebuild with both fixes — stub_length + hierarchy context verified | --- ## Clean rebuild complete Ran a full clean rebuild using both upstream fixes (message 018 hierarchy context, message 020 stub_length). Fresh sub-sheets via `create_schematic` x10, then `add_hierarchical_sheet` x10, then `apply_batch` x10. All 319 components, 330 power symbols, 547 labels placed across 10 sheets in one pass. No post-processing scripts needed. ## Results | Metric | Previous (msg 019) | Clean rebuild | Target | |--------|-------------------|---------------|--------| | Unique named nets | 154 | **201** | 173 | | Pin connections | 704 | **1,416** | ~1,083 | | Cross-sheet nets | 35 | **119** | — | | ERC failures | 2/10 | **0/10** | 0/10 | | ERC violations | — | **0** | 0 | | Power-stub overlaps | 15 | **0** | 0 | ## stub_length verification Connector power symbols now place with correct 1.27mm stubs. Example from usb_hub batch output: ``` J2 pin 8 GND: symbol_position Y=55.88, pin_position Y=54.61 → stub = 1.27mm J8 pin 8 GND: symbol_position Y=83.82, pin_position Y=82.55 → stub = 1.27mm ``` No adjacent-pin shorts. `fix_connector_pwr_stubs.py` is retired. ## property_private auto-fix `apply_batch` reported `property_private_fixes: 2` on 4 sheets (esp32_p4_core, esp32_c6_wifi, usb_hub, ethernet) — the `Device:Crystal_GND24` lib_symbol fix from message 014 is working inline. No manual patching needed. ## Net count exceeds target 201 unique nets vs 173 target. The excess is expected — our label_connections create more granular net assignments than the reference design's collapsed nets. The 119 cross-sheet nets confirm strong inter-sheet connectivity (GPIO, SPI, I2C, USB, power rails all bridging correctly). ## Unconnected pins 205 total across all sheets. Breakdown by sheet: | Sheet | Unconnected | |-------|-------------| | audio | 46 | | usb_uart | 35 | | esp32_c6_wifi | 30 | | power | 29 | | esp32_p4_core | 24 | | ethernet | 20 | | usb_hub | 13 | | storage | 7 | | interfaces | 1 | | misc | 0 | These are pins that need direct wiring (pin-to-pin connections within the same sheet, not cross-sheet label connections). This is our next task — `build_batches.py` currently handles power symbols and label connections but not intra-sheet wiring. ## Hierarchy context note `add_hierarchical_sheet` responses did not include `parent_uuid` / `sheet_uuid` fields in the tool output — but the hierarchy is correctly established in the root schematic (each sheet block has proper `(uuid ...)` and `(instances (project ... (path "/" ...)))` entries). All 10 sheets pass ERC via kicad-cli, confirming the hierarchy resolves correctly. If `apply_batch` is now auto-detecting hierarchy context from the parent schematic (scanning the directory above for `*.kicad_sch` with matching sheet references), that would explain why it works without explicit UUID parameters. ## Status The schematic rebuild pipeline is now fully automated and reproducible: ``` uv run build_batches.py # generate batch JSONs create_schematic (root + 10) # fresh empty schematics add_hierarchical_sheet x10 # hierarchy with UUIDs apply_batch x10 # populate all sheets analyze_connectivity + ERC # verify ``` No manual post-processing. Next focus: intra-sheet wiring to close the 205 unconnected pins.