jab upload-pack / receive-pack) to retire the native keeper daemon on the be:// wirejab is a wire CLIENT only (verbs get/put/post/patch/delete/head; no serve). The
be:/keeper: transport (be/shared/wire.js dispatch) execs the NATIVE keeper
daemon — keeper upload-pack locally or ssh host keeper … — which LAGS jab and
is absent from the jab-only bin. Local file:// + git transport (git-upload-pack)
already run keeper-free, so TEST-003 converts the local/ingest tests off be:.
But the be:// WIRE-PROTOCOL tests (get/be, get/cached, any be-store push/fetch)
genuinely need a beagle wire SERVER. Give jab one — a JS upload-pack/receive-pack
serve loop — so the be:// wire runs jab-to-jab, fully native-binary-free.
be LAGS jab); the
only surviving native dependency is the keeper wire daemon on be:/keeper:.wire.js transport dispatch: file:/scheme-less local → read direct (no wire);
//host/git:/ssh:/http → git-upload-pack (keeper-free, tests pass);
be:/keeper: → exec keeper upload-pack (local) or ssh host keeper ….build/bin ships no keeper; build-debug/bin/keeper is ABI-stale vs current
jab (abc._ulog_open is not a function). So get/be + get/cached SKIP.file:// submodule mount must NOT reach keeper at all — it
should reuse the on-disk source store + make a (store-backed) worktree; that
submount local-reuse gap (the sub/* + spot/submount TEST-003 failures) is
its OWN fix, tracked separately, NOT this JS-serve feature.serveReader (store
open), markReachable (object closure), buildPushPack (pack build), plus
pkt.js framing and GIT-013/014's report-status/pack logic.jab upload-pack <store> and jab receive-pack <store>
(or one jab serve) — speaking the keeper wire protocol over stdin/stdout,
so be: local-exec and ssh host jab upload-pack … both work jab-to-jab.be: dispatch execs the JS server via the EXISTING KEEPER_BIN override;
get/be + get/cached (and be-store push/fetch) pass with NO native keeper.wire.js): v0/v1 refs
advertisement, want/have negotiation, NAK\n, RAW pack after (keeper advertises
NO side-band-64k, so no demux). Reuse pkt.js, not hand-rolled framing.markReachable(wants) −
haves, build the pack with buildPushPack, stream it after NAK.jab upload-pack/receive-pack invocation (what ssh/local
exec spawns); the CLI must NOT emit its normal banners on these (raw wire only).jab upload-pack <store> serve loop (advertise → negotiate → pack) over stdio. — landed 261680bf: shared/serve.js uploadPack (reuses serveReader/buildPushPack/pkt), raw-wire CLI intercept in core/loop.js ~229.jab receive-pack <store> serve loop (commands → pack ingest → report-status). — NOT built: serve.js exports uploadPack only, loop.js intercepts only upload-pack; a be:// PUSH still needs the native keeper.261680bf via the existing KEEPER_BIN=jab override (proven jab-to-jab in test/serve/uploadpack); no jab serve alias, classify() default stays keeper.test/get/be/run.sh still SKIPs on command -v keeper, test/get/cached still clones over ssh-keeper; only the new test/serve/uploadpack runs jab-to-jab (fetch side, local-exec).classify()'s ssh arm still hardcodes keeper <verb> for be://host (wire.js ~85) — an ssh host jab upload-pack form (or KEEPER_BIN-honouring remote cmd) is needed before the native daemon retires.wire.js exactly or fetch hangs.261680bf ("js upload-pack, also fix bro tests"): the FETCH serve
side only — shared/serve.js uploadPack + the jab upload-pack raw-wire CLI
entry + test/serve/uploadpack (be: local-exec fetch jab-to-jab via KEEPER_BIN=jab,
incl. a want+have thin-serve drive). Remaining: receive-pack serve, the get/be +
get/cached test flips, and an ssh-remote jab spawn form (see TODOs).jab receive-pack CLI entry landed later under
POST-028 (serve.js receivePack, FF-gate + CAS + report-status); the leftover
TODOs (ssh-remote jab spawn, test flips) are promoted to GIT-022.