be status as bin/status.js (SDK validation)Reimplement bare be / be status as a repo-local extension bin/status.js,
built ONLY on libdog (dog/) + abc/ via JABC — never linking a dog
(sniff/keeper/graf). Goal: validate the Extensions SDK end-to-end and surface
each JABC gap as a thin libdog/abc leaf. Every on-disk format is already
libdog/abc (keeper objects = git.pack, .idx = abc.index wh128, wtlog/refs =
ULOG, sha = codec.sha1), so the store layer is reimplementable in JS, sharing
zero code with sniff. Method: Issues.
be <name>→bin/<name>.js; be status is the first real
extension and the SDK proof. C path (sniff): SNIFFClassify heap-merge →
bucket rows → ahead/behind (graf) → summary; mirrored in JS over libdog/abc.io/abc.index/codec); the
store/keeper/graf/subs side is reachable because the formats are libdog/abc.be status — incl. submodule recursion, pin
advances (sub advanced past pin), and file del/new. Oracle = native be status;
new parity tests live in test/bin/*. Iterate till parity; commit nothing.bin/lib/ SDK (be/wtlog/keeper/classify/dag/subs) future
scripts (log, diff, ls) require().abc/ ONLY; any new C is a thin dog/+abc/ leaf, never a dog.be status.git.pack + abc.index + ULOG. Git object parse via
new libdog git.tree/git.parseCommit leaves (over dog/git GITu8sDrain*),
no manual framing in JS. git.tree(bytes).next() pull cursor; git.parseCommit
eager struct.bin/lib/; bin/status.js
builds + renders the ULOG and wires the libs.git.tree(bytes).next() cursor (mode/name/str/sha, 160000
gitlink visible) + git.parseCommit(bytes) → {tree,parents[],foster[],…} —
libdog leaves over GITu8sDrainTree/GITu8sParseCommit; ctest. (no deps)bin/lib/be.js (.be discovery walk) + wtlog.js (ULOG reader:
cur/baseline tip, pd/patch boundaries, ts stamp-set). Smoke bin/refs.js. (no deps)bin/lib/keeper.js — getObject(sha) (git.pack+abc.index+delta),
resolveRef, eachTip/eachRemote, readTree, commitTree/commitParents.
← JS-028, JS-029bin/lib/classify.js + ignore.js + bin/status.js —
baseline⊕wt⊕put⊕del heap-merge, bucket routing, .gitignore, build the status
ULOG + render via HUNK + summary. File-row parity incl. del/new; test/bin/*. ← JS-030bin/lib/dag.js — ahead/behind via commitParents BFS; wire the
commit-diff block into status. ← JS-030bin/lib/subs.js — gitlink(160000)+.gitmodules, mount detect,
3-axis dirty (ancestry via dag on the sub shard); sub rows. Full parity. ← JS-032Has(ts) index, git/IGNO matcher). ← JS-031process.exit) would let status return a clean/dirty exit code.125d5c8f (2026-06-21): bin/status.js + bin/lib/
{be,wtlog,keeper,classify,ignore,dag,subs}.js reproduce native be status
BYTE-FOR-BYTE. Verified independently on the REAL beagle repo (1291 ok
non-recursive; status:abc sub hunk recursive) and via test/bin/*:
keeper-verify, status-parity (clean/mod/new/staged/del/mis/mov/ignored),
dag-divergence (ahead/behind), sub-status-parity (advanced-pin / back-at-pin /
recursion / clean-recursion), refs-parity. libdog+abc ONLY; jabc links
dog abc-core unchanged. Landed as ONE commit 125d5c8f (all 20 files);
js/cont.cpp's marker-doc comment was cleaned first to dodge DIS-046.git.tree/parseCommit → JS-029 be/wtlog → JS-030
keeper (over git.pack+abc.index, sha-rehash verified) → JS-031 classify/
ignore/status (file rows) → JS-032 dag → JS-033 subs + recursion.--sub (native: be status doesn't recurse, bare be
does — the extension mirrors that). Object index = git.pack.scan → abc.index
wh128. Sub-shard ancestry via keeper.open(parentStore, subTitle).io.stat has no
mtime; no io.readlink/lstat; pack.scan REF_DELTA; inert sub Edited-axis
(matches C until SUBS-027b). Caveat: dag ahead/behind is unit-verified (the live
be status (behind N) cur≠ref state is transient + hard to stage).