_grow hook is dead — growing a mapped Buf silently severs its file backingBuf.grow (jab/buf.cpp:100-108) has an if (this._grow) mapped-backing branch that nothing ever installs (grep across jab/*.cpp, test/, jsrc/ — cont.cpp's P._grow is the unrelated PACK scratch grower), so growing an io.ram/io.mmap("rw") Buf falls into the heap-copy path: a fresh Uint8Array replaces the mapping and later msync() no longer flushes the file. API.md:118 promises "io.buf/ram: realloc-or-mremap", which the code cannot do. Found in the 2026-07-24 jab/ review; sibling of the JAB-006 contract gaps.
_grow for mapped backings (mremap/ftruncate path) or make grow on a mapped Buf throw; API.md must match the ruling.