bin/*.js consumers onto the new FILE bindingsOnce JS-042 surfaces io.stat mtime + io.lstat/readlink/symlink/chmod,
delete the bin/*.js workarounds: the /usr/bin/stat subprocess in classify.js,
the symlink "assume clean" / throw-recovery hacks, and the unapplied symlinks +
exec-bit in checkout.js. Realizes the bin/*.js review's #1 + #3 payoff (and the
JS-038 checkout residuals). BLOCKED on JS-042 (bindings) + JS-043
(consolidated base). Method: Issues.
classify.js:42-80 batchMtimes spawns /usr/bin/stat in 200-path chunks to
temp files, mmaps + text-parses %Y %n — only because io.stat dropped mtime;
status.js carries shBin/shQuote solely for that.classify.js:119-128 recovers a symlink kind from a thrown FILEStat;
classify.js:170-174,318-322 returns false / assume-clean for symlinks (no
readlink); checkout.js:90-104 records but SKIPS symlink + exec-bit apply.classify.js reads mtimes via io.stat(path).mtime (drop batchMtimes + the
subprocess + status.js's shBin/shQuote).io.lstat + io.readlink (hash the link target, like
CLASS.c::CLASSWtEqBase); checkout.js applies symlinks (io.symlink) +
exec-bit (io.chmod).be-bin-*/be-js-get-* stay green; add a symlink + exec-bit checkout
case.batchMtimes/stat-subprocess; wire
io.stat.mtime/io.lstat/io.readlink; apply symlink + chmod in
checkout.js; add a checkout symlink/exec-bit test.ctest green.b87e6251: classify.js drops the /usr/bin/stat subprocess
(io.lstat(full).mtime) + real symlink classify (io.lstat/readlink/
frameSha, mirrors CLASS.c::CLASSWtEqBase); checkout.js materializes
symlinks (io.symlink) + exec-bit (io.chmod), kind-aware leafUnchanged (a
100644→100755 flip re-chmods). New be-bin-checkout-symlink test (repro-first);
full be-bin/be-js-get 7/7 green.