index/index.js readTree DROPS gitlinks (mode 0o160000) — a submodule's blobs live in another ODB, so rows about them in the parent's lane could never be rebuilt by rm -rf .git/be there. Submodules are therefore invisible to bee today: html/ in the journal lists blank and its pages are unreachable. The ruling is uniformity, not a special case: bee install and bee index RECURSE into every initialised submodule, so a sub is an ordinary registered repo with its own lane and every link crossing the boundary is an ordinary cross-repo link (BEE-002).
BEE-001 made install the registration point ($HOME/.config/bee/repos, one absolute worktree path per line) and gave it the index + lindex bring-up; nothing walks into a submodule.
.git is a GITFILE into <parent gitdir>/modules/<name>, and it carries no commondir — so BEE-001's linked-worktree refusal does not trip on it.Installing or indexing a parent leaves every initialised submodule installed and indexed too, and no code anywhere carries a submodule case.
bee install <parent> registers and brings up the parent AND each initialised submodule, depth-first, and says how many it took.bee index <parent> brings up the submodule lanes the same way; opts.track === false still writes no registry line, for any of them.bee list attributes the row./home/gritzko/src/bee2 (branch worktree2), gritzko's call; no VC writes in it or in the main tree.readTree stays — the parent's lane must never carry a foreign blob's row..gitmodules, not from a shelled-out git submodule walk if the ODB already answers.bee index <parent> DOES recurse by default,
because the N-gitdir fear is not the hot path — the views (list, log,
diff, lindex, door) all ride bringUp on ONE open repo and never
recurse, so only the explicit index verb and install walk subs, and a
repo whose tip carries no .gitmodules pays one cached Map hit. index
takes opts.subs === false for a caller that must not.descend: dog/git's GITTreeDiff
drops gitlinks in C (git_td_next), so no diff ever hands one back. The
gitlink revs are minted beside it, from the tip's sub paths compared over
the commit's tree and its parents' — readTree's drop stands untouched.html/ no row at all, the sub unregistered.gitmodules, uninitialised ones skipped in wordsinstall recurses: register + index + lindex per sub, counted in the report lineindex recursion, under the ruling taken above; track: false still writes nothingbee list attributes the submodule rowREADME.mkd install/index lines, INDEXES.mkd gitlink sentence + dir-rev entry, index/index.js headertest/index test/list test/lindex test/first greenhtml/ had no row at all in
bee list (a dropped gitlink is no entry), not a blank one. view/list.js
now adds the sub rows off subTree and sorts them git's way.list <abs>/, which
the parent's own repo cannot answer. Crossing the boundary is BEE-002.git archive build: test/first
(2, the non-repo bare run), test/http (2), test/merge (2), test/pager
(2, the pty goldens). Everything else green.Landed in the worktree /home/gritzko/src/bee2, uncommitted.
index/index.js: subTree/subPaths/submodulePaths/subAt (the gitlink
reader, memoized per tree, gated on .gitmodules at the tip), subRevs
(one DIR rev per pointer bump, emitDir's shape), submodules (the
initialised ones, skips in words), indexSubs (depth-first recursion, flat
rec.subs, _seen cycle guard), subsSaid (the report tail).merge.js install: the recursion's subs are tracked and lindexed, and
the one line says "took N submodules" plus every skip.view/list.js: the sub's row, attributed off the gitlink dir revs.test/index/run.sh leg 5 (7 shell checks) + test/index/subs.js
(6 checks: the walk, track: false writing nothing, REV-CMMT and no
REV-BLOB, no row keyed by the sub's commit). index 148, list 83,
lindex 31, plus 16 more suites green.