{
  "target": "winvm",
  "started": "2026-09-07T17:42:54.071934+00:00",
  "elapsed_s": 337.8,
  "totals": {
    "pass": 10,
    "fail": 22,
    "skip": 9
  },
  "coverage_gap": [
    "adom_library_heal",
    "analyze_connections",
    "errors",
    "export_part",
    "extract_netlist",
    "find_connections",
    "get_settings",
    "install_library_bundle",
    "ipc_api",
    "list_design_rules",
    "list_footprints",
    "list_symbols",
    "log_tail",
    "make_part_project",
    "pcm_install",
    "pcm_list",
    "pcm_uninstall",
    "plugin_diagnose",
    "progress",
    "rescan_libraries",
    "set_design_rules",
    "set_settings",
    "trace_net",
    "verb_times"
  ],
  "failures": [
    "launch",
    "show_project",
    "open_board",
    "open_schematic",
    "open_symbol_editor",
    "show_schematic",
    "show_2d_board",
    "show_symbol",
    "show_footprint",
    "show_3d_chip",
    "show_3d_board",
    "show_library",
    "state",
    "open_footprint_editor",
    "open_3d_viewer",
    "open_editors",
    "window_info",
    "screenshot_all",
    "dismiss_dialogs",
    "send_key",
    "click",
    "bridge_call"
  ],
  "results": {
    "launch": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"Launched in the BACKGROUND (no focus steal). First",
      "reason": "FOREGROUND STEAL: 'KiCad 10.0' on top after verb"
    },
    "show_project": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"Idempotent no-op: KiCad was already up. Use kicad_",
      "reason": "FOREGROUND STEAL: 'KiCad 10.0' on top after verb"
    },
    "open_board": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"WARNING: KiCad may show modal dialogs (save prompt",
      "reason": "FOREGROUND STEAL: 'KiCad 10.0' on top after verb"
    },
    "open_schematic": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_autoDialogs\": {\"count\": 1, \"dialogs\": [{\"action\": \"left-running\", \"benign\": true, \"body\": \"Elapsed time:  0:00:00\", \"progress\": true, \"title\": \"Load Schematic\"}], \"hadError\": false}, \"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge ",
      "reason": "FOREGROUND STEAL: 'rp2040-breakout \u2014 Schematic Editor' on top after verb"
    },
    "open_symbol_editor": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foreground\": {\"editorInFrontAtEnd\": true, \"restored\": false, \"userTitleBefore\": \"PCB Editor\", \"userWindowBefore\": 984598, \"why\": \"the user's front window was already KiCad's; a new KiCad frame on top changes nothing for them\"}, \"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<",
      "reason": "FOREGROUND STEAL: 'Device:R \u2014 Symbol Editor' on top after verb"
    },
    "show_schematic": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_autoDialogs\": {\"count\": 1, \"dialogs\": [{\"action\": \"clicked-button\", \"benign\": false, \"body\": \"Schematic  'C:\\\\Users\\\\azureuser\\\\Documents\\\\adom-kicad-verbtest\\\\rp2040-breakout.kicad_sch' is already  open by 'azureuser' at 'winvm'.  Interleaved saves may produce very unexpected results.\", \"screenshot\": \"C:/Users/AZUREU~1/AppData/Local/Temp/adom-bridge-shots/window-68268-1788802714024.png\", \"titl",
      "reason": "FOREGROUND STEAL: 'untitled [Unsaved] \u2014 Schematic Editor' on top after verb"
    },
    "show_2d_board": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"GUI launched. For unfamiliar files (ones you didn'",
      "reason": "FOREGROUND STEAL: 'untitled [Unsaved] \u2014 Schematic Editor' on top after verb"
    },
    "show_symbol": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_autoDialogs\": {\"count\": 1, \"dialogs\": [{\"action\": \"clicked-button\", \"benign\": false, \"body\": \"PCB 'rp2040-breakout.kicad_pcb' is already open by 'azureuser' at 'winvm'.  Interleaved saves may produce very unexpected results.\", \"screenshot\": \"C:/Users/AZUREU~1/AppData/Local/Temp/adom-bridge-shots/window-133830-1788802722155.png\", \"title\": \"File Open Warning\"}], \"hadError\": true}, \"_dialogHint\": ",
      "reason": "FOREGROUND STEAL: 'PCB Editor' on top after verb"
    },
    "show_footprint": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Two background attempts did not confirm, so a third is unlikely to help - check the footprint exists in this library (kicad_list_footprints). The keystroke fallback is off by default (it must foreground the window \\u2014 rude while you type); pass allowFocusSteal:true to accept a focus grab, or foreground:true to bring the editor to you.\", \"_timeoutHint\": \"ab waits up to 130s for this v"
    },
    "show_3d_chip": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before th",
      "reason": "FOREGROUND STEAL: '3D Viewer' on top after verb"
    },
    "show_3d_board": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before th",
      "reason": "FOREGROUND STEAL: '3D Viewer' on top after verb"
    },
    "show_library": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"Library browse mode: the tree is filtered to the l",
      "reason": "FOREGROUND STEAL: '3D Viewer' on top after verb"
    },
    "state": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"focusEvents is the focus sentinel log: a self-raise (bounced) entry is a PREVENTED foreground steal; user-foregrounded means the human chose it. The full state of the union: every KiCad-owned window is in shots[] as inline base64 PNG (render them all \\u2014 one window is NOT the app). modalDialogs non-empty means something is blocking; editors.list is the plugin's logical inventory (nul",
      "reason": "FOREGROUND STEAL: '3D Viewer' on top after verb"
    },
    "open_footprint_editor": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Two background attempts did not confirm, so a third is unlikely to help - check the footprint exists in this library (kicad_list_footprints). The keystroke fallback is off by default (it must foreground the window \\u2014 rude while you type); pass allowFocusSteal:true to accept a focus grab, or foreground:true to bring the editor to you.\", \"_timeoutHint\": \"ab waits up to 130s for this v"
    },
    "open_3d_viewer": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"WARNING: KiCad may show modal dialogs (save prompt",
      "reason": "FOREGROUND STEAL: '[no footprint loaded] \u2014 Footprint Editor' on top after verb"
    },
    "open_editors": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Cross-process inventory: each KiCad GUI exe's plugin contributes its own wx top-level frames. If totalEditors=0 but the user has KiCad windows open, the plugins likely haven't deployed yet OR KiCad was running before v1.7.5 plugin install (those instances need a restart to load the bridge). Call kicad_bridge_status to confirm plugins are alive.\", \"_timeoutHint\": \"ab waits up to 130s for",
      "reason": "FOREGROUND STEAL: '[no footprint loaded] \u2014 Footprint Editor' on top after verb"
    },
    "window_info": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"If hasModalDialogs is true: use kicad_screenshot_all to capture all windows (dialogs shown in screenshots). Or desktop_screenshot_window with specific dialog hwnd. Pull screenshots to Docker with pull_file. Read dialog text to decide: force close, dismiss, or retry.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / ",
      "reason": "FOREGROUND STEAL: '[no footprint loaded] \u2014 Footprint Editor' on top after verb"
    },
    "screenshot_all": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\", \"durationMs\": 525, \"error\": \"Internal error: 'sizeKB'\", \"output\": \"\", \"schemaVersion\": 1, \"status\": \"error\", \"statusVerb\": \"kica"
    },
    "dismiss_dialogs": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Expired 0 dialog(s). Now retry your open/screenshot verb. Benign-only by default; pass {\\\"all\\\":true} to clear every dialog. The OpenGL notice on a GPU-less host is auto-expired by window_info too.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work ",
      "reason": "FOREGROUND STEAL: '[no footprint loaded] \u2014 Footprint Editor' on top after verb"
    },
    "send_key": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Delivered without touching the user's focus. If KiCad ignored it, the control may need real input \\u2014 prefer the plugin WM_COMMAND pathway; only as a last resort warn the user and retry with allowForeground:true.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failur",
      "reason": "FOREGROUND STEAL: '[no footprint loaded] \u2014 Footprint Editor' on top after verb"
    },
    "click": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Clicked without moving the user's mouse or taking focus. If the canvas ignored it, that control may need real input \\u2014 warn the user you need the screen for ~5s, then retry allowForeground:true.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work",
      "reason": "FOREGROUND STEAL: '[no footprint loaded] \u2014 Footprint Editor' on top after verb"
    },
    "bridge_call": {
      "result": "FAIL",
      "elapsed": null,
      "response_head": "{\"_hint\": \"Either no instance of eeschema.exe is running, or it doesn't have the adom_bridge plugin deployed (Phase 2 not installed for this KiCad). Run kicad_bridge_status to see what plugins are active. If you expected the plugin to be there, call kicad_install_plugin to force-deploy + then ask the user to restart KiCad.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before the request tim"
    },
    "install_footprint": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"WARNING: KiCad may show modal dialogs (save prompt"
    },
    "install_library": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_hint\": \"NOTE: this file holds 1 symbol(s) (ADOM_VERBTEST), so KiCad now has a whole library named 'AdomVerbTest' containing only that part, and the shared Adom library was NOT touched. If you meant 'put this part into the Adom library', the verb is kicad_install_symbol '{\\\"filePath\\\":\\\"C:/Users/azureuser/Documents/adom-kicad-verbtest/AdomVerbTest.kicad_sym\\\"}' (then kicad_show_library Adom). Bo"
    },
    "install_plugin": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_hint\": \"force-reinstall complete. Future kicad_* commands will show this fresh install state in their pluginAutoInstall fields. If KiCad was running during install, ask the user to restart those processes \\u2014 the in-memory Python interpreter still has the OLD plugin loaded until next launch.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long ope"
    },
    "install_symbol": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"WARNING: KiCad may show modal dialogs (save prompt"
    },
    "place_footprint": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_timeoutHint\": \"ab waits up to 130s for this verb before th"
    },
    "demo": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_foregroundHint\": \"Window opened in the BACKGROUND - the user's foreground was not touched. To show it to the user: re-call with foreground:true AND foregroundReason:'<why the user needs to see this>'. The bridge captions the reason via an ab toast for 3 seconds, then brings the window forward. Foreground without a reason is refused.\", \"_hint\": \"STAGED + RESUMABLE, same contract as fusion_demo: "
    },
    "close": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\", \"bridgeVersion\": \"0.9.340\", \"data\": {\"forceKilled\": [\"eeschema.exe\", \"pcbnew.exe\", \"kicad.exe\"]}, \"durationMs\": 876, \"error\": \"\""
    },
    "close_3d_viewer": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\", \"bridgeVersion\": \"0.9.340\", \"durationMs\": 64, \"error\": \"\", \"kicadVersionUsed\": \"10.0\", \"output\": \"3D Viewer is not open.\", \"sche"
    },
    "close_footprint_editor": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\", \"bridgeVersion\": \"0.9.340\", \"durationMs\": 92, \"error\": \"\", \"kicadVersionUsed\": \"10.0\", \"output\": \"Footprint Editor is not open.\""
    },
    "close_symbol_editor": {
      "result": "PASS",
      "elapsed": null,
      "response_head": "{\"_timeoutHint\": \"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \\u2014 the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\", \"bridgeVersion\": \"0.9.340\", \"durationMs\": 73, \"error\": \"\", \"kicadVersionUsed\": \"10.0\", \"output\": \"Symbol Editor is not open.\", \""
    },
    "routing_state": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "route_net": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "remove_route": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "routing_validate": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "board_pads": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "add_track": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "add_via": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "route": {
      "result": "SKIP",
      "reason": "Covered by tests/test_routing_ipc.py and demo/routing/run_demo.py; requires a dedicated unrouted IPC board"
    },
    "enable_software_opengl": {
      "result": "SKIP",
      "reason": "mutates the user's KiCad bin/ (mesa deploy) \u2014 only for GPU-less VMs; run manually on ADOMBASELINE when testing that path"
    }
  },
  "foreground_violations": [
    {
      "after_verb": "launch",
      "foreground": "KiCad 10.0"
    },
    {
      "after_verb": "show_project",
      "foreground": "KiCad 10.0"
    },
    {
      "after_verb": "open_board",
      "foreground": "KiCad 10.0"
    },
    {
      "after_verb": "open_schematic",
      "foreground": "rp2040-breakout \u2014 Schematic Editor"
    },
    {
      "after_verb": "open_symbol_editor",
      "foreground": "Device:R \u2014 Symbol Editor"
    },
    {
      "after_verb": "show_schematic",
      "foreground": "untitled [Unsaved] \u2014 Schematic Editor"
    },
    {
      "after_verb": "show_2d_board",
      "foreground": "untitled [Unsaved] \u2014 Schematic Editor"
    },
    {
      "after_verb": "show_symbol",
      "foreground": "PCB Editor"
    },
    {
      "after_verb": "show_footprint",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "show_3d_chip",
      "foreground": "3D Viewer"
    },
    {
      "after_verb": "show_3d_board",
      "foreground": "3D Viewer"
    },
    {
      "after_verb": "show_library",
      "foreground": "3D Viewer"
    },
    {
      "after_verb": "state",
      "foreground": "3D Viewer"
    },
    {
      "after_verb": "open_footprint_editor",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "open_3d_viewer",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "open_editors",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "window_info",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "screenshot_all",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "dismiss_dialogs",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "send_key",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "click",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    },
    {
      "after_verb": "bridge_call",
      "foreground": "[no footprint loaded] \u2014 Footprint Editor"
    }
  ]
}