jab receive-pack/upload-pack over ssh, retire the keeper hardcodeThe JS serve halves EXIST: shared/serve.js uploadPack (GIT-020,
261680bf) and receivePack (POST-028 — the local file:/be: push twin,
FF-gate + CAS + report-status). But wire.js classify()'s ssh arm still
hardcodes ssh host keeper <verb> for be://host — the native keeper LAGS
jab and ships in no bin, so any ssh-remote be:// push or fetch is dead. Make
the ssh arm spawn jab remotely, flip the surviving keeper-SKIPped tests, and
be:// runs jab-to-jab end to end. This is GIT-020's leftover TODO list
promoted to its own ticket; CI-001's push-into-a-VM mode is the consumer.
wire.js classify ~60–105: local be:/file: exec KEEPER_BIN (jab
works today); the ssh arm hardcodes keeper <verb> <sel> — no jab form.serve.js receivePack (POST-028) takes the BARE path (the ?<sel>
servePath form is retired for push); the ssh arm still composes ?<sel>.test/get/be SKIPs on command -v keeper; test/get/cached clones over
ssh-keeper; only test/serve/uploadpack runs jab-to-jab (local exec).refUpdate serves only refs/heads, refuses deletion, FF-only with CAS —
adequate for CI-001 push targets; DELETE-over-wire stays out of scope.be get/head/post/put be://host/store… work against a remote host that
has only jab installed — advert, negotiate, pack, report, jab-to-jab.serve.js/pkt.js/wire.js push-client logic; NO second framing
or pack impl. Protocol parity with the jab client is load-bearing (RAW
pack, no side-band, v0/v1 advert) — mismatch hangs the fetch.KEEPER_BIN-style override (non-login ssh shells need an explicit
remote path, cf. DOG_REMOTE_PATH); native keeper stays reachable via
override until deleted, never by default.ssh host jab <verb> <path> mirroring the local
KEEPER_BIN exec; one env override prefixes PATH for non-login shells.servePath() — the split lives in classify().jab <verb> (bare path for
receive-pack, servePath for upload-pack); env override for the bin.KEEPER_BIN=jab post into a be:
store, assert report-status + ref moved (extend test/serve/).ssh localhost with
a jab-only PATH; proves the remote-spawn form end to end.test/get/be off the command -v keeper SKIP; green.test/get/cached to the jab server; green.keeper default from classify() (override-only), delisting
the native daemon from the wire — the GIT-020 retirement goal.jab must resolve on the remote or every
spawn dies quietly — the override env is not optional.