Skip to content

v0.12.0 — Exact Targets. Honest Results. Safer Boards.

Choose a tag to compare

@github-actions github-actions released this 17 Sep 16:40
· 212 commits to main since this release
37cfa43

Konnect v0.12.0 — Exact Targets. Honest Results. Safer Boards.

Konnect v0.12.0 is the release where automation stops merely asking KiCad to do the right thing and starts proving what actually happened.

This release binds live operations to the exact requested board, verifies editor selections and cross-probe targets, preserves schematic identity and library metadata through mutation, produces matched JLCPCB manufacturing files, and turns the project's reliability rules into executable contracts.

The result is a much harder system to fool: fewer request values echoed as “success,” fewer stale-file fallbacks, fewer ambiguous IPC failures, and substantially better evidence when a design is changed, checked, synchronized, or prepared for manufacture.

Major highlights

Live KiCad operations now know exactly which board they are touching

IPC operations bind to the requested document instead of whichever editor happens to answer. Selection, navigation, cross-probing, socket discovery, and health reporting now preserve exact target identity and return observable reasons when KiCad is unavailable.

Schematics retain their electrical and human meaning

Mirrored symbol placement, movable and hideable field text, identity-based net resolution, library-field preservation, safer mutation commits, honest annotation results, richer symbol graphics, and corrected single-pin-net detection make generated and edited schematics substantially more faithful to KiCad.

Manufacturing output is useful without hand repair

JLCPCB BOM and CPL files now form a matched vendor-ready set, CPL rotations are corrected, copper-layer counts come from the actual layer table, mounting holes use KiCad's shipped footprint names, DRC identifies item ownership, and live-board DRC synchronizes the requested board before invoking the CLI.

Reliability is now a project contract, not reviewer folklore

Advertised input schemas are enforced, unknown fixed-tool arguments are rejected, shared outcome types expose applied/refused/uncertain results, mock IPC servers no longer race over ephemeral ports, and release publication is gated on real-KiCad acceptance.

What's changed

IPC, editor targeting, and runtime resilience

  • #407 — Distinguish “requested board is not open” from an editor refusal. — @pauliuszaleckas
  • #480 — Bind IPC mutations to the exact requested board. — @neusse
  • #487 — Preserve typed document identity during board binding. — @neusse
  • #486 — Refuse stale locked-file fallbacks instead of racing the live editor. — @neusse
  • #488 — Discover which navigation capabilities the connected editor actually supports. — @neusse
  • #491 — Observe the editor's exact selection rather than assuming it. — @neusse
  • #492 — Resolve exact editor navigation targets. — @neusse
  • #493 — Verify editor selection mutations through readback. — @neusse
  • #494 — Test the complete unavailable-capability matrix for navigation. — @neusse
  • #495 — Resolve exact cross-probe targets. — @neusse
  • #505 — Discover KiCad sockets from metadata without probing by connection. — @tonydzi
  • #442 — Record running servers and sweep dead process records at startup. — @tonydzi
  • #484 — Add a guarded Unix stdio reload operation. — @neusse
  • #530 — Find KiCad's Windows endpoint in the named-pipe namespace. — @mixelpixx
  • #535 — Report why KiCad did not answer an IPC health check. — @mixelpixx

Schematic fidelity and mutation safety

  • #483 — Document label scope versus power-symbol behavior in instanced sheets. — @7487
  • #402 — Count actual pins, not labels, when finding single-pin nets. — @pauliuszaleckas
  • #502 — Create visible symbol bodies from graphics primitives. — @triglav-modular
  • #520 — Keep generated power pins separated and readable. — @neusse
  • #489 — Move and hide symbol field text. — @triglav-modular
  • #485 — Place mirrored schematic symbols. — @triglav-modular
  • #527 — Validate schematic mutations before committing them. — @neusse
  • #513 — Resolve schematic nets by identity rather than display name. — @pauliuszaleckas
  • #548 — Preserve library Value, Footprint, and custom fields during placement. — @neusse
  • #570 — Isolate temporary ERC reports so concurrent checks cannot collide. — @neusse
  • #579 — Annotate schematics using eeschema-compatible behavior and report observed results. — @mixelpixx

