.be DIR) as parent files — the .gitmodules sub boundary is missedReport (gritzko, 2026-07-10): jab get into a subdir + listing it in
.gitmodules — jab put <subdir> recurs into it like new files instead
of recognizing a submodule boundary. Root cause: BOTH boundary probes
only accept the SECONDARY anchor form (.be regular FILE = the wtlog):
classify.js::wtScan nested-repo detect (be/shared/classify.js:77-79)
and recurse.js::isMount (be/core/recurse.js:36-44). But a
green-field jab get of a remote plants the PRIMARY form — a .be DIR
holding wtlog + the shard (be/verbs/get/get.js:217-228 seedRemote →
ingest.clone + writeWtlog(join(beDir,"wtlog"))) — which be.find
anchors on (core/discover.js:128-134) yet neither probe recognizes.
So the sub's interior rides the parent's wtScan and put <dir> stages
it as parent put rows; status floods unk the same way. The
.gitmodules declaration never enters this path (expandDir is
gitmodules-blind; recurse.walk consults it but gates on isMount).
Siblings SUBS-039 SUBS-044 SUBS-045; umbrella DIS-058.
file:~/.be/?/beagle-ext-tests as parent; clone again into parent/vendor2; convert the anchor to the primary form (.be/wtlog DIR — what a remote-source green-field get plants); declare vendor2 in .gitmodules.jab put vendor2 staged ALL 147 sub files as parent rows (put vendor2/CMakeLists.txt … in the PARENT .be wtlog); jab status listed the same 147 paths..be FILE, what a local file: get or submount.js::mount plants) is correctly firewalled: wtScan drops the prefix, put vendor → PUTNONE, put vendor/ delegates via stageInSub.classify.js::wtScan:77-79: nested prefix iff <dir>/.git exists OR statKind(<dir>/.be) === "reg" — a .be DIR fell through.core/recurse.js::isMount:36-44: mount iff io.stat(<sub>/.be).kind === "reg" — same gap; so subMountPrefix/stageInSub/bareStageSubs and status/diff read-recursion all skip a primary-anchored sub..gitmodules-declared nested worktree with a PRIMARY .be anchor is a repo boundary: never staged/classified as parent files (FIXED — see WIP), and treated as a mount by put's delegation + the read recursion (remaining)..be dir cases: a multi-shard STORE dir is NOT a wt anchor (be.find walks past it) — mirror find's anchor rule, not a blanket "any .be dir"..be DIR holding a wtlog reg file); the empty shield-.be (no wtlog) stays undetected — it holds no baseline and mostly occurs in test scratch; note if it bites.be/shared/classify.js:79-82 now: beKind === "reg" || (beKind === "dir" && statKind(join(full, ".be/wtlog")) === "reg") (applied 2026-07-10, UNCOMMITTED; post-fix: put vendor2 → PUTNONE, status/wtlog 0 sub rows; suite 171/173, the 2 fails pre-exist — see bummers).core/recurse.js:43): same widening ("reg" || dir-with-wtlog) so a DIR-anchored declared sub delegates (stageInSub), descends (bareStageSubs, delete sweep) and read-recurses (status/diff) like a FILE-anchored one.be/verbs/put/put.js:465-473) tests only PROPER prefixes (i < segs.length - 1): jab put <sub> (no trailing slash) never probes <sub> itself → PUTNONE while jab put <sub>/ stages inside the sub (repro'd on the FILE form). Probe the full path too (dir-args only).test/sub/ case for a primary-anchored declared sub — put path-arg, bare put, status; plus the no-slash put <sub> delegation case.be-js-get-be, be-js-get-oddname — status reads all-unk right after a get (baseline unread); unrelated to this ticket, needs its own GET ticket..gitmodules, is the effective boundary; spec ruling welcome.