v0.8.0
Konnect v0.8.0
The community release. Eighteen of the changes below came from outside contributors, and the release exists in the shape it does because one of them keeps holding it to a higher standard.
🙌 Thank you, @neusse
Since v0.6.0, @neusse has: found the sync corruption that silently destroyed footprint artwork (#244) by running an end-to-end benchmark and reading the artifacts instead of the success messages; caught our review tools approving DRC-dirty boards (#247); audited every KiCad 10 CLI claim we'd gotten wrong (discussion #224); written the developer documentation set that now lives in docs/ (#306); and maintained an improvement backlog rigorous enough that the project's ROADMAP is now built on it. The truth-and-evidence discipline this project runs on — verdicts need evidence, responses derive from results, fixtures come from real KiCAD — crystallized in no small part from his benchmarks proving where we fell short. If you get value from Konnect, his work is a large part of why.
Also in this release's credits: @pauliuszaleckas (7 PRs — the shared connectivity index, IPC-first board info, ERC/DRC item preservation, and more), @anyn99 (7 PRs fixing every schematic bug he reported), @nordic-style (the consolidated parameter-honesty series and the corruption repair tool), @triglav-modular (3 PRs + the set_board_size corruption report), @jctrouble (live IPC zones, first contribution), and @TWT233, @perara, @komar3456, @simachines, @omelia-iliffe, @TriodeGirl for reports and fixes throughout.
Repair boards damaged by v0.4.0–v0.6.1 (#294, fixes the aftermath of #244)
New tool repair_corrupted_footprints detects the exact corruption signature the old sync left behind — anonymous pads with empty layer sets where footprint artwork used to be — restores each footprint from its library while preserving placement, identity and pad nets, and applies everything in one KiCad undo commit. Verified against the real thing: we rebuilt the v0.6.1 binary, used it to corrupt a 68-footprint board live (848 phantom pads, zero graphics), and this tool repaired all 68 — the saved file matches the pristine original per reference. Dry-run by default; apply requires the returned plan revision. By @nordic-style.
Two long-standing silent failures, fixed
set_board_sizecorrupted Edge.Cuts on every call since the first release (#314): it appended a new outline rectangle instead of replacing the old one — boards accumulated outlines and failed DRC as self-intersecting while the tool reported success. Both paths now replace; outlines that aren't plain segments refuse untouched; the response reportsreplaced_segmentsfrom what was actually removed. If you have a board with stacked outlines: run the fixed tool once, or delete the extra rectangles in pcbnew.move_connectednever moved wires (#315): it silently delegated to a plain symbol move and reported the connections preserved. It now refuses with an error namingmove_schematic_componentuntil the real wire-carrying move exists (tracked with #120). Its dead parameters are removed from the schema.
Honest schemas, enforced by CI (#285 series, issue #251)
Every parameter a tool's schema declares is now verified by a catalogue-wide test to actually reach the implementation. In the same series: export tools apply their advertised options (Gerber layer selection with a production-only default, position-file units/side, PDF/SVG color and theme options), eight inert parameters were removed with a migration guide (docs/API_MIGRATIONS.md), routing tools validate the requested board is the active one, open_project verifies the requested board is actually open, and the KiCad UI health check is bounded by its timeout. The guard caught its first real bug — in the maintainer's own code — within an hour of merging. By @nordic-style.
Schematic fixes (mostly by the people who reported them)
- Sheet pins carry their rotation — a missing angle made the whole root schematic unloadable (#303 → #317 by @triglav-modular)
- Duplicated sheets get their own item UUIDs (#288 → #310), sheet names/files move with the sheet (#287 → #309), no-op edits succeed idempotently (#292 → #307), text justification is controllable (#286 → #308),
create_symbolreports resolved pin positions (#293 → #312),get_schematic_viewreturns the SVG it renders (#290 → #313), library registration resolves project directories correctly (#289 → #311) — all by @anyn99 - Power symbols resolve in the net graph (#262) and all connectivity tools now share one
ConnectivityIndex(#323) — unit-aware pin resolution everywhere, by @pauliuszaleckas batch_add_wirerefuses an element missing a coordinate instead of inventing (0,0) (#234-half → #318 by @triglav-modular)run_ercon a sub-sheet refuses with a structured error naming the project root (#263 by @anyn99)
PCB and integration
add_zoneedits the live board over IPC with file fallback, returningsourceandzone_id(#316 by @jctrouble, live-verified)get_board_inforeads the board KiCad holds when reachable (source: "ipc"), excludes the pseudo-net from counts, and reports custom User paper dimensions aspaper_size_mmon both paths (#207 + #324 by @pauliuszaleckas, closing #219)get_datasheet_urlanswers from the local JLCPCB catalog first; catalog searches return the datasheet column (#327 by @pauliuszaleckas, closing #255)- Pre-6.0
(module …)footprints get an actionable upgrade hint at every refusal site (#304 → #319 by @triglav-modular)
Developer documentation (#306 by @neusse)
Six new guides under docs/: architecture with runtime flows, the tool system, developing tools (including the evidence rules), KiCad integration and its write gates, testing and release. Every claim names its owning module; counts stay guard-enforced elsewhere.
Response and schema changes (minor-release rule)
New tool: repair_corrupted_footprints (registered 203 → 204, total 209 → 210). Response additions: get_board_info (source, paper_size_mm), add_zone/add_copper_pour (source, zone_id, new optional params), create_symbol (units[].pins[]), edit_sheet/move_sheet (changed), set_board_size (replaced_segments), datasheet fields in catalog queries, ERC/DRC violations carry rule and full items arrays. Hard change: get_schematic_view now returns structured JSON ({schematic, svg, bytes, format}) instead of a text note. Removals: eight inert parameters (#285) and move_connected's four dead parameters — all documented in docs/API_MIGRATIONS.md.
Known limitations
move_connectedrefuses by design until #120's connectivity model lands.- The #325/#233 client-compatibility class (tool-capped or non-refetching MCP clients) is a roadmap item;
eager_toolsets = trueis the interim workaround where the client can take the full list. - The
moving_and_rotating_footprint_preserves_child_geometrylive test remains ~1-in-3 flaky (#221, rotation read-back race).
Counts: 19 toolsets, 204 registered tools / 210 total.
What's Changed
- test(sch): resolve the stub Device library from the stub project by @pauliuszaleckas in #236
- fix(sch): keep every item of an ERC violation by @pauliuszaleckas in #297
- fix(pcb): keep every item of a DRC violation by @pauliuszaleckas in #298
- fix(library): let create_symbol set a datasheet by @pauliuszaleckas in #235
- feat(sch): let create_schematic choose a paper size by @pauliuszaleckas in #261
- feat(netclass): add
get_netclasses, the read path net classes never had by @anyn99 in #259 - fix(sch): refuse run_erc on a sub-sheet and name the root by @anyn99 in #263
- fix(library): inspect footprint structure by @nordic-style in #274
- fix(sch): resolve power symbols in the schematic net graph by @pauliuszaleckas in #262
- fix(export): pass KiCad single-file plot arguments by @nordic-style in #266
- fix(integration): stop advertising unavailable autoroute by @nordic-style in #276
- fix(sch): resolve pins in find_orphan_items by @nordic-style in #271
- fix(sch): move a sheet's captions and pins with its box by @anyn99 in #309
- fix(sch): accept an item edit that restates the current state by @anyn99 in #307
- fix(sch): give a duplicated sheet its own item UUIDs by @anyn99 in #310
- fix(sch): align add_schematic_text as KiCad does instead of centring it by @anyn99 in #308
- fix(library): resolve a project directory to its own library table by @anyn99 in #311
- fix(library): report where create_symbol actually put the pins by @anyn99 in #312
- fix(sch): return the SVG get_schematic_view renders instead of deleting it by @anyn99 in #313
- fix(sch): write the rotation a sheet pin's
atmust carry by @triglav-modular in #317 - fix(library): name the way out when a footprint has a pre-6.0 (module) root by @triglav-modular in #319
- fix(integration): answer get_datasheet_url from the local catalog first by @pauliuszaleckas in #327
- docs: add developer architecture and tool guides by @neusse in #306
- fix(schematic): respect intentional unconnected pins by @nordic-style in #267
- fix(api): apply or remove ignored tool parameters by @nordic-style in #285
- fix(sch): refuse a batch_add_wire element missing a coordinate by @triglav-modular in #318
- refactor(sch): give the connectivity tools one shared index by @pauliuszaleckas in #323
- feat(pcb): repair footprints corrupted by legacy sync by @nordic-style in #294
- fix(add_zone): edit the live board over IPC, not just the file by @jctrouble in #316
- fix(pcb): read board info and pads from the board KiCad holds by @pauliuszaleckas in #207
- fix(pcb): report a User paper size's dimensions in get_board_info by @pauliuszaleckas in #324
New Contributors
- @nordic-style made their first contribution in #274
- @triglav-modular made their first contribution in #317
Full Changelog: v0.7.0...v0.8.0