{
 "model": "claude-haiku-5-5",
 "category": "stress-agents-vision-cli",
 "scenarios": [
  {
   "id": "h1-same-project-4x",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Four concurrent drivers on one project and HOME all exited 0 with turn-complete: d1 added JSDoc to src/inventory.js, d2 wrote test/extra.test.js, d3 wrote docs/USAGE.md, d4 ran npm test. Four distinct valid sessions saved, all tool pairs match, and all three output snapshots match their sha256. Rerun: 13 tests, 8 pass, 5 fail; the 5 are the seed's existing inventory tests, whose test file is unchanged. inventory.js code is identical to the seed once comments are removed, so no writes were lost. Cost recompute matches ($0.01277316).",
   "notes": "d3's Bash (t+8056 to 8304 ms) overlapped d1's FileWrite (t+8101 ms), yet inventory.js appears only in d1's outputs, so nothing was misattributed. learned/patterns.json matches a replay of the saved Bash commands through the snapshot's verificationOf: 'npm test' runs 3, successes 0, broken 0 (one real exit 1, two piped); 'node --test test/extra.test.js' runs 1, successes 0 (piped); 'ls -R src && npm test' runs 1, successes 0 (piped). saveLearnedPatterns re-reads then renames with no lock, so a theoretical lost update between processes exists, but none occurred here. No 'Learned' section in any prompt, which is correct because nothing is trusted yet. Reviewer disclosure: the replay imported the pure function under empty mktemp HOME folders outside the run folders; those empty temp folders were not removed."
  },
  {
   "id": "h2-burst-12",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "12 of 12 drivers completed in about 5.8 s (first session-started to last turn-complete) on one HOME. Each p1..p12 has a 3-line notes.txt that was read back, with its own output entry. 12 valid sessions of 2-3 requests each, cacheRead>0, all exits 0, .err files empty, no leftovers. Cost recompute matches ($0.01031693).",
   "notes": "No 429, 529, overload or reply-restart, so rate-limit handling was not exercised. The only '429' text matches are inside project-hash paths in p5 and p9."
  },
  {
   "id": "h3-same-home-8-medium",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "All 8 modules (slugify, roman, luhn, word count, date diff, temperature, queue, LRU) were built. Rerun with node --test: 16, 16, 11, 18, 28, 13, 14 and 29 tests, all passing. 8 valid sessions in 8 separate project stores; no session context contains another driver's project path. Cost recompute matches ($0.04091605).",
   "notes": "D17-2 and D17-3 confirmed live: all 8 patterns.json files match the replay. m5's `TZ=America/New_York node --test 2>&1 | grep -E \"^ℹ (tests|pass|fail)\"; TZ=Asia/Kolkata node --test 2>&1 | grep ...` kept its quoted `|` unsplit and is one pattern with status unknown, successes 0. The tool failures are model-side: m1 and m6 had real test failures they then fixed, and m8's failure was `cat package.json` on a missing file ending a compound command. No 429 or overload."
  },
  {
   "id": "h4-resume-race",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Two resumes started 2 ms apart. r1 won the lock and added the comment to remove(), exit 0. r2 was refused after 87 ms with exit 1: 'Fatal: Session 876b630b-... is open in another G-Code process (pid 84601). Close it there first, or start a new chat.' The saved session has both user turns in order, 4 requests, paired tools and one FileEdit output. The diff against the seed is only the two comment lines. Cost recompute matches ($0.00120045).",
   "notes": "The refusal is by design and clear, with no data loss or clobbered write. r2's message never entered the session, as expected. No lock file remains in the run HOME."
  },
  {
   "id": "h5-rapid-messages",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "All five messages were sent within 1 ms, after session-started and before the controls frame. Five turn-complete frames arrived in order, and the saved session holds all 5 user messages in sent order with their replies. Final files: a.txt='1!', b.txt='2', c.txt='3'. Cost recompute matches ($0.002259875).",
   "notes": "Queueing worked with no loss or interleaving. The model used Bash printf for the writes; G-Code recorded the five outputs frames."
  },
  {
   "id": "e1-subagents-audit",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Three parallel sub-agents (accessibility, performance, copy) returned reports to the parent as plain text with '[Sub-agent run]' footers: 19 calls in 6 replies, 31 calls in 8 replies, 15 calls in 6 replies. REVIEW.md (138 lines) is prioritized and written by the parent, which rechecked some findings itself with Grep and FileRead. Requests add up: 27 total, 20 sub-agent replies plus 7 parent rounds counted from the frames. Cost recompute matches ($0.10210012).",
   "notes": "The performance sub-agent's Bash call read 'Not run: unknown tool \"Bash\"' in Failed calls, which is the read-only sub-agent behaviour by design, and the parent told the user asset weights were therefore unverified. Limits were far below 100 replies and 400 calls (AGENT_MAX_ITERATIONS=100 in the snapshot). Cache-read ratio is 0.74 because each sub-agent starts with cache writes."
  },
  {
   "id": "e2-subagents-write",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Two parallel sub-agents wrote strings.js, strings.test.js, dates.js and dates.test.js with no conflicting writes; the parent wrote package.json and index.js. Rerun: 91 of 91 tests pass, and index.js exports isoWeek, relativeTime, slugify, titleCase and truncate. Every output's current file matches its last version sha256 and all snapshots verify, including dates.js with 2 versions (FileWrite then a sub-agent FileEdit). Cost recompute matches ($0.02463884).",
   "notes": "Sub-agent writes ran under the inherited bypass with 0 approval frames. '[Sub-agent run]' listed the right changed files. The parent's `npm test 2>&1 | tail -n 15; echo ...` was learned as runs 1, successes 0, which is correct. Sub-agents' own Bash runs are not learned because only the parent engine records them (queryEngine.ts:1820), which looks intentional."
  },
  {
   "id": "e3-workflow",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "The project-level workflows.enabled setting was ignored as designed. A system frame and stderr name the project settings file and say only ~/.gcode/settings.json can turn Workflow on. ToolSearch returned Workflow as available:false with the same reason, and Workflow is absent from the 31 request tools. The model explained this accurately. No files changed. Cost recompute matches ($0.00115729).",
   "notes": "The model checked for tests, found no package.json or test files, ran nothing and offered two ways forward instead of doing the task without Workflow. That is the model's choice. No workflow agents or approval frames occurred, so the desktop background downgrade was not exercised."
  },
  {
   "id": "f1-screenshots",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "FileRead returned 15 image blocks, all saved in the session with paired results and no API 400. The large images carry the 'Shown to you at about…' size note. NOTES.md covers all four pages. I opened products-desktop.png and about-desktop.png: the repeated tinted bean cards, El Mirador's shifted spec rows, the empty olive lower hero, the identical portrait silhouettes, the wrapped 'shade trees since 2019' card and the background seam are all really there. Cost recompute matches ($0.017157905).",
   "notes": "I did not open the two home screenshots myself, so those notes are unchecked. The model cropped to /tmp/crops with sips, which bypass allows; that shared folder already held other files. PIL was missing, so contrast stayed by-eye and NOTES.md says so. The 'GPCI' substring found in the saved session occurs only inside base64 image data, not in text."
  },
  {
   "id": "f2-big-image",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "The 48,018,658-byte 4000×4000 noise PNG was refused cleanly: 'Error: Image is 45.8 MiB, over the 5 MiB inline limit. Resize or compress the image.' No crash and no API 400. The model got the dimensions with sips (correct against the PNG header), made a 1024×1024 preview, read it as an image block and correctly described random noise. Cost recompute matches ($0.001808785).",
   "notes": "G-Code refuses rather than downscales; the model did the downscale. The preview went to .gcode/huge-preview.png, and the model told the user about it."
  },
  {
   "id": "f3-image-to-html",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "index.html and styles.css recreate the hero. The final BrowserVerify passed 6 of 6 checks and the final screenshot resembles the reference layout. The model listed its expected differences honestly. Tool frames settle correctly: 33 uses and 34 results, the extra being a refused BrowserPlan with no use frame by design, saved as 'refused'. The session pairs all 34. Cost recompute matches ($0.03648829).",
   "notes": "The model did not have to rewrite its page for any check. The one failed BrowserVerify was its own plan expecting a trailing '.' in the title; it corrected the plan, and later page edits were fidelity tuning. The text check read 'Grown in the mist, shipped green.' across three spans, a separate first-try pass. The first BrowserPlan was invalid input with a clear per-issue message. Google Fonts appears in blockedRequests with errors [] in all 4 reports, not as page errors. Subfolder entry, bad server.path and 404 URL were not exercised. Browser and preview server closed per the report's cleanup field. /tmp/crop/r17_sample.py is not in outputs because outside-project files are not tracked (isProjectPath). The 'GPCI' substring occurs only inside base64 image data."
  },
  {
   "id": "i1-headless-p",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Headless -p with ANTHROPIC_API_KEY deleted from the environment exited 0, so the saved-key fallback worked. stdout is one result frame, stderr only the provider line. fizzbuzz.js output is correct when rerun (Fizz, Buzz, FizzBuzz at 15 and 30). Session is valid with paired tools and 2 requests, cacheRead>0. Port free, no leftovers. Cost recompute matches ($0.00071033).",
   "notes": "A pattern scan for Anthropic-format keys across all 13 run folders found none, printing file names only and excluding settings.json, PNG and zip files. scenarios.json's snapshot3 path is stale; runner.ts uses the frozen snapshot."
  },
  {
   "id": "i2-headless-bg-left",
   "status": "pass",
   "product_defects": [],
   "task_outcome": "Headless -p exited 0. The server started as background task bg-367ccb18 and curl got 200 'ok'. After exit the port was free at the runner's check 1.5 s later, and leftovers are empty. My own later check found no listener on 8950 and no server.mjs process. Session is valid with 4 requests, cacheRead>0. Cost recompute matches ($0.001009525).",
   "notes": "The Bash result itself warns that a one-shot run stops background tasks at the end, and the model passed that on to the user accurately. No permission denials."
  }
 ]
}