{
  "file": "F15-git.md",
  "bullet": "Files of one commit (`F15.commit-changes`).",
  "ids": [
    "F15.commit-changes"
  ],
  "line": 475,
  "script": "control-agent-server api GET \"/api/git/commits/$C1/changes\" --query path=\"$REPO\" --expect 200 --check . len-eq 2 \\\n  --check 0.status eq ADDED --check 0.path eq README.md --check 1.status eq ADDED --check 1.path eq src/app.py \\\n  --save F15.commit-changes/root\ncontrol-agent-server api GET \"/api/git/commits/$C2/changes\" --query path=\"$REPO\" --expect 200 --check . len-eq 1 \\\n  --check 0.status eq ADDED --check 0.path eq src/util.py --save F15.commit-changes/add-util\ncontrol-agent-server api GET \"/api/git/commits/${C2:0:7}/changes\" --query path=\"$REPO\" --expect 200 --check 0.path eq src/util.py\ncontrol-agent-server api GET \"/api/git/commits/$C3/changes\" --query path=\"$F/hist\" --expect 200 --check . len-eq 3 \\\n  --check 0.status eq DELETED --check 0.path eq src/app.py --check 1.status eq ADDED --check 1.path eq src/main.py \\\n  --check 2.status eq DELETED --check 2.path eq src/util.py --save F15.commit-changes/delete-rename\ncontrol-agent-server api GET /api/git/commits/deadbeefdeadbeef/changes --query path=\"$REPO\" --expect 400 \\\n  --check detail contains 'Git command failed' --save F15.commit-changes/unknown\ncontrol-agent-server api GET /api/git/commits/xyz/changes --query path=\"$REPO\" --expect 422 --check detail.0.loc contains sha\ncontrol-agent-server api GET /api/git/commits/abc/changes --query path=\"$REPO\" --expect 422\ncontrol-agent-server api GET \"/api/git/commits/$C2/changes\" --expect 422 --check detail.0.loc contains path\n",
  "exit_code": 0,
  "elapsed_ms": 2286,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/28af91cef6f2d1be2b7052ef2e1685494d297ab5/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"78\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": [\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"README.md\"\n      },\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"src/app.py\"\n      }\n    ],\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 50,\n  \"checks\": [\n    {\n      \"check\": \". len-eq 2\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"README.md\\\"}, {\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"src/app.py\\\"}]\"\n    },\n    {\n      \"check\": \"0.status eq ADDED\",\n      \"ok\": true,\n      \"actual\": \"ADDED\"\n    },\n    {\n      \"check\": \"0.path eq README.md\",\n      \"ok\": true,\n      \"actual\": \"README.md\"\n    },\n    {\n      \"check\": \"1.status eq ADDED\",\n      \"ok\": true,\n      \"actual\": \"ADDED\"\n    },\n    {\n      \"check\": \"1.path eq src/app.py\",\n      \"ok\": true,\n      \"actual\": \"src/app.py\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/evidence/F15.commit-changes/root.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/dc6229eb1a87e4b57578335a665ab05f1feaa545/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"41\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": [\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"src/util.py\"\n      }\n    ],\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 52,\n  \"checks\": [\n    {\n      \"check\": \". len-eq 1\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"src/util.py\\\"}]\"\n    },\n    {\n      \"check\": \"0.status eq ADDED\",\n      \"ok\": true,\n      \"actual\": \"ADDED\"\n    },\n    {\n      \"check\": \"0.path eq src/util.py\",\n      \"ok\": true,\n      \"actual\": \"src/util.py\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/evidence/F15.commit-changes/add-util.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/dc6229e/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"41\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": [\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"src/util.py\"\n      }\n    ],\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 51,\n  \"checks\": [\n    {\n      \"check\": \"0.path eq src/util.py\",\n      \"ok\": true,\n      \"actual\": \"src/util.py\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/178ba9b51245aac9e9facdab770cc26fef79df99/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15/hist\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"124\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": [\n      {\n        \"status\": \"DELETED\",\n        \"path\": \"src/app.py\"\n      },\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"src/main.py\"\n      },\n      {\n        \"status\": \"DELETED\",\n        \"path\": \"src/util.py\"\n      }\n    ],\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 72,\n  \"checks\": [\n    {\n      \"check\": \". len-eq 3\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"status\\\": \\\"DELETED\\\", \\\"path\\\": \\\"src/app.py\\\"}, {\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"src/main.py\\\"}, {\\\"status\\\": \\\"DELETED\\\", \\\"path\\\": \\\"src/util.py\\\"}]\"\n    },\n    {\n      \"check\": \"0.status eq DELETED\",\n      \"ok\": true,\n      \"actual\": \"DELETED\"\n    },\n    {\n      \"check\": \"0.path eq src/app.py\",\n      \"ok\": true,\n      \"actual\": \"src/app.py\"\n    },\n    {\n      \"check\": \"1.status eq ADDED\",\n      \"ok\": true,\n      \"actual\": \"ADDED\"\n    },\n    {\n      \"check\": \"1.path eq src/main.py\",\n      \"ok\": true,\n      \"actual\": \"src/main.py\"\n    },\n    {\n      \"check\": \"2.status eq DELETED\",\n      \"ok\": true,\n      \"actual\": \"DELETED\"\n    },\n    {\n      \"check\": \"2.path eq src/util.py\",\n      \"ok\": true,\n      \"actual\": \"src/util.py\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/evidence/F15.commit-changes/delete-rename.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 400,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/deadbeefdeadbeef/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 400,\n    \"headers\": {\n      \"content-length\": \"94\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": \"Git command failed: git --no-pager rev-parse --verify 'deadbeefdeadbeef^{commit}'\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 49,\n  \"checks\": [\n    {\n      \"check\": \"detail contains Git command failed\",\n      \"ok\": true,\n      \"actual\": \"Git command failed: git --no-pager rev-parse --verify 'deadbeefdeadbeef^{commit}'\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/evidence/F15.commit-changes/unknown.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/xyz/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 422,\n    \"headers\": {\n      \"content-length\": \"180\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": [\n        {\n          \"type\": \"string_pattern_mismatch\",\n          \"loc\": [\n            \"path\",\n            \"sha\"\n          ],\n          \"msg\": \"String should match pattern '^[0-9a-fA-F]{4,64}$'\",\n          \"input\": \"xyz\",\n          \"ctx\": {\n            \"pattern\": \"^[0-9a-fA-F]{4,64}$\"\n          }\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 44,\n  \"checks\": [\n    {\n      \"check\": \"detail.0.loc contains sha\",\n      \"ok\": true,\n      \"actual\": \"[\\\"path\\\", \\\"sha\\\"]\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/abc/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 422,\n    \"headers\": {\n      \"content-length\": \"180\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": [\n        {\n          \"type\": \"string_pattern_mismatch\",\n          \"loc\": [\n            \"path\",\n            \"sha\"\n          ],\n          \"msg\": \"String should match pattern '^[0-9a-fA-F]{4,64}$'\",\n          \"input\": \"abc\",\n          \"ctx\": {\n            \"pattern\": \"^[0-9a-fA-F]{4,64}$\"\n          }\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 47\n}\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/commits/dc6229eb1a87e4b57578335a665ab05f1feaa545/changes\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\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            \"query\",\n            \"path\"\n          ],\n          \"msg\": \"Field required\",\n          \"input\": null\n        }\n      ]\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 42,\n  \"checks\": [\n    {\n      \"check\": \"detail.0.loc contains path\",\n      \"ok\": true,\n      \"actual\": \"[\\\"query\\\", \\\"path\\\"]\"\n    }\n  ]\n}\n",
  "stderr": ""
}
