← Commit history

dev skill: live-verify findings — plugin aliveness truth, the symbol canvas-load gap + symbol_editor_load design, clean z-order verification method, the #56 manual-spawn workaround

John Lauer ·5bcc7251c2 ·2mo ago ·parent 6b9acd0
1 file changed +38
skills/kicad-bridge-dev/SKILL.md+38
@@ -185,6 +185,44 @@ threads (withdrawn in the 1.9.183 notice); the per-call mechanism is #12.3 window-labeling only fires for verbs that do (`place_footprint`). Thread `hwnd` through the open handlers to light it up for every editor window. +## 🔬 Live-verify findings (AdomLapper, 2026-08-09) — read before touching the demo++**Plugin aliveness, the truth:** `bridge_status` `alive:0/total:N` with KiCad closed just+means N STALE discovery files — it is NOT a deploy failure. The reverse-bridge plugin comes+alive per GUI process (`eeschema` and `pcbnew` each run their own RPC server on their own+port, e.g. :8871/:8872) the moment those exes start, IF the usercustomize deploy is current.+`{"pruneStale":true}` clears the dead files. Do not chase "plugin not running" until you have+an editor process actually open.++**The symbol canvas-load gap (open):** `navigate_symbol.ps1`'s background rewrite removed the+Ctrl+Shift+E chord (unpostable without focus) and deferred the load to "the plugin pathway" —+but no plugin RPC for it exists. The plugin only has ping/list_frames/get_menu_ids/wm_command,+and no menubar command loads a named symbol. Design: add a `symbol_editor_load(lib, sym)`+method to `plugin_payload/adom_bridge.py` that uses wx introspection inside eeschema (find+SYMBOL_EDIT_FRAME → its search ctrl + tree → set filter, activate item on the wx side, no OS+input at all). Until then the symbol/footprint beats fail HONESTLY (the load-check sees+"[no symbol loaded]") rather than narrating over an empty editor.++**Verifying background behavior without polluting it:** capture the user's frontmost title+BEFORE the verb, run ONE verb, re-list windows and compare indices. Two traps cost an hour:+(a) modal dialogs ("File Open Warning") sit at z0 and read as "user windows" to a naive+classifier; (b) if KiCad windows are already frontmost from an earlier mess, the dispatcher's+capture_foreground() dutifully captures KICAD and restores KICAD — garbage-in. Always start+from a clean desktop.++**Testing while adom-bridge#56 blocks spawning (AB 2.0.8 python-spawn regression):** launch+the cached server yourself on AD's stable port and the relay routes verbs to it:+`C:\Python314\python.exe "%LOCALAPPDATA%\Adom Bridge\bridges-cache\kicad\server.py" --port <stablePort>`+with `ADOM_BIND_HOST=127.0.0.1` (+`ADOM_DIRECT_API_URL=http://127.0.0.1:8766`). AD adopts+whatever binds the port. Remember the running process keeps its startup code — a cache+refresh does NOT swap it; kill + relaunch does, and each shell call costs a human approval,+so batch them.++**Client 30s envelopes on long beats:** the relay may cut the response even when bridge.json+declares longer per-verb budgets; the bridge keeps working. Judge a beat by OBSERVING windows+(`desktop_list_windows`, titles) rather than looping the call — re-issuing beat 1 in a loop is+how five duplicate editor pairs got spawned (fixed by idempotent warm-up, but don't do it).+ ## 🎬 The demo verb (`kicad_demo`) — match the ecosystem contract  Hydrogen's installer demos BOTH bridges, so `kicad_demo` deliberately returns the SAME