← Commit history

v0.9.153: overlay badges survive bridge restarts (rebadge ALL live KiCad windows at boot + on setting flip, not just _bridge_windows); dashboard/ excluded from runtime zip

John Lauer ·f0c732fb8c ·1mo ago ·parent 888fc8c
6 files changed +49−10
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.152+0.9.153
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.152",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.152/adom-bridge-kicad-v0.9.152.zip",-  "sha256": "b1e0e81e561c111003e2f0798b484473a03952f86aefa1937bc196d5a7a73e03",-  "size": 427311,+  "version": "0.9.153",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.153/adom-bridge-kicad-v0.9.153.zip",+  "sha256": "e991a750d2293d275b162dd73f3a758ca525e93f7a6317382ae34c2c9b7aedb0",+  "size": 427783,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-17T15:05:24Z",+  "released_at": "2026-08-17T20:37:16Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.153.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.152",+  "version": "0.9.153",   "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/win_taskbar.py+34−3
@@ -118,13 +118,24 @@ def clear_adom_badge(hwnd) -> None:         pass  +def _all_kicad_hwnds() -> set:+    """Every live KiCad top-level window: bridge-tracked PLUS enumerated.+    Windows opened before the last bridge restart drop out of _bridge_windows+    (fresh process, empty set) but were still bridge-driven — badging only the+    tracked set left the taskbar button bare after every bridge upgrade."""+    try:+        from handlers.win_focus import _bridge_windows, _enum_kicad_hwnds+        return _enum_kicad_hwnds() | set(_bridge_windows)+    except Exception:+        return set()++ def rebadge_all(enable: bool) -> int:-    """Setting flipped: apply/clear the badge on every bridge-created window."""+    """Setting flipped (or bridge booted): apply/clear on every KiCad window."""     n = 0     try:-        from handlers.win_focus import _bridge_windows         import ctypes as _ct-        for h in list(_bridge_windows):+        for h in _all_kicad_hwnds():             if not _ct.windll.user32.IsWindow(h):                 continue             if enable:@@ -137,3 +148,23 @@ def rebadge_all(enable: bool) -> int:     except Exception:         pass     return n+++def badge_existing_on_boot() -> None:+    """Server boot: badge KiCad windows that survived a bridge restart, off the+    boot path (COM + enumeration can stall; never block serving)."""+    if not IS_WINDOWS:+        return+    import threading+    import time++    def _later():+        time.sleep(5)+        try:+            from handlers.settings import get_settings+            if get_settings().get("overlayBadges", True):+                rebadge_all(True)+        except Exception:+            pass++    threading.Thread(target=_later, daemon=True, name="kicad-boot-badge").start()
server.py+8
@@ -1081,6 +1081,14 @@ def main():     except Exception:         pass +    # 0.9.153: KiCad windows outlive bridge restarts but _bridge_windows does+    # not, so overlay badges vanished after every upgrade — re-stamp survivors.+    try:+        from handlers.win_taskbar import badge_existing_on_boot+        badge_existing_on_boot()+    except Exception:+        pass+     # #31 hygiene: dead-pid discovery files accumulate across KiCad restarts     # and poison plugin resolution at scale — sweep them once per boot.     try: