be self-locator symlink as adv (it is not a submodule, not advanced)
jab status in ~/journal/be prints adv be (63 ok, 1 adv), but be is the be -> . extension self-locator — a 120000 SYMLINK, not a submodule — and is NOT declared in .gitmodules (only test is). A path that is not a declared submodule, and a symlink besides, must read CLEAN, never adv. This is a be/ JS status divergence and a member of the self-locator family (GET-039: a symlink is a 120000 blob, never followed, never a gitlink). be/ JS (reported by user, 2026-06-30). Parent DIS-058; spec Submodules / Dirty; method Issues.
cd ~/journal/be && jab status → 11:18 adv be / ? 63 ok, 1 adv.be on disk is be -> . (a 1-byte symlink to the wt root) — the be/ extension
~/journal/be/.gitmodules declares ONLY test (path = test), NOT be — so
be is not a submodule by declaration.
ok/eq, never the submodule adv bucket.
shared/subs.js::enumerate (collects
baseline kind === "s" gitlinks) + classifyMount (the adv axis, SUBS-030); shared/classify.js::classifyMerge gitlink handling; views/status/status.js sub rows. subs.js::isMountAt already has a lnk NOFOLLOW guard, so the adv slips a different path — likely be is committed as a 160000 gitlink (a self-gitlink, GET-037) that enumerate reads as a sub and classifyMount follows be -> . back to the wt (r4 = wt tip ≠ pin → adv), OR a non-mounted gitlink is adv-classified without the mount/symlink guard.
be status does not report this (confirm) — it is a JS-port divergence.jab status in be/ reports be as clean (counted ok, no adv row), matchingnative.
.gitmodules is never classified as a submodule.be -> . self-locator (a 120000 symlink) reads as a normal clean file, never
adv (GET-039).
be/ JS only. Use the .gitmodules declaration (now shared/gitmodules.js, from
PUT-004) as the authority for what IS a sub; reuse subs.js::isMountAt's lnk NOFOLLOW guard. Do NOT regress real-sub adv detection (SUBS-030) or the test sub.
be -> . self-locator + an
undeclared symlink) shows no adv; a genuinely-advanced real sub still shows adv.
adv classification on .gitmodules declaration (shared/gitmodules.js)AND the symlink NOFOLLOW guard, so an undeclared path and/or a symlink never enters the sub classifier — mirror GET-039 (self-locator = 120000 blob, never followed).
be -> . is committed as a 120000 symlink blob
(3026a5fb + d31b52ea); guard tests sub/selfloop, sub/symlink.
classifyMerge sub-classified ANY base gitlink; isMount copiesfollowed the symlink (DIS-058 D18).
.gitmodules declaration — landed 36b1aec0
(shared/classify.js:194,314 declaredSubs gate); symlink NOFOLLOW in subs.js::isMountAt (lstat lnk → false).
jab status in be/ reads 77 ok, NO adv be;
the test sub still classifies (?/beagle-ext-tests/.beagle-ext 236 ok).
be is committed as a 160000 gitlink or a 120000symlink in the beagle-ext tree — the repro must read the tree mode (GET-039).
36b1aec0 (the declared-only sub gate in shared/classify.js; comment there
tagged SUBS-045 — same commit, both tickets rode it) on top of GET-039's symlink-as-blob (3026a5fb) and subs.js::isMountAt NOFOLLOW.
jab status in ~/src/journal/be → 77 ok, no adv be.CLOSED (audit 2026-07-07).