{
  "file": "F15-git.md",
  "bullet": "Explicit base and its errors (`F15.changes-ref`).",
  "ids": [
    "F15.changes-ref"
  ],
  "line": 211,
  "script": "control-agent-server api GET /api/git/changes --query path=\"$F/branch\" --query ref=HEAD --expect 200 --check . len-eq 2 \\\n  --check 0.path eq README.md --check 1.path eq notes.txt --save F15.changes-ref/head\ncontrol-agent-server api GET /api/git/changes --query path=\"$REPO\" --query ref=\"$C1\" --expect 200 --check . len-eq 3 \\\n  --check 2.status eq ADDED --check 2.path eq src/util.py --save F15.changes-ref/older-commit\ncontrol-agent-server api GET /api/git/changes --query path=\"$REPO\" --query ref=qa-f15-no-such-ref --expect 400 \\\n  --check detail contains 'Git command failed' --save F15.changes-ref/unknown\ncontrol-agent-server api GET /api/git/changes --query path=\"$REPO\" --query ref=\"--output=$F/injected\" --expect 400\ntest ! -e \"$F/injected\"\ncontrol-agent-server api GET /api/git/changes --expect 422 --check detail.0.loc contains path\n",
  "exit_code": 0,
  "elapsed_ms": 1712,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15/branch\"\n      ],\n      [\n        \"ref\",\n        \"HEAD\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"79\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": [\n      {\n        \"status\": \"UPDATED\",\n        \"path\": \"README.md\"\n      },\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"notes.txt\"\n      }\n    ],\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 62,\n  \"checks\": [\n    {\n      \"check\": \". len-eq 2\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"status\\\": \\\"UPDATED\\\", \\\"path\\\": \\\"README.md\\\"}, {\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"notes.txt\\\"}]\"\n    },\n    {\n      \"check\": \"0.path eq README.md\",\n      \"ok\": true,\n      \"actual\": \"README.md\"\n    },\n    {\n      \"check\": \"1.path eq notes.txt\",\n      \"ok\": true,\n      \"actual\": \"notes.txt\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/evidence/F15.changes-ref/head.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ],\n      [\n        \"ref\",\n        \"28af91cef6f2d1be2b7052ef2e1685494d297ab5\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"119\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": [\n      {\n        \"status\": \"UPDATED\",\n        \"path\": \"README.md\"\n      },\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"notes.txt\"\n      },\n      {\n        \"status\": \"ADDED\",\n        \"path\": \"src/util.py\"\n      }\n    ],\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 55,\n  \"checks\": [\n    {\n      \"check\": \". len-eq 3\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"status\\\": \\\"UPDATED\\\", \\\"path\\\": \\\"README.md\\\"}, {\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"notes.txt\\\"}, {\\\"status\\\": \\\"ADDED\\\", \\\"path\\\": \\\"src/util.py\\\"}]\"\n    },\n    {\n      \"check\": \"2.status eq ADDED\",\n      \"ok\": true,\n      \"actual\": \"ADDED\"\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.changes-ref/older-commit.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 400,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ],\n      [\n        \"ref\",\n        \"qa-f15-no-such-ref\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 400,\n    \"headers\": {\n      \"content-length\": \"96\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": \"Git command failed: git --no-pager rev-parse --verify 'qa-f15-no-such-ref^{commit}'\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 74,\n  \"checks\": [\n    {\n      \"check\": \"detail contains Git command failed\",\n      \"ok\": true,\n      \"actual\": \"Git command failed: git --no-pager rev-parse --verify 'qa-f15-no-such-ref^{commit}'\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/evidence/F15.changes-ref/unknown.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 400,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/changes\",\n    \"query\": [\n      [\n        \"path\",\n        \"/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15-repo\"\n      ],\n      [\n        \"ref\",\n        \"--output=/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15/injected\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 400,\n    \"headers\": {\n      \"content-length\": \"179\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": \"Git command failed: git --no-pager rev-parse --verify '--output=/workspace/verification-artifacts/runs/20261013-021709-764e-map-f15/fixtures/qa-f15/injected^{commit}'\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 70\n}\n{\n  \"ok\": true,\n  \"status\": 422,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"/api/git/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\": 43,\n  \"checks\": [\n    {\n      \"check\": \"detail.0.loc contains path\",\n      \"ok\": true,\n      \"actual\": \"[\\\"query\\\", \\\"path\\\"]\"\n    }\n  ]\n}\n",
  "stderr": ""
}
