The bridge no longer crosses its wires
The Node-Python protocol had no request IDs. After any timeout, the next command was silently resolved with the previous command's late result, off by one for every response until another timeout resynchronized (#373 — reporter's diagnosis was exact; implementation adapted from #371 by @kerby2000). Tool calls now carry correlated IDs end to end, and stale responses are discarded with a log line. The MCP transport also connects before Python spawns, so clients no longer time out against a silent server during the up-to-two-minute pcbnew warm-up (#377).
Two file-corruption classes fixed
add_symbol_propertydropped a closing paren on every call and could promote a unit symbol to a top-level sibling — silent structural corruption a paren count cannot see (#362, @karu2003). The newvalidate_schematic/validate_symbol_librarytools detect exactly this damage class.- S-expression escaping is now symmetric: reads (#336) and writes (#324, diagnosed by @PaulHubiss) share one escape-aware implementation. 419 of KiCad's own stock symbol files carry values that the old code truncated or split.
8 new tools (169 total, 15 categories)
validate_schematic, validate_symbol_library, list_library_table, remove_library_table_entry, set_library_table_uri, set_symbol_pin_type, find_duplicate_symbols, backannotate_footprints — all by @karu2003. #359 (@AmirF194) additionally registered 15 existing symbol tools into search_tools.
Also in this release
autoroutestages work files in a temp directory and cleans up on every exit; a killed run reports "terminated externally" instead ofexit code 4294967295; stale.sesfiles can no longer be imported as fresh output (#249, scoped by @Dewieinns' traces)add_layeractually adds inner copper layers — it previously wrote to non-copper layer IDs and renamed F.SilkS (#222)add_gnd_stitching_viastreats arcs as arcs, not chords (#192, diagnosed by @NiNjA-CodE)- Placed symbols inherit the library's default Footprint (#300, implementation by @stefangordon)
sync_schematic_to_boardmatches by symbol UUID, not just refdes (#250)- JLCPCB: new upstream
source-db-v2schema decoded (#352, @stefanobaldo); unavailable parts DB degrades gracefully (#264, @fage2022) - Schematic renders always have a working rasterizer via pymupdf (from #274/#277 by @stefangordon)
- IPC sessions no longer silently pinned to SWIG (#369, @Vikrammel)
setup-macos.sh --verifyfails when requirements are missing instead of passing on a server that cannot start (#350, @francisrath) — note:--verifynow exits 1 in that case- Per-process log files end the Windows rotation collision between concurrent servers (#373)
Behavior changes
autorouteno longer leaves.dsn/.sesfiles in the project directory; passkeepArtifacts: trueto keep themadd_symbol_propertyinherits position/visibility when omitted on update, instead of resetting themsetup-macos.sh --verifyexits nonzero on missing requirements
Full details in CHANGELOG.md.