The native Phase 2 boundary is approved and Phase 3 KiCad-native PCB
reader/writer work may proceed. The typed footprint and symbol-library
reader/writer proofs and shared footprint/symbol plotter-IR proofs are
implemented. WASM feasibility is demonstrated, but WASM packaging is not
approved; the remaining adapter findings are deferred to Phase 7.
Downstream pcb_a0 work remains outside this plan.
The durable ordering and ownership decision is recorded in
ADR-011.
| Surface | Native core | WASM | Write/parity evidence |
|---|---|---|---|
| S-expression scan/build/patch | Yes | Yes | Rack L0/L1 corpus, semantic reparse, stable second write |
| Standalone footprint view/edit | Yes | Yes | Unknown-byte preservation and focused-property writeback |
| Symbol-library iterator/edit | Yes | Yes | Python summary oracle, flag replacement/insertion, stable write |
| Footprint plotter IR | Yes | Yes | Python vectors; graphics, strokes, pads, drills, point bounds |
| Library-symbol plotter IR | Yes | Yes | Python vectors; body, pins, and inheritance |
kicad-monkey-core has no normal third-party dependency,
platform API, FFI type, or package-owned unsafe code. Source views own
spans and borrow caller bytes. Typed hot paths never build a generic
tree for the complete file; selected forms are materialized only when
their local semantics require it.
kicad-monkey-contracts contains TypeSpec-generated DTOs
and depends only on Serde. Handwritten semantic validators sit beside
generated structural types and prevent contradictory union states.
kicad-monkey-wasm is a thin operation adapter over core and
contracts. Source and auxiliary request bytes are separate arrays.
Large result payloads are returned out of band from small metadata
envelopes; no base64 is used.
wn-dev-std 2026.8.12. The Rust
structural ratchet, warnings-denied Clippy, rustfmt, complete Cargo
tests, and real wasm32 execution pass. No provisional standards
exception remains.
WASM inputs are borrowed slices. Read operations serialize one result
buffer. Edit and plot operations allocate the produced KiCad or JSON
bytes plus a separate metadata buffer. Paired-output objects retain
compatibility clone getters and also expose
takeOutputBytes. Complete non-empty execution evidence for
every paired result remains a deferred packaging gate.
Locked release wasm32 builds before JavaScript glue, compression, or
wasm-opt measure 292,798 bytes for sexpr, 409,815 bytes for
footprint, 556,646 bytes for symbol, and
787,825 bytes with every default feature. The three operation families
compile independently under isolated feature checks; actual isolated
artifact build/link evidence remains a deferred packaging gate. The
default remains an all-operations development artifact.
PlotterOperation type for footprint and symbol documents
and remove the symbol adapter's per-operation JSON round-trip.
max_output_bytes to the read contract, serialize through a
bounded writer, and return a structured resource-limit result without
partial summaries.
cargo check feature test with actual build/link evidence
when WASM packaging resumes. Until then, describe the current evidence
as independent feature compilation.
kicad-cruncher and Rack parity remain the
product critical path. Linux and real-browser evidence apply only to
later artifacts that claim those platforms.
Approve the Phase 2 native boundary and authorize Phase 3 KiCad-native
PCB reader/writer work. Record WASM as feasibility demonstrated and
packaging not approved; the four findings above must close before future
WASM expansion. No public Cargo compatibility promise is created by this
decision; all crates remain publish = false during
incubation.