log:<submodule> logs the SUPER-REPO's gitlink history, not the submodule's own (no sub-mount recursion)
From the journal root, be log:be (C) lists the be SUBMODULE's own commits (4bf8e3dc, f9180c2e, f3389efa, … — the beagle-ext JS history). jab log:be (JS) instead lists the JOURNAL/super-repo's commits that bumped the be gitlink (793e1161 "bump be->4bf8e3dc…", 46f8ea42, ee286166, … back to 5a25305c "the new be/ submodule beagle-ext") — the super-repo's history PATH-FILTERED to be, NOT the submodule's. jab log:./be is identically wrong; cd be && jab log: is CORRECT (== C). So jab's log:<sub> never descends into the sub mount. The history isn't corrupt — it's the WRONG repo's. C is correct; JS-only fix. Method: Issues.
be log:be → 4bf8e3dc f9180c2e f3389efa 4febec96 aef4caef … (the besubmodule's OWN commits — CORRECT).
jab log:be → 793e1161 46f8ea42 ee286166 fda1986f 7543ca39 … 5a25305c
(the JOURNAL's commits that touched the be gitlink — jab log: MINUS the commits that didn't bump be, e.g. ticket-only b2bc09bf/297231c5 are gone).
jab log:./be → identical to jab log:be (also wrong).cd be && jab log: → 4bf8e3dc f9180c2e … (CORRECT — matches C).be/views/log/log.js always operates on the CURRENT repo: handler :401
const repo = (ctx && ctx.repo) || null;; :411 store.open(repo.storePath, repo.project); :413 resolveTip(k, repo, parsed). parseArg (:44) takes a path but it is only ever used as a path WITHIN ctx.repo (the path-filtered walk / leaf descent) — log.js NEVER detects that path is a submodule MOUNT and switches into the sub's store.
shared/subs.js
(+ status.js, tree.js, blob.js consume it). log.js is the outlier that doesn't. So jab status / jab tree:be descend, but jab log:be does not.
be log:<sub> recurses into the sub mount and logs its history — the parity target.jab log:<sub> for a submodule-mount path (be, ./be) logs the SUB's own
history (open the sub's store/repo, walk ITS tips) — byte-parity with C be log:<sub> and with cd <sub> && jab log:.
jab log:<sub>/<path> logs <path> WITHIN the sub (strip the sub prefix, recurse).shared/subs.js mount detection (the status.js/tree.js precedent) — do
NOT hand-roll a second gitlink/.be-file probe. JS-only (C is correct).
and the BRO-006 U commit links. Repro-first (CLAUDE §17).
resolveTip/the walk: if parsed.path resolves to (or
starts at) a submodule mount, swap the working repo to the sub's {storePath, project} (via shared/subs.js) and strip the sub prefix from the remaining path. Mirror exactly how tree.js/status.js pick the sub repo so the three stay consistent.
path)` helper that tree/status/blob could also share (de-dup) — prefer the smallest change that matches the existing views, factor later.
.be-mount sub with ≥2 own commits; assert
jab log:<sub> lists the SUB's shas (not the super-repo's gitlink-bump shas), and equals cd <sub> && jab log: / C be log:<sub>. RED today (super-repo history).
tip, walk its history; strip the sub prefix for log:<sub>/<path>.
97e2ffaf (log.js) + be/test 755a5ea6. Root cause confirmed by
repro: jab log:vendor/sub listed only the super-repo's mount sub gitlink- bump commit; the handler always opened ctx.repo and path-filtered it.
:399 descendSub): BEFORE resolveTip/the walk, if parsed.path
is (or descends into) a sub MOUNT, swap to the sub's repo + strip the prefix. Mounts via subs.mountWtDir + the <wt>/<sub>/.be-is-a-regular-file gate and re-discovers with be.find(subWt) — EXACTLY tree.js/status.js's seam, no hand-rolled gitlink probe. Loops so a nested mount descends fully. The banner keeps the FULL original path (bannerPath) for C-parity.
jab log:be now == C be log:be == cd be && jab log:. log:<sub>/<path>strips the prefix → file history WITHIN the sub. Non-sub path unchanged.
be/test/log/sub/run.sh (glob → be-js-log-sub, no CMakeLists edit):
pure-be parent mounting a 3-commit sub (à la parity/status-subs build_fixture); asserts sub-tip present / parent-tip absent, byte-parity with C be log:<sub> + cd sub && jab log:, the ./ form, log:<sub>/lib.c, non-sub no-regression. RED proved (disabled descent → only mount sub), GREEN after.
U commit:?<sha> links renderfor the sub — branchHistory/appendRow are store-agnostic, unchanged. Suite green (sole reds = stale WILL_FAIL xfails: bro-universal + 2 diff, JS-071's, all pass-but-marked). Stopped before commit.