{
  "file": "F28-canvas-extensions.md",
  "bullet": "Enable and disable (`F28.enable-disable`).",
  "ids": [
    "F28.enable-disable"
  ],
  "line": 358,
  "script": "control-agent-server api PATCH /api/canvas-extensions/installed/qa-canvas --json '{\"enabled\": true}' \\\n  --expect 200 --check name eq qa-canvas --check enabled eq true --save F28.enable-disable/enable\ncontrol-agent-server api GET /api/canvas-extensions/installed/qa-canvas --check enabled eq true\ncontrol-agent-server state cat home/.openhands/canvas-extensions/installed/.installed.json --check extensions.qa-canvas.enabled eq true\ncontrol-agent-server api PATCH /api/canvas-extensions/installed/qa-canvas --json '{\"enabled\": false}' \\\n  --expect 200 --check enabled eq false --save F28.enable-disable/disable\ncontrol-agent-server api GET /api/canvas-extensions/installed/qa-canvas --check enabled eq false\ncontrol-agent-server state cat home/.openhands/canvas-extensions/installed/.installed.json --check extensions.qa-canvas.enabled eq false\ncontrol-agent-server api PATCH /api/canvas-extensions/installed/qa-canvas --json '{\"enabled\": \"maybe\"}' --expect 422\ncontrol-agent-server api PATCH /api/canvas-extensions/installed/qa-canvas --json '{}' --expect 422\ncontrol-agent-server api GET /api/canvas-extensions/installed/qa-canvas --check enabled eq false\n",
  "exit_code": 0,
  "elapsed_ms": 2441,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"PATCH\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"enabled\": true\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"35\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-canvas\",\n      \"enabled\": true\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 44,\n  \"checks\": [\n    {\n      \"check\": \"name eq qa-canvas\",\n      \"ok\": true,\n      \"actual\": \"qa-canvas\"\n    },\n    {\n      \"check\": \"enabled eq true\",\n      \"ok\": true,\n      \"actual\": \"true\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/evidence/F28.enable-disable/enable.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"717\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-canvas\",\n      \"version\": \"0.1.0\",\n      \"description\": \"QA fixture Canvas app\",\n      \"enabled\": true,\n      \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-canvas\",\n      \"requested_ref\": null,\n      \"resolved_ref\": null,\n      \"repo_path\": null,\n      \"installed_at\": \"2026-10-13T02:42:21.953802+00:00\",\n      \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-canvas\",\n      \"manifest\": {\n        \"schema_version\": 1,\n        \"name\": \"qa-canvas\",\n        \"display_name\": \"QA qa-canvas\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"entrypoint\": \"dist/index.js\",\n        \"contributes\": {\n          \"pages\": [\n            {\n              \"id\": \"main\",\n              \"title\": \"QA qa-canvas\",\n              \"path\": \"/qa-canvas\"\n            }\n          ]\n        },\n        \"icon\": \"assets/icon.svg\"\n      }\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 46,\n  \"checks\": [\n    {\n      \"check\": \"enabled eq true\",\n      \"ok\": true,\n      \"actual\": \"true\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"path\": \"home/.openhands/canvas-extensions/installed/.installed.json\",\n  \"bytes\": 1697,\n  \"mode\": \"0o600\",\n  \"content\": {\n    \"extensions\": {\n      \"qa-canvas\": {\n        \"name\": \"qa-canvas\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"enabled\": true,\n        \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-canvas\",\n        \"requested_ref\": null,\n        \"resolved_ref\": null,\n        \"repo_path\": null,\n        \"installed_at\": \"2026-10-13T02:42:21.953802+00:00\",\n        \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-canvas\"\n      },\n      \"qa-backend\": {\n        \"name\": \"qa-backend\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"enabled\": false,\n        \"source\": \"file:///workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-backend\",\n        \"requested_ref\": null,\n        \"resolved_ref\": \"f3946ddff93a691d5cf27c3d02095311b16a572c\",\n        \"repo_path\": null,\n        \"installed_at\": \"2026-10-13T02:42:25.198765+00:00\",\n        \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-backend\"\n      },\n      \"qa-f28-logs\": {\n        \"name\": \"qa-f28-logs\",\n        \"version\": \"0.1.0\",\n        \"description\": \"\",\n        \"enabled\": false,\n        \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/f28\",\n        \"requested_ref\": null,\n        \"resolved_ref\": null,\n        \"repo_path\": \"qa-f28-logs\",\n        \"installed_at\": \"2026-10-13T02:42:29.519367+00:00\",\n        \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-f28-logs\"\n      }\n    }\n  },\n  \"checks\": [\n    {\n      \"check\": \"extensions.qa-canvas.enabled eq true\",\n      \"ok\": true,\n      \"actual\": \"true\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"PATCH\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"enabled\": false\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"36\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-canvas\",\n      \"enabled\": false\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 46,\n  \"checks\": [\n    {\n      \"check\": \"enabled eq false\",\n      \"ok\": true,\n      \"actual\": \"false\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/evidence/F28.enable-disable/disable.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"718\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-canvas\",\n      \"version\": \"0.1.0\",\n      \"description\": \"QA fixture Canvas app\",\n      \"enabled\": false,\n      \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-canvas\",\n      \"requested_ref\": null,\n      \"resolved_ref\": null,\n      \"repo_path\": null,\n      \"installed_at\": \"2026-10-13T02:42:21.953802+00:00\",\n      \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-canvas\",\n      \"manifest\": {\n        \"schema_version\": 1,\n        \"name\": \"qa-canvas\",\n        \"display_name\": \"QA qa-canvas\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"entrypoint\": \"dist/index.js\",\n        \"contributes\": {\n          \"pages\": [\n            {\n              \"id\": \"main\",\n              \"title\": \"QA qa-canvas\",\n              \"path\": \"/qa-canvas\"\n            }\n          ]\n        },\n        \"icon\": \"assets/icon.svg\"\n      }\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 51,\n  \"checks\": [\n    {\n      \"check\": \"enabled eq false\",\n      \"ok\": true,\n      \"actual\": \"false\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"path\": \"home/.openhands/canvas-extensions/installed/.installed.json\",\n  \"bytes\": 1698,\n  \"mode\": \"0o600\",\n  \"content\": {\n    \"extensions\": {\n      \"qa-canvas\": {\n        \"name\": \"qa-canvas\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"enabled\": false,\n        \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-canvas\",\n        \"requested_ref\": null,\n        \"resolved_ref\": null,\n        \"repo_path\": null,\n        \"installed_at\": \"2026-10-13T02:42:21.953802+00:00\",\n        \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-canvas\"\n      },\n      \"qa-backend\": {\n        \"name\": \"qa-backend\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"enabled\": false,\n        \"source\": \"file:///workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-backend\",\n        \"requested_ref\": null,\n        \"resolved_ref\": \"f3946ddff93a691d5cf27c3d02095311b16a572c\",\n        \"repo_path\": null,\n        \"installed_at\": \"2026-10-13T02:42:25.198765+00:00\",\n        \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-backend\"\n      },\n      \"qa-f28-logs\": {\n        \"name\": \"qa-f28-logs\",\n        \"version\": \"0.1.0\",\n        \"description\": \"\",\n        \"enabled\": false,\n        \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/f28\",\n        \"requested_ref\": null,\n        \"resolved_ref\": null,\n        \"repo_path\": \"qa-f28-logs\",\n        \"installed_at\": \"2026-10-13T02:42:29.519367+00:00\",\n        \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-f28-logs\"\n      }\n    }\n  },\n  \"checks\": [\n    {\n      \"check\": \"extensions.qa-canvas.enabled eq false\",\n      \"ok\": true,\n      \"actual\": \"false\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"PATCH\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {\n      \"enabled\": \"maybe\"\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 422,\n    \"headers\": {\n      \"content-length\": \"144\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": [\n        {\n          \"type\": \"bool_parsing\",\n          \"loc\": [\n            \"body\",\n            \"enabled\"\n          ],\n          \"msg\": \"Input should be a valid boolean, unable to interpret input\",\n          \"input\": \"maybe\"\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 44\n}\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"PATCH\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": {},\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 422,\n    \"headers\": {\n      \"content-length\": \"90\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": [\n        {\n          \"type\": \"missing\",\n          \"loc\": [\n            \"body\",\n            \"enabled\"\n          ],\n          \"msg\": \"Field required\",\n          \"input\": {}\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 45\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/canvas-extensions/installed/qa-canvas\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"718\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"name\": \"qa-canvas\",\n      \"version\": \"0.1.0\",\n      \"description\": \"QA fixture Canvas app\",\n      \"enabled\": false,\n      \"source\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/fixtures/canvas/qa-canvas\",\n      \"requested_ref\": null,\n      \"resolved_ref\": null,\n      \"repo_path\": null,\n      \"installed_at\": \"2026-10-13T02:42:21.953802+00:00\",\n      \"install_path\": \"/workspace/verification-artifacts/runs/20261013-024207-5ac2-map-f28/home/.openhands/canvas-extensions/installed/qa-canvas\",\n      \"manifest\": {\n        \"schema_version\": 1,\n        \"name\": \"qa-canvas\",\n        \"display_name\": \"QA qa-canvas\",\n        \"version\": \"0.1.0\",\n        \"description\": \"QA fixture Canvas app\",\n        \"entrypoint\": \"dist/index.js\",\n        \"contributes\": {\n          \"pages\": [\n            {\n              \"id\": \"main\",\n              \"title\": \"QA qa-canvas\",\n              \"path\": \"/qa-canvas\"\n            }\n          ]\n        },\n        \"icon\": \"assets/icon.svg\"\n      }\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 46,\n  \"checks\": [\n    {\n      \"check\": \"enabled eq false\",\n      \"ok\": true,\n      \"actual\": \"false\"\n    }\n  ]\n}\n",
  "stderr": ""
}
