{
 "model": "claude-haiku-5-5",
 "category": "stress-agents-vision-cli",
 "scenarios": [
  {
   "id": "h1-same-project-4x",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Four drivers ran on one project and one HOME: d1 added JSDoc to src/inventory.js, d2 wrote test/extra.test.js, d3 wrote docs/USAGE.md, d4 ran npm test and summarized it. Four separate valid sessions were saved, all exits were 0, every tool_use has its result, cacheRead>0 in each, and the 4 output snapshot sha256 values match. My diff shows inventory.js changed only by JSDoc, so no writes were lost. npm test is 4/11 passing; the failures are bugs already in the seed, and the new edge-case tests correctly expose the lowStock off-by-one.",
   "notes": "learned/patterns.json is correct even with 4 processes writing at once: 'npm test' has runs 4, successes 0 (one run failed, three were piped to tail/grep), and 'node --test test/extra.test.js' has runs 1 (piped to grep). The 'node --check … && echo OK' run is correctly not learned, so nothing was lost in the read-merge-rename. d4's Bash failure is the seed's failing tests, which G-Code reported correctly. d3 saw 5 tests because extra.test.js did not exist yet when it ran. .err files are empty and there are no leftovers."
  },
  {
   "id": "h2-burst-12",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "12 of 12 drivers completed in 12 s on a shared HOME. Each p1..p12 has a 3-line notes.txt that was read back. 12 valid sessions with 2-3 requests each, cacheRead>0, all exits 0.",
   "notes": "No 429, 529 or overload errors and no reply-restart frames, so rate-limit handling was not exercised. .err files are empty and there are no leftovers."
  },
  {
   "id": "h3-same-home-8-medium",
   "status": "fail",
   "product_defects": [
    {
     "severity": "low",
     "title": "Learned-pattern parser splits on |, ; and && inside quotes, so the stored key is not the command as written",
     "evidence": "runs-haiku-r17b/h3-same-home-8-medium/home/.gcode/projects/9ebf34fa…/learned/patterns.json: the key is `TZ=America/New_York node --test | grep -E \"^ℹ (pass | fail)\" ; TZ=Asia/Kolkata node --test`, but session 8870d6a3 (m5) ran `TZ=America/New_York node --test 2>&1 | grep -E \"^ℹ (pass|fail)\"; TZ=Asia/Kolkata node --test 2>&1 | grep -E \"^ℹ (pass|fail)\"`. The quoted regex was split and given spaces.",
     "location": "snapshot10w/src/memory/learnedPatterns.ts:72 (verificationOf: collapse(command).split(/\\s*(&&|\\|\\||;|\\|)\\s*/) does not track quotes)",
     "repro": "verificationOf('npm test -- --test-name-pattern \"add|remove\"') returns status 'unknown' and a key with ' | ' inserted. It should keep the command as written with status 'exit', so a real success is under-counted. verificationOf('grep -q \"a|b\" f && npm test') stores a mangled key that could be shown in the 'Learned in earlier sessions' prompt. The working repo already has a D17-2 test (tests/round17-memory.test.ts:154) for this, but snapshot10w does not include the fix."
    }
   ],
   "task_outcome": "8 of 8 modules were built, and node --test passes in every folder by my own run (slugify 10, roman 13, luhn 12, date-diff 22, word count 23, temperature 23, queue 18, LRU 25). There are 8 separate sessions and project stores, no session mentions another project's path, all exits are 0, every tool_use has its result, and cacheRead>0.",
   "notes": "Apart from the quoting issue, every patterns.json matches its Bash commands. Plain `node --test 2>&1` counts as worked (m1, m3, m4: successes 1). Runs piped to `| tail` or followed by `; echo` are counted only (m2, m5, m6, m7, m8: successes 0). D17-1 behaves as specified. m4's failed Bash is `cat package.json` in an empty folder, which exited 1 and was reported correctly. Confidence that this is a real code defect is high, but its effect in this run is cosmetic: the counts are right and the key is never shown because successes is 0."
  },
  {
   "id": "h4-resume-race",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "The first driver created session c33cc18e. r1 won the session lock and added a comment to remove() (the only change from the seed). r2 exited 1 after 86 ms with the clear message 'Session … is open in another G-Code process (pid 54158). Close it there first, or start a new chat.' and wrote nothing. The saved session holds both turns, pairs every tool call, and has 4 requests; no data was lost and no stale lock file remains.",
   "notes": "The loser's exit 1 is by design and verified. .err files are empty."
  },
  {
   "id": "h5-rapid-messages",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "All 5 messages were sent within 1 ms. The 5 turns ran in order, each ending with turn-complete. Final files are a.txt='1!', b.txt='2', c.txt='3' (checked bytes). The session's user messages are in the order sent, and the last reply lists the right contents.",
   "notes": "The controls frame (bypass/high) came back before the first tool call, and there were no approvals. No messages were lost or interleaved."
  },
  {
   "id": "e1-subagents-audit",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Three parallel Agent calls ran: two 'explore' and one 'general' (the performance audit). Each returned plain text plus a [Sub-agent run] summary with call counts (19/30/22 calls in 4/6/8 replies). The parent merged them into a prioritized REVIEW.md (16 KB). usageTotals.requests is 25, which is the parent's 7 plus 4+6+8 child requests, so child usage is summed in. The recomputed cost matches.",
   "notes": "The model picked 'general' for one audit, and its single Bash ran without approval under bypass. The sub-agents changed no files. Limits were far below 100 replies and 400 calls. The cache-read ratio is 0.71 because each sub-agent's first request is a cache write."
  },
  {
   "id": "e2-subagents-write",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Two 'general' sub-agents wrote strings.js and strings.test.js, and dates.js and dates.test.js; the parent wrote package.json and index.js (re-exports). node --test passes 51/51 by my own run. The Changes outputs list all 6 files with absent-baseline entries and verified snapshot hashes, and the Files changed lines are correct. The sub-agents inherited bypass with 0 approvals. requests=15 (parent 5 plus 5+5).",
   "notes": "The parent's `npm test … | tail; echo …` was learned as runs 1, successes 0, which is correct. The sub-agents' own Bash test runs are not learned, which looks like a design choice (only the persisting parent engine records them). There were no conflicting writes."
  },
  {
   "id": "e3-workflow",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "The project's workflows.enabled was ignored as designed. A system frame and the stderr line say only ~/.gcode/settings.json can turn it on. Workflow is not among the 31 request tools, and ToolSearch reports it as unavailable with the same reason. The model explained this clearly, did not edit either settings file, and reported that src/ has no tests to run.",
   "notes": "No workflow agents or approvals were expected, and none appeared. No files were changed."
  },
  {
   "id": "f1-screenshots",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "FileRead returned image blocks for all 4 PNGs and 15 crops (19 image blocks in the saved context), with a 'Shown to you at about W×H… multiply by N' note. I opened home-desktop.png and about-desktop.png myself, and NOTES.md's points match them: the yellow italic hero headline on pale mist, identical bean art on the lot cards, five identical avatar silhouettes, '0%'/'0' stat numerals, and the timeline layout.",
   "notes": "Some of the model's sips crops came out at full size (390×6486) because of its own sips flags. Crops were written to /tmp, which bypass allows."
  },
  {
   "id": "f2-big-image",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "FileRead of the 45.8 MiB PNG failed cleanly with 'Image is 45.8 MiB, over the 5 MiB inline limit. Resize or compress the image.' There was no crash and no API 400. The model then got 4000×4000 with sips, made a 1600×1600 JPEG preview, read it as an image and described it correctly as colour noise averaging mid-grey.",
   "notes": "The size refusal settles as 'failed' because it comes from inside the call, consistent with earlier rounds. The preview was left in .gcode/tmp."
  },
  {
   "id": "f3-image-to-html",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "index.html and styles.css recreate the hero. The model ran 5 BrowserPlan/BrowserVerify runs and all passed. The text check on '#hero-title' (Grown in<br>the mist,<br>shipped green.) and on the lede with <br> plus line breaks matched with spaces as specified. The final message lists the expected differences. 58 tool calls, all paired; the 3 failures are the model's own (missing fontTools/timeout, a FileEdit whose old and new strings were identical, a script exit 1).",
   "notes": "The page did not need rewriting to satisfy any check: no check failed, and later edits were fidelity tuning. A subfolder entry was exercised (.gcode/verification/fontcheck/index.html). Bad server.path and 404 URLs were not exercised. Google Fonts appear under blockedRequests with errors [], not as page errors. The model downloaded fonts with curl and pip-installed fonttools with --user, which went into the run HOME under bypass. 6 long-prompt requests are priced in, and the recomputed cost matches."
  },
  {
   "id": "i1-headless-p",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Headless -p exited 0 with a single result JSON on stdout and only the provider line on stderr. fizzbuzz.js prints the correct 1..30 sequence by my own run. One valid saved session (3 requests, cacheRead>0). No key appears in any output (grep for sk-ant- across all 13 runs: 0 files).",
   "notes": "No permission_denials were expected, and the frames are unchanged."
  },
  {
   "id": "i2-headless-bg-left",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "The model started 'LISTEN_ON=8950 node server.mjs' with run_in_background and verified it with curl (200 ok). The CLI exited 0. After exit, result.json shows the port free and no leftovers, and I confirmed no listener on 8950 and no server.mjs or cli process remains.",
   "notes": "The model's final text correctly says the one-shot run stops background tasks."
  }
 ]
}