Round 4 (snapshot10e) Haiku: 57/58 pass. FAIL f3 (medium, BrowserVerify text expectation compared raw textContent: source line breaks/indentation failed an exact check of the shown words).
Round-3 fixes held live: a1 server.path + url; c3 labels keep file names; new trim marker read correctly; TaskList shells matched (d5); d6 'Stopped before this turn finished.'.
Fixes for round 5 (snapshot10f):
- f3: observations.ts shownText() collapses whitespace (Playwright toHaveText semantics) on both sides of a text check; expectationSchema describes the comparison and that text/value/visible/checked selectors must match exactly one element (a7 doc gap).
- g6 wording: a tool's own refusal now reads 'call refused', a policy denial still 'call denied' (toolRunner.ts).
- c3 observation: a compaction/handoff transcript part cut inside a block now ends with '[this block continues in the next part]' (engine/compact.ts chunkTranscript and session/compact.ts chunksOf).
- Harness: driver counts compactions from 'Compacted the conversation' system frames.
Not changed (notes): d2 exit code repeated; no stall guard across handoff chains (feature idea); g8 sparse 'Thinking…' frames; ps blind spot in runner leftovers().
Cost round 4: $1.5779.
