Four read paths io.mmap a file and never unmap it — the exact leak class JS-031 purged from classify, reappearing in the resident loop where mappings accumulate until the process exits (region exhaustion on a big-tree diff or repeated blame):
shared/util/ignore.js:155 — readFileText mmaps every .gitignore on the walk, never unmaps.views/diff/diff.js:313 — whole-tree diff mmaps EVERY wt file, never unmaps.shared/gitmodules.js:16 — .gitmodules read mmaps per call, never unmaps (also hand-concats the path instead of pathlib.join).views/why/why.js:25 — readWtFile mmaps per blame, leaks one mapping each in the resident loop.From the 2026-07-07 be/ review (BE/REVIEW), all CONFIRMED. Method Issues.
buf.cpp:124 — io.book/close/trim documented but unimplemented); the leak is that the mapping is held for the run with no release point even where one should exist. Reads that only need bytes should route through shared/wtread.js (the ONE reg-file read) which owns the lifecycle.pathlib.join.buf.cpp:124); if none, size/scope the reads to bound the leak.