c849fd9921
On a real (large) codebase, a file_read of a big file dumped the whole body into L2 uncapped, evicting the files the stage actually needed — the ContextTruncated we saw on real-repo runs. Bound it: - readFile: auto-truncate a read-to-EOF past MAX_READ_LINES (400) with a note pointing at start_line/end_line; hard char backstop (20k) for very long lines. An explicit end_line is deliberate paging, honoured in full. No contentHash baseline on a truncated view, so the stale-write gate forces a real read before an edit. - listDir (single-level): cap at LIST_MAX_ENTRIES (400) with a note. (ListDirTool's recursive walk was already capped.)