← Commit history

Update 40 file(s)

John Lauer ·15d4549c8c ·1mo ago ·parent 9334d49
4 files changed +59−17
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.271\ No newline at end of file+0.9.272\ 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.271",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.271/adom-bridge-kicad-v0.9.271.zip",-  "sha256": "6245ed3354e7b5144684c0398374da7eb761a7c4d438179187ab96583c31d5ef",-  "size": 1045024,+  "version": "0.9.272",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.272/adom-bridge-kicad-v0.9.272.zip",+  "sha256": "fbbf84049530142fee04f6b92ecc9a14ef8e492cc927dafd999f37028e92fb69",+  "size": 1046162,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-09-01T02:57:17Z",+  "released_at": "2026-09-03T01:05:59Z",   "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.271",+  "version": "0.9.272",   "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+52−10
@@ -581,6 +581,34 @@ def handle_open_symbol_editor(kicad_info: dict, args: dict) -> dict:         return (time.monotonic() - _t0) > _budget_s      def _starting_contract(phase):+        # WHY THIS CHECKS FOR A WINDOW FIRST (wiki #71, Ray, 2026-09-02).+        # This contract said "the Symbol Editor is still coming up (cold start+        # indexes every library)" for THREE consecutive calls over 12 minutes+        # while desktop_list_windows showed no Symbol Editor at all. Reporting+        # progress on a window that was never created makes a polling caller+        # wait forever, because the thing it is waiting for is not happening.+        # "Starting" is only honest if something is actually starting.+        try:+            _existing = _find_symbol_editor()+        except Exception:  # pylint: disable=broad-except+            _existing = None+        if not _existing:+            return {+                "success": False,+                "errorCode": "symbol_editor_did_not_open",+                "retryable": True,+                "retryAfterMs": 5000,+                "phase": phase,+                "elapsedSec": int(time.monotonic() - _t0),+                "error": ("No Symbol Editor window exists. The bridge asked KiCad to open one "+                          "and none appeared, so this is not a slow cold start - nothing is "+                          "coming up."),+                "_hint": ("Call kicad_open_symbol_editor first and check it returns a window, "+                          "then re-call this verb. If the editor never opens, KiCad is usually "+                          "busy with a human (it is single-instance and will not service our "+                          "menu command while someone is driving it) - kicad_window_info shows "+                          "what is actually open."),+            }         return {             "success": False,             "errorCode": "symbol_editor_starting",@@ -1002,17 +1030,31 @@ def handle_open_symbol_editor(kicad_info: dict, args: dict) -> dict:                 "success": False, "editorOpened": True, "symbolLoaded": False,                 "attempts": 2,                 "errorCode": "library_cache_stale",-                "error": f"'{search_text}' exists in the Adom library on disk but the open "-                         f"Symbol Editor cannot see it: that editor indexed its libraries when "-                         f"it opened, before this symbol was added "+                # WHY THIS MESSAGE NO LONGER NAMES A CAUSE IT HAS NOT CHECKED+                # (wiki #71, Ray, 2026-09-02). It used to assert "that editor+                # indexed its libraries when it opened, BEFORE this symbol was+                # added". Ray's transcript disproves that ordering outright: he+                # installed the symbol, THEN closed the editor, THEN opened a+                # fresh one, and still got this error. The editor did not+                # predate the symbol; the explanation was invented.+                #+                # The real model, from #44/#47/#51: KiCad caches library indexes+                # PROCESS-WIDE, not per editor window. Closing and reopening the+                # Symbol Editor inside the same kicad.exe re-uses the cached+                # table, so a fresh window is not a fresh index. Only a process+                # restart rebuilds it (kicad_rescan_libraries force:true).+                "error": f"'{search_text}' is in the Adom library on disk, but this running "+                         f"KiCad cannot see it: KiCad caches library indexes PROCESS-WIDE, so "+                         f"a symbol added after kicad.exe started stays invisible until the "+                         f"process re-indexes "                          f"(title: {_get_symbol_editor_title() or 'unknown'})",-                "_hint": ("This is not a search-timing failure and retrying will never fix it. "-                          "The Symbol Editor has to re-index, which only happens when it opens. "-                          "This editor was opened by a HUMAN, so the bridge will not close it "-                          "automatically. Close it and call again, or pass rescan:true to have "-                          "the bridge reopen it for you (that costs the cold library-index "-                          "time, roughly a minute - wiki issue #35). A bridge-owned editor is "-                          "re-indexed automatically and needs no argument."),+                "_hint": ("Retrying will not fix it, and neither will closing and reopening the "+                          "Symbol Editor WINDOW - the cache belongs to the KiCad process, not "+                          "the window (wiki #71 proved a fresh editor still cannot see it). "+                          "Call kicad_rescan_libraries force:true for the process restart that "+                          "does rebuild the index (~1 min, wiki #35/#51), or pass rescan:true "+                          "here to have the bridge do it. The bridge will not restart a KiCad a "+                          "human launched: close it first and the restart is free."),             }         return {             "success": False, "editorOpened": True, "symbolLoaded": False,