submount.mount has only two child-acquire paths: the havePin fast-path (reuse an ALREADY-present sibling shard, checkout only) and, for a fresh mount, fetchChild → wire.fetch. wire.js::classify routes a file:/scheme-less local URI to a LOCAL keeper exec ({bin: keeperBin, …}), so a LOCAL submodule mount spawns keeper — which is absent in the jab-only bin — even though the child's objects already live on local disk in the source store. Per design a LOCAL clone must NEVER touch the wire: reuse the store and create a (store-backed) worktree, exactly like top-level jab get file://… (get.js's localish direct path). Only be:// should reach keeper / the future jab upload-pack (GIT-020).
cycle,patch,selective,untracked} + spot/submount` — the last non-green tests (94% → these). Full suite otherwise 132/141 jab-only, native-binary-free.
submount.mount (fresh mount) → tryFetch (submount.js:127) →
wire.fetch(uri); uri is the parent source with project swapped, a local file:/scheme-less store. wire.js::classify (~L54-60): localish (file/""/ keeper-local/be-noauth) → {bin: keeperBin, argv:[keeper, verb, servePath]}. keeper absent → wire.fetch throws → tryFetch catch (submount.js:130) returns null → SUBFETCH … child unreachable → GET-037 drops the anchor → "sub not mounted/checked out" (the raw keeper error is swallowed by the catch).
jab get file://<store>/.be reads the local store DIRECTLY
(get.js localish, ~L91-98: store.open, NO wire) — verified keeper-free. The submodule mount lacks that same local fast path.
havePin reuse (submount.js:177-179) only triggers when `store.open(beDir,title).getObject(pin)` already resolves — a NAMED-shard assumption that misses a jab project-less/unnamed source shard, so fresh local mounts fall through to the wire.
file:/scheme-less) submodule child is mounted by REUSING the on-disk
source store (its objects/pin already there) and making a store-backed worktree (anchor .be redirect + checkout of the pin's tree) — NO wire.fetch, NO keeper.
be:// sub sources still route to keeper /
GIT-020; git transport (//host) still uses git-upload-pack.
be/ JS (shared/submount.js, reuse store.js/ingest.js/get.js's localish
logic). Do NOT change the be:///git dispatch. Repro-first (CLAUDE.md §17).
havePin NAMED-shardlookup miss is part of THIS bug) — resolve the sub shard whatever its title.
mount/fetchChild: when the child URI is
file:/scheme-less, resolve the source sub shard on disk and either (a) make a store-backed worktree pointing at it (redirect .be + checkout), or (b) local-clone its pack via ingest.clone (no wire) — (a) matches "reuse the store, create a worktree" and avoids copying objects.
havePin to find an unnamed/project-less source shard so an already-localpin reuses without any fetch attempt.
jab get/mount theparent → assert the sub mounts with NO keeper exec — RED before the fix.
submount.mount: local-source reuse path — landed d80bdb5c
(localSourceUri/resolveLocalStore + the LOCAL-SOURCE branch, submount.js:154-280).
d80bdb5c "js tests pass, no native use";
the _BE_WILL_FAIL xfail list is now EMPTY (spot-submount dropped per the rule).
be.find/recursion
expect downstream (a redirect .be vs a self-contained .be/<title> shard).
$HOME/TEST-003, staged, pending land): `shared/
submount.js — localSourceUri/resolveLocalStore + a mount() LOCAL-SOURCE branch (store-backed redirect + checkout, NO wire) + a project-less havePin probe. Repro RED→GREEN, no keeper spawn; suite 132/141→134/141 (spot/submount, sub/untracked` green; no regression). Verified independently.
file://
local jab get yields a STORE-BACKED worktree (shared store, .be is a FILE), but subcase.sh assumes a self-contained FULL clone — sub/{baredel,bareput, selective} grep $JS/.be/wtlog (a dir, now a file); sub/{cycle,patch} need clone isolation (share the source store, so cur pin moves); sub/*-nested seed a gitlink with jab put (PUTNONE, no CLI spelling). Harness edits, own pass.
subcase.sh file://rewrite landed the fixtures but the child MOUNT still hit keeper — this was the gap.
d80bdb5c ("TEST-003,JS-099,SUBS-046: js tests pass, no native use", betrunk 06Jul): the product fix + the 7 harness-residual cases; sub/* + spot/submount all green jab-only, xfail list emptied. CLOSED (audit 2026-07-07).