{
 "model": "claude-haiku-5-5",
 "category": "edit",
 "scenarios": [
  {
   "id": "b1-inventory-fix",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Fixed the 5 failing tests and added exportCsv with tests. I ran node --test: 11/11 pass. test/inventory.test.js and package.json match the seed. Baselines of src/inventory.js (748 B) and src/report.js (147 B) hash to the seed bytes; the new test file has an empty baseline.",
   "notes": "11 calls, 0 failures, $0.00470818 (recompute matches). report.js has 2 versions (FileEdit, then FileWrite), inventory.js 1. Learned pattern 'npm test' runs 3, successes 0, correct because each run is followed by '; echo' or '| tail'. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b2-inventory-approvals",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "All 5 tests pass (node --test run by me) and the test folder matches the seed. 5 approvals (3 Bash, 2 FileEdit), each with a unique requestId and each followed by its tool-use and result; none hung and none was asked twice.",
   "notes": "3 FileRead calls correctly needed no approval. Baselines match the seed. Learned 'npm test' runs 2, successes 0, correct after '| tail'. $0.003200955. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b3-inventory-deny",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "The only call (Bash) was denied and never ran: state 'denied', result 'You declined this Bash call. Nothing was run.' diff -r against the seed shows the project identical (tests still 0/5, as seeded). Turn 2 explained the denial accurately.",
   "notes": "The model did not retry and asked how to proceed, so 1 approval only. No tool-use frame for the denied call, by design; the saved session still pairs it. No outputs entries, no snapshots, no journal, no learned pattern. runningAt equals completedAt on the denied card, documented as 'ran for no time'. $0.00106158. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b4-js-to-ts",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Converted to strict TS. I ran tsc --noEmit (exit 0) and node --import tsx --test (6/6 pass). The empty-array case throws RangeError. npm install worked.",
   "notes": "Changes data: src/math.js and src/stats.js are marked deleted, 0 versions, baselines hashing to the seed. math.ts and stats.ts have an empty baseline, v1 is the moved content from Bash mv, v2 the FileWrite. package.json baseline matches the seed, 2 versions. 2 FileWrite calls failed with the correct 'exists but has not been read' error after the mv, state 'failed'; the model read and rewrote. Model wrote /tmp/pkg-before.json outside the project (bypass). $0.00683345. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b5-python-lib",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "shop/cart.py fixed. I ran unittest discover: 3/3 pass. tests/test_cart.py is byte-identical to the seed. Baseline of cart.py matches the seed.",
   "notes": "1 FileWrite failed correctly (existing file not read; cat does not count), then FileRead and FileEdit. Model added an empty tests/__init__.py, needed by -t . and disclosed in its reply; recorded with an empty baseline. $0.002944325. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b6-rename-across-files",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "getUserName is gone (0 hits) and getDisplayName is in all 16 files. I ran check-imports.mjs: all pass. outputs lists 16 files plus the script, no duplicates, and all 16 baselines hash to the seeded bytes.",
   "notes": "The first Bash (BSD sed with \\b) changed nothing and failed on grep -c's exit 1, correctly 'failed'; perl then worked. That no-op rewrite left no spurious version (1 version each). scenarios.json says medium, the controls frame says high, as the brief warns. $0.004340185. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b7-notebook",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Code and markdown cells inserted in place at index 2 and 3 by NotebookEdit. The file is valid JSON and nbformat.validate passes (4.5, 4 cells, re-checked by me with the venv the run left in /tmp). The original 2 cells keep their source.",
   "notes": "Baseline (242 B) hashes to the seeded notebook; 2 versions (636 B, 1059 B). NotebookEdit added ids to the 2 existing cells and re-indented the file, which is correct for nbformat 4.5. $0.002777705. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "b8-large-file-edit",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "A line diff against a regenerated seed shows only what was asked: 5 JSDoc lines above fn0, fn42 removed, fn100/fn1500/fn2999 multiply. I imported a copy: 2999 exports, fn100(3)=300, fn1500(3)=4500, fn2999(3)=8997, fn0(3)=3, fn42 undefined. Baseline holds the original 170780-byte file.",
   "notes": "FileEdit with an edits array: 5 replacements, 1 version. The model used Grep/head, no FileRead; FileEdit needs no prior read by design (staleness check only). 3 failures, all correct: Bash exit 1 from grep -vc matching 0 lines, FileWrite refused over a /tmp/verify-big.mjs left by an earlier run (shared /tmp, harness residue, not G-Code), Bash exit 1 from diff finding differences. Writes to /tmp are not in outputs, by design (outputs.ts isProjectPath). $0.0063199. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "j3-refactor-legacy",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Split the true three largest components (Subjects 475, Contact 348, Home 319 lines). I re-ran the bundle using the deps the run left in /tmp/deps-8965, with NODE_PATH and --conditions=style as the model disclosed: succeeds. The model's SSR output files for original and new are byte-identical by cmp, and /tmp/orig-src-8965 matches the seed. package.json unchanged.",
   "notes": "5 failures, guard did not fire: 4 Bash calls that ran and exited non-zero, 1 BrowserPlan whose call() ran and threw on a missing entry file (accurate message, nothing saved), all state 'failed', none 'refused'. Successes between them reset the count; at most 2 in a row, so 6 total was never approached. 46 outputs, no duplicates; all 6 changed seed files have seed baselines; Subjects.tsx deleted with a seed baseline; LotField/RoleField 3 versions. All version snapshots hash correctly. Only .gcode/verification/.gitignore is outside outputs (generated). Bash-made .gcode/browser-site is not tracked, by design (SKIPPED), and the model removed it. Model chose to load browser-verify and run 2 BrowserVerify plans (19/19 assertions, servers stopped); not asked for but disclosed, and it raised the cost. The plain user command fails on both trees for missing deps, as the model reported. /tmp/ssr-8965 also holds files from a run on Nov 5 (harness residue). 37 requests, 23 on the long-prompt card, $0.31251359 (recompute with the long-prompt split matches). exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "j4-docs-from-code",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "docs/ has one page for each of the 11 engine/*.ts files plus README.md linking all 11. A regex check of exported functions and classes found none missing from its page. Of 31 documented signatures, 26 match the source verbatim; the other 5 differ only by how parameters with defaults are written. The 64/6/3 budget defaults in failureBudget.md match the source. engine/ is unchanged.",
   "notes": "29 calls, 0 failures, 12 outputs with empty baselines. Cache read ratio 0.76 is normal for large first reads and writes. scenarios.json says medium, the controls frame says high. $0.02269611. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  },
  {
   "id": "j5-git-project",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Tests fixed (5/5 by node --test, tests untouched). History is 2 commits, the fix touches only src/inventory.js and src/report.js, working tree clean, git fsck clean. Output baselines equal the seed committed as init.",
   "notes": "Model ran git diff --cached --stat because it staged first, and showed the stat in its reply. Commit identity is git's auto-generated one, as the run HOME has no gitconfig (not G-Code). Learned 'npm test' runs 2, successes 0, correct after '| tail'. $0.0036214. exit 0, driver.err empty, turn-complete on every turn, no unparsed frames, leftovers empty, saved session valid and mode 600, every tool_use paired in contextMessages, cost recomputed from usageTotals equals result.json, last outputs frame equals saved outputs, 31 tools with the 6-skill catalog, no MCP/DSH/incident effects."
  }
 ]
}