PCB synchronization, verification, and manufacturing

  • #504 — Treat a pathless board footprint as having no schematic identity. — @triglav-modular
  • #509 — Limit duplicate-board-reference errors to references used by the schematic. — @triglav-modular
  • #511 — Count copper layers structurally from KiCad's layer table. — @mixelpixx
  • #443 — Generate a matched JLCPCB BOM and CPL file set. — @neusse
  • #481 — Identify the owning board item for each DRC result. — @neusse
  • #512 — Use mounting-hole footprints shipped by KiCad. — @mixelpixx
  • #519 — Correct JLCPCB component-placement rotations. — @neusse
  • #522 — Always request schematic-parity DRC and disclose when no schematic is available. — @mixelpixx
  • #528 — State honestly that the current clearance tool measures anchor distance. — @mixelpixx
  • #523 — Report unassigned footprints without aborting PCB synchronization. — @mixelpixx
  • #571 — Prove schematic synchronization preserves board-only objects. — @neusse
  • #585 — Synchronize the exact live board before CLI-backed DRC. — @neusse
  • #599 — Recognize polygon graphics as valid Edge.Cuts outlines. — @Reid-n0rc
  • #603 — Expose typed pad geometry for reliable physical checks. — @neusse

Contracts, validation, CI, documentation, and maintenance

  • #497 — Document the protected-main merge workflow. — @neusse
  • #482 — Reject malformed nested library inputs. — @neusse
  • #447 — Update the GitHub release action. — @dependabot
  • #448 — Update the TOML dependency. — @dependabot
  • #534 — Add interactive architecture diagrams. — @neusse
  • #550 — Establish the shared reliability contract for tool contributions. — @neusse
  • #551 — Enforce the input schemas advertised over MCP. — @neusse
  • #552 — Eliminate ephemeral-port races in mock IPC servers. — @neusse
  • #553 — Add shared applied, refused, unsupported, and uncertain outcome types. — @neusse
  • #554 — Enforce the reviewed reliability-contract baseline in tests. — @neusse
  • #557 — Update schematic-viewer dependencies. — @dependabot
  • #559 — Update workspace dependencies. — @dependabot
  • #568 — Update dirs to version 7 consistently across lockfiles. — @neusse
  • #573 — Block release publication unless real-KiCad acceptance passes. — @neusse
  • #584 — Reject unknown arguments on fixed tool schemas. — @neusse
  • #591 — Require PRs to explain architectural fit. — @neusse
  • #601 — Avoid redundant post-merge validation when exact-head CI is authoritative. — @neusse
  • #607 — Automate the 30-day wontfix evidence window. — @neusse

Known limitations and v0.12.1 patch queue

The project owner approved v0.12.0 with the following issues still open. They
remain tracked for a patch release; this approval changes the release timing,
not the evidence or severity recorded on each issue.

  • #410 — check_clearance
    measures anchor distance, not physical copper or pad clearance. Use KiCad DRC
    as the authority for actual clearance.
  • #595 — live placement
    scoring can omit the moved component and miss an overlap. Re-read the board
    and run KiCad DRC after live moves; do not use the score alone as acceptance.
  • #596 —
    place_decoupling_caps can pair through a shared rail and move an unrelated
    capacitor. Avoid automatic application on shared rails; use explicit,
    reviewed component moves.
  • #597 — the force-directed
    refiner can produce non-converging or non-improving moves. Do not use it for
    production placement; prefer explicit bounded moves and inspect the result.
  • #609 — apply_template can
    emit malformed schematic instance identity. Avoid it for production designs,
    or inspect and repair instance identity before later batch writes or sync.
  • #610 — set_active_layer
    can write a token KiCad 10.0.6 cannot parse. Do not call this tool in v0.12.0.
    To recover an affected board, remove the injected (active_layer ...) entry
    from the board file and reopen it in KiCad.
  • #615 — schematic rotation
    does not reconcile junction connectivity. Inspect and repair junctions after
    rotation; do not assume that visual contact proves electrical connectivity.

Before tagging:

  • Project owner explicitly approved the v0.12.0 release with the current P0 issues documented above and retained for a patch release.
  • Open overlap sets are drained or deliberately deferred before the version/count change.
  • cargo xtask fix-doc-counts is run; counts are never hand-edited.
  • Version and PCM metadata are updated together in one final release PR.
  • Required CI is green on the exact release head.
  • Real-KiCad E2E and all seven live IPC tests pass against the candidate.
  • The preserved routed-board benchmark returns manufacturing READY with
    zero DRC errors and zero unconnected items. Its assembly package remains
    deliberately INCOMPLETE because mounting holes H1/H2 appear in the
    CPL but not the BOM; this is recorded as validation debt rather than hidden.
  • Release notes list remaining limitations honestly.
  • The tag-triggered release workflow produces all binary and PCM assets before publishing.
  • Konnect Codex is synchronized, tested, released, and announced after the Konnect tag exists.

Full changelog: v0.11.1...v0.12.0