☰
v0.9.191: SDK #38 canonical response contract - windowEtiquette enum replaces openedInBackground, errorCode foreground_…
v0.9.190: THE #34 ROOT CAUSE, and it was mine - a dedupe edit stripped 'import sys' from inside the GENERATED loader's…
v0.9.189: new kicad_plugin_diagnose - one read-only call that answers 'why is the reverse bridge not loading' with a ve…
v0.9.188: closes #37 - symbol extraction required leading whitespace, so a valid .kicad_sym with its top-level symbol a…
v0.9.187: #34 - the loader started an RPC server inside the bridge's OWN short-lived python probes (exeName python, ali…
v0.9.186: closes #34 Bug B - the cold footprint path no longer requires the user to already have a board; if the machin…
v0.9.185: background the project manager too (a spawned window that appears after the verb returned is still ours, for…
v0.9.184: REMOVE the machine-wide input hooks added in 0.9.182. They degraded the user's cursor and cost him four reboo…
v0.9.183 URGENT: 0.9.182's low-level mouse hook did window lookups and SetWindowLongPtr INSIDE the system input path, w…
v0.9.182: deterministic user-intent detection (WH_MOUSE_LL + WH_KEYBOARD_LL - a taskbar click or alt-tab can no longer…
v0.9.181: backgrounding is now ONE SetWindowPos to the bottom, once per window, only if that window took the foreground…
v0.9.180: NEVER blip. Remove the minimize-bounce and off-screen parking entirely - both are visible frames by construct…
v0.9.179: fixes wiki issue #33 - the focus GUARDIAN demoted a self-raising window on every 100ms tick with no debounce…
v0.9.178: report progress for every instrumented verb, not only runs over 3s - a fast warm run is exactly the cold-vs-w…
v0.9.177 HOTFIX: 0.9.176 defined the progress phase map INSIDE the dispatcher after its first use, so every verb raised…
v0.9.176: implements #32 - measured progress on every slow verb, rolling per-machine history (p50/p90, cold vs warm), h…
v0.9.175: STOP FIGHTING KiCad's geometry - after 3 rounds concede the position and just keep the window behind and unfo…
v0.9.174: the footprint tier waited 6s for a window that needs 10-30s on a cold pcbnew, so it declared failure while th…
v0.9.173: a click is a GOAL - the footprint/3D-chip surfaces now bind the plugin themselves (open a board in the backgr…
v0.9.172: THE IDLE RULE - never bounce a KiCad foreground when no verb or guard is running, so a taskbar click always w…
dashboard: use the REAL KiCad logo (extracted from the installed kicad.exe) as the favicon and header mark instead of a…
v0.9.171: the live menu-id resolver only understood frames[].menus[], but get_menu_ids returns a FLAT list on 10.0.5 pc…
v0.9.170: defer the plugin start - KiCad scans its plugin dir before sys.path is complete (inline import died on 'No mo…
v0.9.169: the install gate compared only EXISTENCE of generated loaders, so 0.9.168's rewritten loader never shipped to…
v0.9.168: the plugin-dir loader guarded with an ENV VAR, which children inherit - so after one KiCad process ran it, ev…
v0.9.167: the already-current short-circuit skipped 0.9.166's new plugin-dir loader entirely; the up-to-date check now…
v0.9.166: #31 - load the reverse bridge from KiCad's scripting/plugins dir, the hook that still fires on 10.0.5 (verifi…
dashboard: ralph-test fixes - instant skeleton so the page never sits empty, first paint no longer blocks on /api/targe…
v0.9.165 HOTFIX: boot maintenance ran BEFORE the port bind and SetWindowLongPtr blocks forever against a hung KiCad, so…
v0.9.164: heal window usability by INSPECTION - a window suppressed by an earlier bridge process was unknown to the new…
v0.9.163: deploy the plugin loader to the interpreter's REAL user-site too (10.0.5 reports the default %APPDATA%/Python…
v0.9.162: ROOT CAUSE + fix for the 10.0.5 plugin bind regression (#31) - KiCad 10.0.5 GUI processes no longer run site.…
v0.9.161: THE 'weird' root cause - the park baseline excluded bridge-created windows, so an already-open KiCad got re-p…
v0.9.160: THE taskbar-icon root cause - WS_EX_NOACTIVATE removes a window from the taskbar by design, so backgrounded w…
dashboard: read the bridgeVersion stamped on every 0.9.159+ response (header showed 'bridge ?')
v0.9.159: every verb response now carries bridgeVersion (it only ever reached /health, so no caller could ask which bri…
v0.9.158: start the parking sweep at boot - the 60s session-sanitize retry (and parked-window defense) armed only on th…
v0.9.157: session sanitize - bridge projects are scrubbed from KiCad restore-on-launch (kicad.json system.open_projects…
v0.9.156: geometry-poison prevention (unpark before close verbs, atexit unpark, boot heal of off-screen-stranded window…
v0.9.155 EMERGENCY: ownership ledger - the bridge only parks/bounces/badges windows from process trees it spawned; user…
v0.9.154: overlay badges via AD desktop_taskbar (in-process ITaskbarList3 is a no-op cross-process, pup/fusion lesson);…
v0.9.153: overlay badges survive bridge restarts (rebadge ALL live KiCad windows at boot + on setting flip, not just _b…
kicad-dashboard: page served on any non-API path (adom.cloud proxy strips querystrings; path-params for status), live-v…