JS tickets: the JABC (JavaScriptCore) bindings

js/ is JABC — a thin, anti-bloat JavaScriptCore binding (stock libjavascriptcore; bindings "hold no memory"; JS owns the buffers, no shared custody). Tickets here cover exposing ABC primitives/containers to JS and the binding surface. The fix-and-land method is Issues.

Landed — jab status object-read (2026-06-23)

The jab status "hang" on the journal store is fixed end-to-end: JS-056 stops the per-open O(all-objects) index rebuild (9352 ms → 9 ms / locate), JS-055 makes the one >pack-sized resolve that broke the fast path succeed. Both via the Issues loop.

Open — jab runtime code-review batch (JS-101..JS-115, 2026-07-07)

A 4-dimension multi-agent review of the jab repo (C++ bindings + embedded JS bundles, ~6.8k lines) with 2-skeptic adversarial verification per finding: 24 raw findings, 15 confirmed (9 refuted). Tickets are proposals awaiting user triage; each carries file:line evidence.

Open — keeper index completeness (JS-099, 2026-06-30)

Open — wire push-session + ulog reader leaks (JS-100, 2026-07-04)

A 13-agent quality/correctness review of be/ (this beagle-ext branch @ 5ab7f838) found resource leaks in the git-wire PUSH path added by the landed GIT-019 receive-pack-session rework: on any throw after the FF gate the receive-pack child (stdin+stdout fds, pid) is never closed/reaped, accumulating in the resident jab loop (JSQUE-020). Plus an uncertain ulog reader-map item. The same review also re-found the still-OPEN JS-076/JS-085 leaks (neither is in jab log on this branch).

Open — GET store-internals test port (JS-096, 2026-06-28)

Open — be/ code-review batch (JS-065..JS-090, 2026-06-25)

A security/quality/modularity review of the be/ JS reference impl (9 module reviewers + adversarial verification + 3 cross-cutting passes) produced this batch: 31 findings survived verification, 2 were refuted (recurse sub-path traversal; ulog _lastTs). Fix-and-land via Issues, grouped by disjoint file ownership; the cross-cutting modularity refactors (086-090) run as a sequenced second wave.

*Status 2026-06-25* — ALL implemented in the main working tree + verified: be/ 64/64, beagle/ 464/464 green. Wave-1 (065-083,085) full; wave-2 (086-090,084) landed the behavior-preserving SAFE subset, risky parts deferred as own residuals (suites stay green):

*Audit 2026-07-07* — the 06-25 "ALL implemented" claim did NOT reach the be/ shard: only JS-065/069/071/073/075/082 (+100) landed (d89eb236 7b0cd620 174d06f4 08710bda d80b0a33); the 066-091 residuals below re-verified OPEN in be/ HEAD 082b172c. JS-066 REGRESSED, JS-083 elevated (live via submount), JS-068/078/079 MOOT (JSQUE-020 928aaad5 deleted the file queue), JS-093/094 LANDED e5cf0fdd.

Security:

Quality:

Modularity (second wave — collide on shared files, sequence after the bug fixes):

Landed — clone configure breakage (JS-095, 2026-06-26)

Open — HUNK binding bug (JS-092, 2026-06-26)

Landed — test re-sharding (JS-061, 2026-06-25)

Landed — POSIX bindings batch (2026-06-21)

Topic reopened 2026-06-21: the be status JABC-coverage review surfaced standard-API gaps for utility scripts; this batch was the POSIX-syscall ones, each thin marshalling over an EXISTING C leaf (no new abc work). All three landed via the Issues loop (store-backed worktrees, repro-first, human-gated).

Next door — pack-log index (GIT-010 landed)

Deferred — not POSIX

The deeper store-layer gaps (keeper/graf/sniff/HOME bindings — open a .be, read an object by sha, classify the worktree, ahead/behind) are a separate, larger SDK effort; JS-018 / JS-019 fold into it.

Open — extension scripts (JS-025 landed)

be get wire client (JS-038 umbrella) — get path GREEN

Reproduce be get as bin/get.js, output-equivalent to native across file: / ssh: / be: remotes and new/del/mod files+dirs. The git-wire conversation lives in keeper/ (unlinkable), reimplemented in JS like status.js did sniff. Tests in test/js/get/, helpers in test/js/lib/. The pipeline full-fetches (no haves → OFS-only verbatim pack), so the thin-pack leaves are NOT on the get path.

Native-leaf prereqs (for push / thin packs — NOT needed by the get path):

Landed — be put/delete/post write verbs (JS-046 umbrella, 2026-06-22)

The reflog-WRITE verbs as JS, output-equivalent to native (the JS-027/JS-038 pattern); all five children landed 2026-06-22 (audited 2026-07-07). Today the code lives in the beagle-ext shard — be/verbs/{put,delete,post}/*.js + be/shared/{stage,conflict,ulog,store}.js — with parity suites in be/test/{put,delete,post}.

Open — jabc runtime (js/main.cpp)

be patch as JS (JS-052) — LANDED 4c6fa1fa

be patch was the LAST verb not mirrored. JS-052 is bin/patch.js over FULL-HISTORY weave reconstruction (mirrors GRAFMergeWtFileTunable): per file, DAG-fold each side's commit history with the already-bound weave.fold/merge/ merged leaves, then merge+fence — NO new binding (a first 3-blob weave.merge3 cut was rejected as the graf merge debug tool, not patch's engine).

bro as JS (JS-053) — viewer LANDED 1afd5f2d, TUI open

Mirror bro (the dog TUI pager/renderer) as bin/bro.js. A SELF-CONTAINED viewer: URI args → io.mmap+tok.parse → hunks → paint — NO stdin TLV pipe and NO forking C producers; bro.js runs JS commands for its content in-process (the point). Native gap is tiny (a raw-mode + winsize tty.* leaf); the bulk is a pure-JS port of bro/BRO.c (renderer + colour-diff classifier + TUI).

Open — bin/*.js review follow-ups (2026-06-22)

A read-only review of bin/*.js (clarity / reuse / missing JABC APIs) spawned three tickets. JS-042 (js/-only) and JS-043 (bin/-only) are FILE-DISJOINT → parallel; JS-044 wires them together and is blocked on both.

The bin/*.js review batch (JS-042/043/044/045) is fully landed; full be-bin/ be-js-get suite 7/7 green. Worktrees ~/todo/JS-04{2,3,4,5} are spent (removable).

Closed — all JS tickets landed

The js/ 7-lens code review (2026-06-16) produced JS-002..JS-014; ALL were fixed on branch ?/dogs/js (worktree ~/todo/dogs-js), each repro-tested red→green and verified green under WITH_JS+ASAN (ctest -R JABC 3/3, LSan clean), and MERGED to trunk. The build was first restored (c4f03a7c: dropped dead convert.cpp/rdx — no rdx/ dir — and mapped ABC_BASS). Tests are C++ (js/test/jabc_test.cpp + run-007.sh) since test.js can't be regenerated (no node). JS-001 (the ABC-container binding proposal) is also closed. That batch closed; the reopened POSIX batch JS-015/016/017 landed (see above); JS-018/019 deferred. Per-ticket Outcome + hash in each .mkd.

Deferred (dead code, out of build): the convert.cpp i64→BigInt (JS-008) and convert/JABC.hpp-macro underflow sites (JS-004) — revisit when rdx is re-wired.

Closed proposal