{
  "file": "F26-plugins.md",
  "bullet": "Install from GitHub (`F26.install-github`).",
  "ids": [
    "F26.install-github"
  ],
  "line": 358,
  "script": "control-agent-server api POST /api/plugins/install --json '{\"source\": \"github:<redacted:unrelated-repository>\", \"repo_path\": \"plugins/city-weather\"}' \\\n  --timeout 240 --expect 200 --check name eq city-weather --check source eq github:<redacted:unrelated-repository> \\\n  --check repo_path eq plugins/city-weather --check resolved_ref matches '^[0-9a-f]{40}$' \\\n  --check skills contains '\"name\": \"city-weather:now\"' --save F26.install-github/install\ncontrol-agent-server api GET /api/plugins/installed/city-weather --expect 200 --check repo_path eq plugins/city-weather \\\n  --check resolved_ref matches '^[0-9a-f]{40}$' --save F26.install-github/get\ncontrol-agent-server state ls 'home/.openhands/cache/extensions/extensions-*/.git/HEAD' --expect-count 1\ntest ! -e \"$I/city-weather/.git\"\ncontrol-agent-server api DELETE /api/plugins/installed/city-weather --expect 200\ncontrol-agent-server api GET /api/plugins/installed/city-weather --expect 404\n",
  "exit_code": 0,
  "elapsed_ms": 8866,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"POST\",\n    \"path\": \"/api/plugins/install\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"source\": \"github:<redacted:unrelated-repository>\",\n      \"repo_path\": \"plugins/city-weather\"\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"692\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"city-weather\",\n      \"version\": \"1.0.0\",\n      \"description\": \"Get current weather, time, and precipitation forecast for any city\",\n      \"enabled\": true,\n      \"source\": \"github:<redacted:unrelated-repository>\",\n      \"resolved_ref\": \"f1919e4e3e02c0bab65c2417761aee775f1ffbaa\",\n      \"repo_path\": \"plugins/city-weather\",\n      \"installed_at\": \"2026-10-13T03:02:04.029638+00:00\",\n      \"install_path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/installed/city-weather\",\n      \"skills\": [\n        {\n          \"name\": \"city-weather:now\",\n          \"description\": \"Get current weather, time, and precipitation forecast for a city\"\n        }\n      ],\n      \"files\": [\n        \".claude-plugin/plugin.json\",\n        \".codex-plugin/plugin.json\",\n        \".plugin/plugin.json\",\n        \"README.md\",\n        \"commands/now.md\"\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 2497,\n  \"checks\": [\n    {\n      \"check\": \"name eq city-weather\",\n      \"ok\": true,\n      \"actual\": \"city-weather\"\n    },\n    {\n      \"check\": \"source eq github:<redacted:unrelated-repository>\",\n      \"ok\": true,\n      \"actual\": \"github:<redacted:unrelated-repository>\"\n    },\n    {\n      \"check\": \"repo_path eq plugins/city-weather\",\n      \"ok\": true,\n      \"actual\": \"plugins/city-weather\"\n    },\n    {\n      \"check\": \"resolved_ref matches ^[0-9a-f]{40}$\",\n      \"ok\": true,\n      \"actual\": \"f1919e4e3e02c0bab65c2417761aee775f1ffbaa\"\n    },\n    {\n      \"check\": \"skills contains \\\"name\\\": \\\"city-weather:now\\\"\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"name\\\": \\\"city-weather:now\\\", \\\"description\\\": \\\"Get current weather, time, and precipitation forecast for a city\\\"}]\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/evidence/F26.install-github/install.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/plugins/installed/city-weather\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"692\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"city-weather\",\n      \"version\": \"1.0.0\",\n      \"description\": \"Get current weather, time, and precipitation forecast for any city\",\n      \"enabled\": true,\n      \"source\": \"github:<redacted:unrelated-repository>\",\n      \"resolved_ref\": \"f1919e4e3e02c0bab65c2417761aee775f1ffbaa\",\n      \"repo_path\": \"plugins/city-weather\",\n      \"installed_at\": \"2026-10-13T03:02:04.029638+00:00\",\n      \"install_path\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/home/.openhands/plugins/installed/city-weather\",\n      \"skills\": [\n        {\n          \"name\": \"city-weather:now\",\n          \"description\": \"Get current weather, time, and precipitation forecast for a city\"\n        }\n      ],\n      \"files\": [\n        \".claude-plugin/plugin.json\",\n        \".codex-plugin/plugin.json\",\n        \".plugin/plugin.json\",\n        \"README.md\",\n        \"commands/now.md\"\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 120,\n  \"checks\": [\n    {\n      \"check\": \"repo_path eq plugins/city-weather\",\n      \"ok\": true,\n      \"actual\": \"plugins/city-weather\"\n    },\n    {\n      \"check\": \"resolved_ref matches ^[0-9a-f]{40}$\",\n      \"ok\": true,\n      \"actual\": \"f1919e4e3e02c0bab65c2417761aee775f1ffbaa\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-030021-e114-map-f26/evidence/F26.install-github/get.json\"\n}\n{\n  \"ok\": true,\n  \"pattern\": \"home/.openhands/cache/extensions/extensions-*/.git/HEAD\",\n  \"count\": 1,\n  \"files\": [\n    {\n      \"path\": \"home/.openhands/cache/extensions/extensions-e40d070fedd3f46c/.git/HEAD\",\n      \"bytes\": 21,\n      \"mode\": \"0o600\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"DELETE\",\n    \"path\": \"/api/plugins/installed/city-weather\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"47\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"message\": \"Plugin 'city-weather' uninstalled\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 231\n}\n{\n  \"ok\": true,\n  \"status\": 404,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/plugins/installed/city-weather\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 404,\n    \"headers\": {\n      \"content-length\": \"51\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": \"Plugin 'city-weather' is not installed\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 109\n}\n",
  "stderr": ""
}
