io.setMtime over a new abc/FILE utimensat leaf
The one native primitive the write verbs need: restamp a worktree file's mtime so a later be reads it clean (native SNIFFAtStampPath, sniff/AT.c:761, calls utimensat raw, no abc wrapper). Add a FILE wrapper in libabc, bind io.setMtime(path, ron60). Pure libabc — no keeper/dog. Blocks the write verbs. Part of JS-046. Method: Issues.
js/io.cpp, JS-042) but NO mtime setter; abc/FILE.h has no utimens wrapper either (grep confirms none).be re-stages the whole tree (the failure put_visit_tracked guards, PUT.c:64).abc/FILE.h/.c: a FILESetMtime(path8b, ron60) wrapper over utimensat(AT_FDCWD, …, AT_SYMLINK_NOFOLLOW), error-propagating (ok64).js/io.cpp: io.setMtime(path, ron60BigInt) leaf over it; update API.md + INDEX.md (the io.cpp module section).sniff/AT.c:688. ASAN + ctest green. NOFOLLOW so a symlink stamps the link, not its target (matches native).JABCstat or add JABCmtime): setMtime(path, r) then io.lstat(path).mtime round-trips r exactly. (test/stat.js:71-78.)ea9de45b leaf + 4fd1d639 binding/docs.)