fix(lab): coding Read records body exposure - echo gate measures real coverage

↗ view on GitHub · Eli Ziff · 2026-08-07 · ada6e7c8

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.

⬇ Download capture-commit-ada6e7c8.md