← Commit history

Update 4 file(s)

John Lauer ·afdfe08150 ·1mo ago ·parent 78bdcef
4 files changed +37−9
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.205\ No newline at end of file+0.9.206\ No newline at end of file
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.205",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.205/adom-bridge-kicad-v0.9.205.zip",-  "sha256": "7682b2c89037204b3db65dc87ecbb3fcba2ede71fe12eac66612b667e3a9f30c",-  "size": 473534,+  "version": "0.9.206",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.206/adom-bridge-kicad-v0.9.206.zip",+  "sha256": "5fe9ac7c74cff82499faac9138ef9a36ced7ab012f040af0eb386cc585191054",+  "size": 474127,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-20T12:10:00Z",+  "released_at": "2026-08-20T12:40:00Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.205",+  "version": "0.9.206",   "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/open_symbol_editor.py+30−2
@@ -713,11 +713,39 @@ def handle_open_symbol_editor(kicad_info: dict, args: dict) -> dict:                 pathways_tried.append("wm_command-repost")          if not sym_hwnd:+            # 0.9.206 (wiki issue #41). A bare "did not appear within 30s" sent me+            # hunting for a bridge bug that did not exist. The same request works+            # on an idle machine every time - cold from nothing (63s) and with the+            # manager already up (57s). Every failure I saw was on a laptop whose+            # owner was USING KiCad at the time: the Symbol Editor's hwnd changed+            # three times under me and its loaded part became one I never opened.+            # KiCad is single-instance and a human driving it will not service our+            # menu command promptly. Say that, instead of implying a defect.+            idle = None+            try:+                from handlers.win_focus import _seconds_since_user_input+                idle = round(_seconds_since_user_input(), 1)+                if idle > 1e8:          # sentinel for "could not tell"+                    idle = None+            except Exception:+                pass+            busy = idle is not None and idle < 120             return {                 "success": False,-                "error": "WM_COMMAND sent to KiCad but Symbol Editor did not appear within 30s.",+                "errorCode": "symbol_editor_did_not_open",+                "error": ("KiCad accepted the Symbol Editor command but no editor window "+                          "appeared within 30s."+                          + (f" A human was active on this machine {int(idle)}s ago, which is the "+                             "most likely reason: KiCad is single-instance, and while someone is "+                             "driving it, it does not service our menu command promptly."+                             if busy else "")),                 "pathwaysTried": pathways_tried,-                "_hint": "Call screenshot_all to check for a modal dialog blocking KiCad, dismiss with send_key escape, then retry.",+                "userIdleSeconds": idle,+                "_hint": ("Retry - this is usually a busy KiCad rather than a broken one, and it "+                          "succeeds on a machine nobody is touching (measured: 63s cold, 57s with "+                          "the project manager already running). If it repeats on an IDLE box, that "+                          "is a real bug worth reporting. Otherwise check for a modal dialog with "+                          "kicad_screenshot_all and dismiss it with send_key escape."),             }          # Wait for Symbol Editor to fully initialize