app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
0.9.298: Fix: the 0.9.297 tour job died on a NameError (_EXIT undefined) before its first progress update, so Play the demo showed the dashboard's transport pill and nothing else (John, lost, 2026-09-03). _EXIT is defined and the job's reset sits inside its try so any early failure lands on progress as an error instead of a silent stall.
3 files changed
+4−3
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.297+0.9.298
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.297",+ "version": "0.9.298", "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.", "homepage": "https://wiki.adom.inc/adom/adom-bridge", "author": "Adom Inc.",
handlers/demo.py+2−1@@ -824,6 +824,7 @@ def _post_transport(body: str, paused: bool = False) -> None: # beats (a beat cannot be interrupted mid-verb). The toast transport stays as # the fallback for an ab older than 2.1.0 (the verb answers "unknown verb"). _PANEL_ID = "kicad-demo"+_EXIT = {"now": False} # set by a STOP press; polled by the beat loop, the narration wait and the motion _PANEL = {"ok": None} # None = untried, True = panel shown, False = fall back to the toast _PANEL_STOPS = ["Fetching the ESC board", "The MCU symbol", "Its footprint", "The chip in 3D", "The ESC schematic", "The board in 2D", "The board in 3D"]@@ -1089,8 +1090,8 @@ def _run_demo_background(kicad_info: dict) -> None: # (it would fight that single raise), and no push-to-back of the demo's # windows. Every other verb keeps the background contract. done_weight = 0.0- _EXIT["now"] = False try:+ _EXIT["now"] = False _panel_show(0, "playing") _caption(_BEAT_CAPTIONS["prepare"], duration_ms=_BEAT_CAPTION_MS["prepare"]) _play_narration("prepare")