Deps: none. The sanctioned replacement already exists — wtread readFileBytes
(pooled open/readAll/close, landed under CODE-020 57ff502a). This ticket
routes the remaining per-file mmap readers through it. Repro concern is the
RESIDENT pager loop over a big tree, per classify's own documented rule.
io.mmap leaks the mapping (no JS-side
unmap), so a wt with >~1000 tracked files exhausts the process's mmap
regions mid-sweep; every later map fails and the file reads as a false
mod (the 279-file real-repo regression). Reads MUST use pooled fd.readFileText, per
.gitignore during a tree scan), diff.js:317 (readWtFile, per changed
file), why.js:27 (per file). ingest.js:242 io._mmap per appendRecords.readFileBytes or a shared read helper), so no mapping outlives the call.readFileText → pooled fd readreadWtFile → wtread readFileBytesio._mmap appendRecords — ensure unmap/close or document the boundCODE-024: per-file reads off io.mmap onto pooled fd.