☰
kicad-dashboard v1: the bridge's Launch Page (fusion-dashboard sibling, port 8931) - LED status (relay/box/bridge/kicad…
v0.9.152: Adom overlay badges on bridge-driven KiCad taskbar buttons (ITaskbarList3, pup pattern) + kicad_get_settings/…
v0.9.151: taskbar icon repair - minimize-parking froze windows into the taskbar before KiCad assigned their icon (blank…
v0.9.150: park = minimize-no-activate from first sighting (hwnd churn during eeschema load reset the fight threshold an…
v0.9.149: fight escalation - a window reasserting its geometry (eeschema mid-load) gets minimized-no-activate after 4 r…
v0.9.148: guardian arms without an hwnd (the vestigial not-hwnd early-return silently disabled ALL post-verb guards whe…
v0.9.147: guardian arms for EVERY spawn verb (was gated on a captured user foreground that can be None) - closes the un…
v0.9.146: parking instrumentation (attempts, last error, sweep ticks, bridge-window count in focusDebug)
v0.9.145: bridge-created windows stay bridge-created across verbs (rebaselining adopted the previous verb's window as t…
v0.9.144: focusDebug introspection in kicad_state (sweep/hook/sentinel liveness, inflight/guard counters, parked/baseli…
v0.9.143: SetWindowPlacement-based parking - SetWindowPos cannot move a MAXIMIZED window (the silent no-op); park demot…
v0.9.142: re-park - KiCad applies saved geometry late in init and moved itself back on-screen after the early park; the…
v0.9.141: 50ms parking sweep (deterministic) - baselines existing windows at verb start, parks anything newer off-scree…
v0.9.140: hook diagnostics (armed + per-event stderr) + SetWinEventHook restype
v0.9.139: parking engages DURING handlers - windows are created before guards arm, so the dispatcher now marks GUI-verb…
v0.9.138: off-screen parking (John's design) - the SHOW hook teleports new KiCad windows to -32000,-32000 before first…
v0.9.137: event-driven focus enforcement (SetWinEventHook on SHOW/FOREGROUND) - during bridge work a KiCad window is su…
background doctrine: the presence gate
v0.9.136: kicad_state.userIdleSeconds - the presence gate for automation (John was actively working when a window-spawn…
v0.9.135: board3d beat waits for the PCB editor to be findable before invoking the 3D viewer (mid-transition race made…
v0.9.134: menu ids resolved LIVE via the plugin's get_menu_ids (10.0.5 renumbered eeschema 20390->20391); demo warm lau…
v0.9.133: #31 root cause - stale discovery files at scale poisoned plugin resolution; dead-pid files are now skipped AN…
v0.9.132: every window-spawning response now declares openedInBackground:true + _foregroundHint (how to foreground: for…
background doctrine: the foreground-reason contract (0.9.131)
v0.9.131: John's foreground contract - NO foreground without foregroundReason (refused otherwise), every sanctioned for…
v0.9.130: demo beats reordered (design file-opens first, plugin-dependent part beats after) - KiCad starts each process…
v0.9.129: PM plugin bind-wait 15s -> 45s (KiCad starts the PM's embedded Python lazily; a fresh 10.0.5 PM takes 30-45s…
v0.9.128: tier 1 falls through on NO-WINDOW, not just on post-failure - a stale eeschema menu id posts 'successfully' w…
v0.9.127: symbol-editor tier 1 waits up to 15s for the plugin to bind on a fresh PM - on 10.0.5 the in-process plugin p…
v0.9.126: find_menu_command returns (id,label) - 0.9.125 passed the tuple into PostMessageW (ctypes ArgumentError kille…
v0.9.125: PM menu command ids resolved by menu walk, not hardcoded (10.0.5 renumbered 20011/20013 - beats 1-3 fired WM_…
v0.9.124: symbol-editor appearance wait 6s -> 30s with WM_COMMAND repost at 10s (cold 10.0.5 PM races the demo job's ba…
v0.9.123: failed demo beats now report failReason (handler success/error/output) in the result and log raw to stderr -…
v0.9.122: background demo beats sweep modal dialogs before retrying (staged calls get the dispatcher's sweep, the job t…
v0.9.121: stepShot capture keys off the beat's window field (title is the display label, not a window title - 0.9.120's…
v0.9.120: per-step screenshot evidence streamed to the demo caller (#25 web-control contract) - stepShot{step,title,ima…
v0.9.119: point-release version blindness fixed in ALL THREE places - detection ranks installs by probed kicad-cli X.Y.…
v0.9.118: nudge hint copy edit
v0.9.117: update-nudge attachment moved to the HTTP funnel (readiness/bridge_status return via early dispatch paths and…
v0.9.116: proactive KiCad update nudge - throttled (24h) async check, surfaced as kicadUpdate{installed,latest,_hint} o…
background doctrine: the always-on focus sentinel (0.9.113-0.9.115)
v0.9.115: sentinel bless test fixed - 'recent input' wrongly blessed self-raises while the user typed in ANOTHER app (c…
v0.9.114: sentinel exemption for sanctioned foregrounds (bring_to_user / announce_foreground set expect_foreground so t…
v0.9.113: always-on focus sentinel (John saw late self-raises land in the foreground after per-verb guards expired) - b…
README: single-component demo projects (0.9.112) - refreshed schematic/2D/3D board shots, no companion parts on a one-p…
v0.9.112: single-component demo projects (John: extra components on a one-part demo board just confuse the user) - the…
v0.9.111: faulthandler at boot (issue #27) - native crash now dumps all thread stacks to stderr, which ab 2.0.44+ captu…
v0.9.110: pure-stdlib PNG encoder for screenshots - ab's managed runtime ships no PIL, so fresh boxes captured only .bm…
README: document the show_* family, the wiki-part pipeline (filePath installs + model, make_part_project), export_part…
v0.9.109: kicad_export_part (one-off single-part library exports: symbol-only .kicad_sym, footprint-only .pretty, bare…