← Commit history

v0.9.130: demo beats reordered (design file-opens first, plugin-dependent part beats after) - KiCad starts each process's embedded Python lazily and the plugin needs 1-2 min to bind on 10.0.5; scheduling gives it that time for free

John Lauer ·7c3585f10c ·1mo ago ·parent 4a1b34f
5 files changed +21−14
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.129+0.9.130
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.129",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.129/adom-bridge-kicad-v0.9.129.zip",-  "sha256": "a4c2263511a6c4f953f4110695f26c89e7512ac333f136b725f46fba02f2a355",-  "size": 413143,+  "version": "0.9.130",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.130/adom-bridge-kicad-v0.9.130.zip",+  "sha256": "674e14a36048e2843dde2c589e3ed8988a29561677f427a7d57164c6977ef9e4",+  "size": 413375,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-16T18:32:28Z",+  "released_at": "2026-08-16T18:43:05Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.130.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.129",+  "version": "0.9.130",   "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+14−7
@@ -40,7 +40,14 @@ DEMO_LIB = "Adom" IC_SYM, IC_FP = "AdomDemo_IC", "AdomDemo_SOIC8" R_SYM, R_FP = "AdomDemo_R", "AdomDemo_R0805" -STEPS = ["symbol", "footprint", "footprint3d", "schematic", "board", "board3d"]+# Beat ORDER is a reliability decision, not just a story decision (2026-08-16):+# the design beats (schematic/board/board3d) are plain file-opens that need no+# plugin, while the part beats (symbol/footprint/footprint3d) ride the+# in-process plugin — and KiCad starts each process's embedded Python LAZILY,+# so on 10.0.5 the plugin takes 1-2 minutes to bind after spawn. Running the+# design beats first gives the plugin that time for free; part beats then take+# the fast in-process path instead of racing a cold interpreter.+STEPS = ["schematic", "board", "board3d", "symbol", "footprint", "footprint3d"]  # Screenshot labels. `schematic` / `board_2d` / `board_3d` deliberately match the # labels fusion_demo returns, so an AI driving BOTH bridges (Hydrogen's installer does)@@ -356,7 +363,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:             except Exception:                 loaded = True   # can't verify — don't fail the beat on the checker         return {"ok": bool(r.get("success")) and loaded, "window": "Symbol Editor",-                "title": "1/6 · Schematic symbol",+                "title": "4/6 · Schematic symbol",                 "say": (f"This is the {IC_SYM} symbol, in the user's own KiCad symbol editor. "                         "The bridge installed it into their Adom library a second ago — no file "                         "copying, no dialogs."),@@ -367,7 +374,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:     if step == "footprint":         r = handle_open_footprint_editor(kicad_info, {"libraryName": DEMO_LIB, "footprintName": IC_FP})         return {"ok": bool(r.get("success")), "window": "Footprint Editor",-                "title": "2/6 · The footprint for that symbol",+                "title": "5/6 · The footprint for that symbol",                 "say": (f"Same part, now its land pattern: {IC_FP}. This is what actually gets "                         "soldered — the symbol is the idea, the footprint is the copper."),                 "pointOut": ["8 SMD pads on 1.27 mm pitch", "silkscreen outline + the pin-1 dot",@@ -377,7 +384,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:         import time; time.sleep(2)         r = handle_open_3d_viewer(kicad_info, {"editor": "footprint"})         return {"ok": bool(r.get("success")), "window": "3D Viewer",-                "title": "3/6 · That part in 3D",+                "title": "6/6 · That part in 3D",                 "say": ("And here is the same footprint in three dimensions" +                         (", with the real SOIC-8 body from KiCad's own 3D model library."                          if has3d else " — pads only; KiCad's bundled 3D models weren't found.")),@@ -387,7 +394,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:     if step == "schematic":         r = handle_open_schematic(kicad_info, {"filePath": prep["schematic"]})         return {"ok": bool(r.get("success")), "window": "Schematic Editor",-                "title": "4/6 · A schematic using it",+                "title": "1/6 · A schematic using it",                 "say": ("Now a real schematic sheet: the demo IC as U1 with two 10k resistors, "                         "R1 and R2. The bridge generated and opened this project itself."),                 "pointOut": ["U1 plus R1/R2, each properly annotated",@@ -396,7 +403,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:     if step == "board":         r = handle_open_board(kicad_info, {"filePath": prep["board"]})         return {"ok": bool(r.get("success")), "window": "PCB Editor",-                "title": "5/6 · The 2D board layout",+                "title": "2/6 · The 2D board layout",                 "say": ("The PCB side: the same three parts placed on a 70 by 40 millimetre "                         "board outline, copper, silkscreen and courtyards all real."),                 "pointOut": ["the SOIC-8 land pattern and two 0805 resistors",@@ -407,7 +414,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:         import time; time.sleep(2)         r = handle_open_3d_viewer(kicad_info, {"editor": "pcb"})         return {"ok": bool(r.get("success")), "window": "3D Viewer",-                "title": "6/6 · The whole board in 3D",+                "title": "3/6 · The whole board in 3D",                 "say": ("And the finished board in 3D — this is the payoff: from a symbol to a "                         "rendered assembly, every step driven from the cloud on the user's own "                         "machine."),