fix(lab): coding Read records body exposure - echo gate measures real coverage
The coding-family Read served body text but never wrote turnReadState, so splitReadExposure at the generate_docx gate always saw an empty map: every echo firing tonight was a false refusal listing ALL documents as 'never opened' (verified in tax g5 + acq v3 raw SSE - 25/25 and 31/31 listed with 24 and 31 actually read). The model believed the list and serially re-read everything: +277k/+128k cacheadj on tax/acq. Fix: runCodingShapeCall gains turnReadState; the four Read success paths record served spans as merged intervals (coding plane is body-only, bodyStart 0). Grep hits and .toc reads stay non-exposure by doctrine. Echo now fires only on genuine shortfall with a true list; argless probes at full coverage fall through to the existing typed invalid-input refusal. Receipt: exposure-echo-v2. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011pfUVhNFTRvhYGXBwoKNj6
| Repository | eliziff/Beaver |
|---|---|
| Author | Eli Ziff <eliasziff@gmail.com> |
| Authored | |
| Parents | 8e962c58 |
| Stats | 2 files changed , +41 , -1 |
| Part of | Evaluation harness: Beaver-CAN and LegalBench-RAG adapters |
Capture this commit into my fork
Download a Markdown prompt that tells Claude how to port this
exact commit into your working tree. Run it via
claude -p < capture-commit-ada6e7c8.md
from inside the repo you want the change in.