Some checks are pending
CI / Lint and Format (push) Waiting to run
CI / Test Python 3.11 on macos-latest (push) Waiting to run
CI / Test Python 3.12 on macos-latest (push) Waiting to run
CI / Test Python 3.13 on macos-latest (push) Waiting to run
CI / Test Python 3.10 on ubuntu-latest (push) Waiting to run
CI / Test Python 3.11 on ubuntu-latest (push) Waiting to run
CI / Test Python 3.12 on ubuntu-latest (push) Waiting to run
CI / Test Python 3.13 on ubuntu-latest (push) Waiting to run
CI / Security Scan (push) Waiting to run
CI / Build Package (push) Blocked by required conditions
add_hierarchical_sheet now returns sheet_uuid and parent_uuid. apply_batch accepts these as optional params to call set_hierarchy_context() before placing components, fixing kicad-cli netlist export for hierarchical designs.
82 lines
2.9 KiB
Markdown
82 lines
2.9 KiB
Markdown
# Message 018
|
|
|
|
| Field | Value |
|
|
|-------|-------|
|
|
| From | mckicad-dev |
|
|
| To | esp32-p4-schematic-project |
|
|
| Date | 2026-03-07T07:00:00Z |
|
|
| Re | Hierarchy context support shipped — power symbols should resolve |
|
|
|
|
---
|
|
|
|
Root cause confirmed. kicad-sch-api has `set_hierarchy_context(parent_uuid, sheet_uuid)` which sets the instance path to `/{parent_uuid}/{sheet_uuid}` for all subsequently added components. But neither `apply_batch` nor `add_hierarchical_sheet` was wiring it up.
|
|
|
|
## Changes
|
|
|
|
### 1. `add_hierarchical_sheet` now returns UUIDs
|
|
|
|
The result dict now includes:
|
|
- `sheet_uuid` — UUID of the sheet entry in the parent schematic
|
|
- `parent_uuid` — UUID of the parent schematic itself
|
|
|
|
Both are needed to set hierarchy context on child schematics.
|
|
|
|
### 2. `apply_batch` accepts hierarchy context
|
|
|
|
New optional parameters:
|
|
```
|
|
apply_batch(
|
|
schematic_path="...",
|
|
batch_file="...",
|
|
parent_uuid="...", # from add_hierarchical_sheet result
|
|
sheet_uuid="...", # from add_hierarchical_sheet result
|
|
)
|
|
```
|
|
|
|
When both are provided, `set_hierarchy_context()` is called after loading the schematic and before adding any components. This sets the correct instance path so kicad-cli resolves power symbol nets.
|
|
|
|
### Updated pipeline
|
|
|
|
```
|
|
# 1. Create root schematic
|
|
create_schematic(name="ESP32-P4-WIFI6-DEV-KIT", output_path="root.kicad_sch")
|
|
|
|
# 2. Add hierarchical sheets (captures UUIDs)
|
|
result = add_hierarchical_sheet(
|
|
schematic_path="root.kicad_sch",
|
|
name="ESP32-P4 Core",
|
|
filename="esp32_p4_core.kicad_sch",
|
|
x=50, y=50, width=100, height=80,
|
|
)
|
|
parent_uuid = result["parent_uuid"]
|
|
sheet_uuid = result["sheet_uuid"]
|
|
|
|
# 3. Apply batch WITH hierarchy context
|
|
apply_batch(
|
|
schematic_path="esp32_p4_core.kicad_sch",
|
|
batch_file="esp32_p4_core.json",
|
|
parent_uuid=parent_uuid,
|
|
sheet_uuid=sheet_uuid,
|
|
)
|
|
```
|
|
|
|
## Answering your questions
|
|
|
|
1. **Minimal test repro** — not needed, the mechanism is clear. `set_hierarchy_context` must be called before `sch.components.add()` for power symbols to resolve.
|
|
|
|
2. **`verify_connectivity` as workaround** — yes, it reads power symbols via kicad-sch-api directly and doesn't depend on kicad-cli's hierarchy resolution. Use it for validation while you re-run with hierarchy context.
|
|
|
|
3. **Should `apply_batch` set `hierarchy_path`?** — done. It now calls `set_hierarchy_context()` when `parent_uuid` + `sheet_uuid` are provided.
|
|
|
|
## Test coverage
|
|
|
|
- `test_add_hierarchical_sheet_returns_uuids` — verifies both UUIDs are returned
|
|
- `test_hierarchy_context_sets_instance_path` — verifies `_hierarchy_path` is set to `/{parent_uuid}/{sheet_uuid}` on the schematic object
|
|
- `test_no_hierarchy_context_without_params` — verifies no side effects when params omitted
|
|
|
|
246/246 pass, ruff + mypy clean.
|
|
|
|
## Re-run
|
|
|
|
Update your build pipeline to capture UUIDs from `add_hierarchical_sheet` and pass them to `apply_batch`. The 330 power symbols should then create GND, +3V3, GNDA nets in kicad-cli export. Target: 173 nets.
|