Bare jab put (no path arg) stages every top-level mod file and bare jab delete sweeps every top-level mis (missing) file, but BOTH stop at a gitlink: bareStage's baseline-tree walk returns at leaf.kind==="s" ("gitlink: nothing to put", be/verbs/put/put.js) and del_sweep_missing does if (leaf.kind==="s") return // gitlink subtree, skip (be/verbs/delete/delete.js:78). So a mod file inside a MOUNTED submodule is left unstaged by bare jab put, and a mis file inside a sub is never swept by bare jab delete — diverging from native be, which recurses pre-order (Submodules §Recursion: "staging a submodule file delegates that to the submodule, then stages that submodule"). Fix: at a mounted gitlink, descend via the core/recurse.js mount walk, run the sub's own bare put/delete over its mod/mis, then bump the sub gitlink in the parent. Parent DIS-058; sibling SUBS-039 (the scoped <sub>/<path> case). Method Issues.
jab put → bareStage (be/verbs/put/put.js): walks the baseline tree, mod→put row, auto-pairs mis↔unk moves; at a gitlink it returns, never descending into the mounted sub.jab delete → del_sweep_missing (be/verbs/delete/delete.js:78): a tracked leaf gone from disk gets a delete row, but if (leaf.kind==="s") return // gitlink subtree, skip drops sub-interior missing files.core/recurse.js already enumerates every MOUNTED sub (depth-first, .gitmodules order) for READ recursion (status/diff/ls) — read-only today per DIS-058; the staging verbs don't use it.be recurses pre-order for put/delete (Submodules): a sub-interior dirty/missing file is staged inside the sub, then the sub's gitlink is staged in the parent.jab put stages every mod file, INCLUDING those inside mounted submodules (recursively), then bumps each touched sub's gitlink in the parent.jab delete stages every mis (missing) file, INCLUDING inside mounted subs, then bumps the sub.core/recurse.js (the mounted-sub walk) — no second sub-enumerator; mounts only (recurse.isMount), never an unmounted gitlink or a symlink (see SUBS-043).mod) and BARE delete (mis) ONLY — the scoped <sub>/<path> arg is SUBS-039; named single-file put/delete unchanged.be/ JS only; ABC/JS norms, ≤2-line comments, reuse before adding; don't regress top-level bare put/delete or the read-recursion (status/diff/ls).<sub>/; then emit the parent gitlink-bump — pre-order (sub first, then parent), matching native + Submodules.be/test/sub/bareput + sub/baredel (golden.out each) pin the recursive bare stage/sweep + gitlink bump.jab put: descends each mounted sub pre-order — landed a715b0d3 (put.js:436-465 bareSubs via recurse.walk).jab delete: mis sweep descends mounts — landed a715b0d3 (delete.js:67-127 bareSweepSubs; the leaf.kind==="s" skip stays only for UNMOUNTED gitlinks).sub/bareput, sub/baredel, sub/bareput-nested, sub/baredel-nested registered (glob); green jab-only per d80bdb5c.a715b0d3 ("SUBS-044: put,delete submodule handling", be trunk 01Jul):
bare put/delete recurse mounted subs pre-order via core/recurse.js, sub rows prefixed, gitlink bumped; tests sub/{bareput,baredel} + -nested variants.
d80bdb5c. CLOSED (audit 2026-07-07). The scoped
<sub>/<path> DELETE arm remains with SUBS-039.