{
  "file": "F26-plugins.md",
  "bullet": "Persistence across a restart (`F26.restart-persist`).",
  "ids": [
    "F26.restart-persist"
  ],
  "line": 666,
  "script": "control-agent-server api PATCH /api/plugins/installed/qa-f26-inst --json '{\"enabled\": false}' --expect 200\ncontrol-agent-server restart\ncontrol-agent-server doctor\ncontrol-agent-server api GET /api/plugins/installed --expect 200 --check plugins len-eq 2 \\\n  --check plugins.0.name eq qa-f26-inst --check plugins.0.enabled eq false --check plugins.0.description eq 'QA local plugin v2' \\\n  --check plugins.1.name eq qa-f26-src-plugin --check plugins.1.resolved_ref eq \"$H2\" --check plugins.1.enabled eq true \\\n  --save F26.restart-persist/list\ncontrol-agent-server api POST /api/plugins --json '{\"load_user\": true, \"load_project\": false}' --expect 200 \\\n  --check plugins not-contains '\"name\": \"qa-f26-inst\"' --check plugins contains '\"name\": \"qa-f26-src-plugin\"'\ncontrol-agent-server api PATCH /api/plugins/installed/qa-f26-inst --json '{\"enabled\": true}' --expect 200\ncontrol-agent-server api GET /api/plugins/installed/qa-f26-inst --expect 200 --check enabled eq true --save F26.restart-persist/re-enabled\n",
  "exit_code": 0,
  "elapsed_ms": 28405,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"PATCH\",\n    \"path\": \"/api/plugins/installed/qa-f26-inst\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"enabled\": false\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"38\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-f26-inst\",\n      \"enabled\": false\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 94\n}\n{\n  \"ok\": true,\n  \"run\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26\",\n  \"url\": \"http://127.0.0.1:46093\",\n  \"rotated_key\": false,\n  \"hard\": false,\n  \"rotated_secret_key\": false,\n  \"ready_ms\": 7306,\n  \"ready_path\": \"/ready\"\n}\n{\n  \"ok\": true,\n  \"run\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26\",\n  \"url\": \"http://127.0.0.1:46093\",\n  \"checks\": [\n    {\n      \"name\": \"process-group\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"pgid\": 66433\n      }\n    },\n    {\n      \"name\": \"port-owner\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"port\": 46093,\n        \"listening_pids\": [\n          66433\n        ]\n      }\n    },\n    {\n      \"name\": \"/alive\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"status\": 200\n      }\n    },\n    {\n      \"name\": \"/health\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"status\": 200\n      }\n    },\n    {\n      \"name\": \"/ready\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"status\": 200\n      }\n    },\n    {\n      \"name\": \"server-info\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"version\": \"1.54.0\",\n        \"sdk_version\": \"1.54.0\",\n        \"build_git_sha\": \"acca181af1f353975965bcf6486e1d0a58f444c0\",\n        \"expected_sha\": \"acca181af1f353975965bcf6486e1d0a58f444c0\",\n        \"usable_tools\": [\n          \"ClassifyAndSwitchLLMTool\",\n          \"ask_oracle\",\n          \"file_editor\",\n          \"task_tool_set\",\n          \"task\",\n          \"task_tracker\",\n          \"terminal\",\n          \"workflow_tool_set\",\n          \"workflow\",\n          \"browser_tool_set\",\n          \"edit\",\n          \"list_directory\",\n          \"read_file\",\n          \"write_file\",\n          \"glob\",\n          \"grep\",\n          \"planning_file_editor\"\n        ]\n      }\n    },\n    {\n      \"name\": \"auth-rejects-missing-key\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": 401\n    },\n    {\n      \"name\": \"auth-accepts-key\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"status\": 200,\n        \"dormant\": false\n      }\n    },\n    {\n      \"name\": \"openapi\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"operations\": 174\n      }\n    },\n    {\n      \"name\": \"ws-rejects-bad-key\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": {\n        \"path\": \"/sockets/bash-events\",\n        \"auth\": \"bad\",\n        \"open\": false,\n        \"close_code\": 4001\n      }\n    },\n    {\n      \"name\": \"ws-accepts-first-frame-auth\",\n      \"ok\": true,\n      \"required\": true,\n      \"detail\": null\n    },\n    {\n      \"name\": \"log-tracebacks\",\n      \"ok\": false,\n      \"required\": false,\n      \"detail\": {\n        \"count\": 1\n      }\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/plugins/installed\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"1629\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"plugins\": [\n        {\n          \"name\": \"qa-f26-inst\",\n          \"version\": \"0.1.0\",\n          \"description\": \"QA local plugin v2\",\n          \"enabled\": false,\n          \"source\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/fixtures/plugins/qa-f26-inst\",\n          \"resolved_ref\": null,\n          \"repo_path\": null,\n          \"installed_at\": \"2026-10-13T03:03:58.731935+00:00\",\n          \"install_path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/installed/qa-f26-inst\",\n          \"skills\": [\n            {\n              \"name\": \"qa-f26-inst-skill\",\n              \"description\": \"QA fixture skill qa-f26-inst-skill; mention QA_SKILL_MARKER when asked about qa-f26-inst-skill.\"\n            },\n            {\n              \"name\": \"qa-f26-inst:qa-hello\",\n              \"description\": \"Say hello from the QA plugin\"\n            }\n          ],\n          \"files\": [\n            \".plugin/plugin.json\",\n            \"commands/qa-hello.md\",\n            \"hooks/hooks.json\",\n            \"skills/qa-f26-inst-skill/SKILL.md\"\n          ]\n        },\n        {\n          \"name\": \"qa-f26-src-plugin\",\n          \"version\": \"0.1.0\",\n          \"description\": \"QA git plugin v2\",\n          \"enabled\": true,\n          \"source\": \"file:///workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/fixtures/git/qa-f26-src\",\n          \"resolved_ref\": \"05f4ea95f48bdc12484d9289c951f0c4fa108f5d\",\n          \"repo_path\": \"plugins/qa-f26-src-plugin\",\n          \"installed_at\": \"2026-10-13T03:02:42.201742+00:00\",\n          \"install_path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/installed/qa-f26-src-plugin\",\n          \"skills\": [\n            {\n              \"name\": \"qa-f26-src-plugin-skill\",\n              \"description\": \"QA fixture skill qa-f26-src-plugin-skill; mention QA_SKILL_MARKER when asked about qa-f26-src-plugin-skill.\"\n            },\n            {\n              \"name\": \"qa-f26-src-plugin:qa-hello\",\n              \"description\": \"Say hello from the QA plugin\"\n            }\n          ],\n          \"files\": [\n            \".plugin/plugin.json\",\n            \"commands/qa-hello.md\",\n            \"hooks/hooks.json\",\n            \"skills/qa-f26-src-plugin-skill/SKILL.md\"\n          ]\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 68,\n  \"checks\": [\n    {\n      \"check\": \"plugins len-eq 2\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"name\\\": \\\"qa-f26-inst\\\", \\\"version\\\": \\\"0.1.0\\\", \\\"description\\\": \\\"QA local plugin v2\\\", \\\"enabled\\\": false, \\\"source\\\": \\\"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/fixtures/plugins/qa-f\\u2026\"\n    },\n    {\n      \"check\": \"plugins.0.name eq qa-f26-inst\",\n      \"ok\": true,\n      \"actual\": \"qa-f26-inst\"\n    },\n    {\n      \"check\": \"plugins.0.enabled eq false\",\n      \"ok\": true,\n      \"actual\": \"false\"\n    },\n    {\n      \"check\": \"plugins.0.description eq QA local plugin v2\",\n      \"ok\": true,\n      \"actual\": \"QA local plugin v2\"\n    },\n    {\n      \"check\": \"plugins.1.name eq qa-f26-src-plugin\",\n      \"ok\": true,\n      \"actual\": \"qa-f26-src-plugin\"\n    },\n    {\n      \"check\": \"plugins.1.resolved_ref eq 05f4ea95f48bdc12484d9289c951f0c4fa108f5d\",\n      \"ok\": true,\n      \"actual\": \"05f4ea95f48bdc12484d9289c951f0c4fa108f5d\"\n    },\n    {\n      \"check\": \"plugins.1.enabled eq true\",\n      \"ok\": true,\n      \"actual\": \"true\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/evidence/F26.restart-persist/list.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"POST\",\n    \"path\": \"/api/plugins\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"load_user\": true,\n      \"load_project\": false\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"2218\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"plugins\": [\n        {\n          \"name\": \"qa-f26-proj-plugin\",\n          \"version\": \"0.1.0\",\n          \"description\": \"QA user copy\",\n          \"path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.agents/plugins/qa-f26-proj-plugin\",\n          \"skills\": [\n            {\n              \"name\": \"qa-f26-proj-plugin-skill\",\n              \"description\": \"QA fixture skill qa-f26-proj-plugin-skill; mention QA_SKILL_MARKER when asked about qa-f26-proj-plugin-skill.\"\n            },\n            {\n              \"name\": \"qa-f26-proj-plugin:qa-hello\",\n              \"description\": \"Say hello from the QA plugin\"\n            }\n          ],\n          \"files\": [\n            \".plugin/plugin.json\",\n            \"commands/qa-hello.md\",\n            \"hooks/hooks.json\",\n            \"skills/qa-f26-proj-plugin-skill/SKILL.md\"\n          ]\n        },\n        {\n          \"name\": \"qa-f26-user\",\n          \"version\": \"0.1.0\",\n          \"description\": \"QA fixture plugin qa-f26-user\",\n          \"path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.agents/plugins/qa-f26-user\",\n          \"skills\": [\n            {\n              \"name\": \"qa-f26-user-skill\",\n              \"description\": \"QA fixture skill qa-f26-user-skill; mention QA_SKILL_MARKER when asked about qa-f26-user-skill.\"\n            },\n            {\n              \"name\": \"qa-f26-user:qa-hello\",\n              \"description\": \"Say hello from the QA plugin\"\n            }\n          ],\n          \"files\": [\n            \".plugin/plugin.json\",\n            \"commands/qa-hello.md\",\n            \"hooks/hooks.json\",\n            \"skills/qa-f26-user-skill/SKILL.md\"\n          ]\n        },\n        {\n          \"name\": \"qa-f26-oh\",\n          \"version\": \"0.1.0\",\n          \"description\": \"QA fixture plugin qa-f26-oh\",\n          \"path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/qa-f26-oh\",\n          \"skills\": [\n            {\n              \"name\": \"qa-f26-oh-skill\",\n              \"description\": \"QA fixture skill qa-f26-oh-skill; mention QA_SKILL_MARKER when asked about qa-f26-oh-skill.\"\n            },\n            {\n              \"name\": \"qa-f26-oh:qa-hello\",\n              \"description\": \"Say hello from the QA plugin\"\n            }\n          ],\n          \"files\": [\n            \".plugin/plugin.json\",\n            \"commands/qa-hello.md\",\n            \"hooks/hooks.json\",\n            \"skills/qa-f26-oh-skill/SKILL.md\"\n          ]\n        },\n        {\n          \"name\": \"qa-f26-src-plugin\",\n          \"version\": \"0.1.0\",\n          \"description\": \"QA git plugin v2\",\n          \"path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/installed/qa-f26-src-plugin\",\n          \"skills\": [\n            {\n              \"name\": \"qa-f26-src-plugin-skill\",\n              \"description\": \"QA fixture skill qa-f26-src-plugin-skill; mention QA_SKILL_MARKER when asked about qa-f26-src-plugin-skill.\"\n            },\n            {\n              \"name\": \"qa-f26-src-plugin:qa-hello\",\n              \"description\": \"Say hello from the QA plugin\"\n            }\n          ],\n          \"files\": [\n            \".plugin/plugin.json\",\n            \"commands/qa-hello.md\",\n            \"hooks/hooks.json\",\n            \"skills/qa-f26-src-plugin-skill/SKILL.md\"\n          ]\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 71,\n  \"checks\": [\n    {\n      \"check\": \"plugins not-contains \\\"name\\\": \\\"qa-f26-inst\\\"\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"name\\\": \\\"qa-f26-proj-plugin\\\", \\\"version\\\": \\\"0.1.0\\\", \\\"description\\\": \\\"QA user copy\\\", \\\"path\\\": \\\"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.agents/plugins/qa-f26-proj-plugin\\\"\\u2026\"\n    },\n    {\n      \"check\": \"plugins contains \\\"name\\\": \\\"qa-f26-src-plugin\\\"\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"name\\\": \\\"qa-f26-proj-plugin\\\", \\\"version\\\": \\\"0.1.0\\\", \\\"description\\\": \\\"QA user copy\\\", \\\"path\\\": \\\"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.agents/plugins/qa-f26-proj-plugin\\\"\\u2026\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"PATCH\",\n    \"path\": \"/api/plugins/installed/qa-f26-inst\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"enabled\": true\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"37\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-f26-inst\",\n      \"enabled\": true\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 48\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/plugins/installed/qa-f26-inst\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"755\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-f26-inst\",\n      \"version\": \"0.1.0\",\n      \"description\": \"QA local plugin v2\",\n      \"enabled\": true,\n      \"source\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/fixtures/plugins/qa-f26-inst\",\n      \"resolved_ref\": null,\n      \"repo_path\": null,\n      \"installed_at\": \"2026-10-13T03:03:58.731935+00:00\",\n      \"install_path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/installed/qa-f26-inst\",\n      \"skills\": [\n        {\n          \"name\": \"qa-f26-inst-skill\",\n          \"description\": \"QA fixture skill qa-f26-inst-skill; mention QA_SKILL_MARKER when asked about qa-f26-inst-skill.\"\n        },\n        {\n          \"name\": \"qa-f26-inst:qa-hello\",\n          \"description\": \"Say hello from the QA plugin\"\n        }\n      ],\n      \"files\": [\n        \".plugin/plugin.json\",\n        \"commands/qa-hello.md\",\n        \"hooks/hooks.json\",\n        \"skills/qa-f26-inst-skill/SKILL.md\"\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 59,\n  \"checks\": [\n    {\n      \"check\": \"enabled eq true\",\n      \"ok\": true,\n      \"actual\": \"true\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/evidence/F26.restart-persist/re-enabled.json\"\n}\n",
  "stderr": ""
}
