v0.7.0
Konnect v0.7.0
One fix in this release matters more than the rest: update_pcb_from_schematic in v0.4.0 through v0.6.1 silently destroyed footprint artwork. If you synced a schematic to a PCB on those versions, please read the first section.
⚠ If you ran update_pcb_from_schematic on v0.4.0–v0.6.1 (#244)
The tool re-typed every footprint graphic (silkscreen, courtyard, fab outlines) as a nameless pad at (0,0) while reporting success. An 8-pad SOIC-8 came back as 28 pads with no artwork; KiCad accepted the items, so nothing errored anywhere. Both the add and update paths were affected. place_component was not affected.
What to check: open any board you synced on those versions and run DRC — corrupted footprints show up as lib_footprint_mismatch, and in the footprint properties as extra unnumbered pads at the origin with no net. The Reference/Value text survives (only graphic shapes were re-typed), so a board can look superficially normal in a zoomed-out view.
What to do: re-run the sync on v0.7.0 (updates now restore the library definition), or replace the affected footprints from the library ("Update Footprint from Library" in pcbnew). A dedicated repair tool that detects the exact corruption signature is under review (#294).
Root cause for the curious: a footprint's pads, graphics and text travel in one repeated protobuf Any field, and the sync filtered it with "did this decode as a Pad" — proto3 skips unknown fields rather than failing, so every graphic decoded as an empty pad and was written back as one. The filter now discriminates on the declared type URL, and a post-apply read-back holds the board to what was actually sent: a board that comes back with pads the sync never sent fails the call instead of reporting success.
Thanks to @neusse, whose end-to-end benchmark (discussion #239) caught this with exact per-footprint counts — the corruption was invisible to the test suite, to CI, and to KiCad itself, because every layer reported success.
Review verdicts now require evidence (#245, #246, #247)
Three fixes that share one principle: a verdict must rest on what was checked, not on an absence of findings.
run_drcwas discarding two thirds of KiCad's DRC result. KiCad reports three arrays —violations,unconnected_items,schematic_parity— and Konnect read only the first. An unrouted net is reported underunconnected_itemsat severity error, so a board with a missing connection came back clean. All three categories are now surfaced, each violation carries its machine-readablerulekey, and positions are real (they were previously alwaysnull— read from a field the schema never had).run_design_reviewreportedpads: 0on every board, always — a structurally-wrong count that had never been right — and never consulted DRC at all. It now counts pads correctly, runs DRC when a board is in scope, and folds the findings into the verdict.validate_for_manufacturingsaidREADYon a board with DRC errors and an unrouted net. Its only routing check fired when a board had zero tracks, so a board routed except for one net passed. It now requires DRC evidence.
Behaviour change to expect: boards that previously got LOOKS GOOD / READY may now get NOT READY or INCOMPLETE — that is the fix working. When DRC cannot run (no kicad-cli, unparseable board), the verdict is INCOMPLETE with a diagnostic naming the missing evidence, never a positive verdict. In both tools' responses the DRC summary is null (not zero) when DRC did not run, so "none found" and "never checked" are distinguishable.
New tool: flip_component (#230, part of #115)
Move a footprint to the opposite board side with full mirroring — pad coordinates and angles, front/back layer mapping, graphics, courtyard/fab, mirrored text — on a closed board. Fails closed on geometry it cannot mirror correctly (custom pads with primitives, 3D models with non-zero Y-offset/X-Y-rotation) rather than guessing. Contributed by @TWT233. Live flipping through a running KiCad waits on KiCad's own FlipItems API (upstream, post-10.0.5); #115 stays open for that half.
Closed-board move and rotate (#229, closes #228)
move_component and rotate_component now work when KiCAD is not running, editing the board file directly with the same rigid-body child transforms KiCad itself applies, and refusing when KiCAD holds the board open. Responses carry a source field ("ipc" or "file") saying which path ran. Contributed by @TWT233. Root rotation now matches KiCad's own normalisation ((-180, 180]), verified by letting KiCad re-save and diffing.
Response shape changes (for anyone matching on tool output)
run_drc/get_drc_violations: addeddesign_rule_violations,unconnected_items,schematic_parity,categories_not_reported, and per-violationrule;total_violations/totalnow count all categories.run_design_review: added adrcsummary object (null when DRC did not run) and azero_pads/drc_unavailablediagnostic class; board coveragepadsis now a real number.validate_for_manufacturing: added adrcsummary object; verdicts can newly beNOT READYfor DRC reasons.move_component/rotate_component: addedsource.update_pcb_from_schematic: may now fail after commit with a read-back mismatch error (a gained pad), or attachboard_readback_differsdiagnostics.
Also in this release
- Missing/duplicate references and unparseable boards in closed-board move/rotate return structured
invalid_argumenterrors instead of raw failures (#229). - DRC report output paths get their parent directory created instead of failing with a bare OS error (part of #119).
- The
autorouteerror and docs no longer claim KiCad 10 removed Specctra DSN/SES CLI commands — they were never CLI commands in KiCad 8, 9 or 10. Freerouting itself works on KiCad 10 via the ActionPlugin (#253 tracks a real bridge; thanks @neusse for the audit in discussion #224).
Known limitations
- The post-apply read-back check refuses only a gained pad (the corruption's unambiguous signature); other divergences are reported as diagnostics while we gather live-KiCad evidence about what KiCad normalises on deserialize.
- After KiCAD dies mid-session, the next closed-board call cannot distinguish that from "KiCAD was never running" and may edit the board file behind it (#240).
find_orphan_itemsstill flags labels placed directly on pins (#249, fix under review).- PCB PDF/SVG export can fail against KiCad 10 due to a
--layersargument-shape mismatch (#250, fix under review).
Counts: 19 toolsets, 202 → 203 registered tools (flip_component), 208 → 209 total.
What's Changed
- feat(pcb): support closed-board move and rotation by @TWT233 in #229
- feat(pcb): add safe closed-board footprint flipping by @TWT233 in #230
Full Changelog: v0.6.1...v0.7.0