.be/ directory crashes jab get
Cloning into a directory that already holds an empty .be/ dir — the standard hermetic-shield shape the native harness creates (mkdir wt wt/.be) — crashes jab get with an uncaught error and an empty worktree, where native treats the empty .be/ as a fresh shield anchor and clones cleanly. One conceptual defect (empty .be/ mis-detected as an existing store instead of a fresh shield) with three transport-specific faces. It masks/blocks most submodule + clone repros, so it gates several JGET-001 children. Method Issues.
beagle/test/get/{29, 62} and ALL submodule cases (each does mkdir wt/.be).
- ssh/general: core/discover.js::find() treats empty .be/ as shieldLike → returns a non-null stale repo (bePath=<wt>/.be/wtlog absent, project=""); core/loop.js::cli (~267-305) only runs the repo-less GET seed when find() THROWS, so the stale repo takes the wrong branch → downstream throw. - file: local: get.js:128-134 seedLocal→ulog.append→io.rename → Error: Is a directory (renames a temp over the .be DIR). - be: local (case 62): seedRemote fresh=!exists(.be) is false for an empty dir → first clone routed to the incremental else → ingest.add (ingest.js:117) writeBytes into a non-existent shard → ENOENT.
~/todo/JS096-probe1/predot, ~/todo/JSGET-cases/nosub-emptybe,
/tmp/jab-f62.*.
jab get into a dir whose only .be is an EMPTY dir (or the empty-.be FILE
shield) clones cleanly across file:/be:/ssh:, identical to native; a real populated .be store is still detected as existing.
.be/ as "no local store yet,fresh clone") rather than three band-aids, if feasible. Repro-first.
discover.js::find() (and the fresh test in seedLocal/seedRemote) treat
an EMPTY .be/ dir (and the empty-.be shield FILE) as no-store-yet → the repo-less fresh-clone path; only a populated .be (a wtlog row / shard) counts.
mkdir d/.be; cd d; jab get <file:|be:|ssh: remote> → clean clone.seedLocal (get.js:187-192) fresh=!exists(<wt>/.be) → false for the empty DIR → appendWtlog(<wt>/.be) → ulog.write io.rename(tmp, <wt>/.be) over a directory (ulog.js:192) → EISDIR crash.be.find(wt)-routed): discover.js:132 still anchors an empty .be/ dir as shieldLike → the UPDATE arm; store.shardDir(wt,"") falls back to the empty .be itself, so ingest.add MAY now land there instead of ENOENT-crashing — RE-PROBE this face before fixing (unverified, audit 2026-07-07)..be/ dir (and the empty-.be shield FILE) as no-store-yet in discover.find + the seed fresh-checks; then fold into the existing be/test/get cases (the shield shape is the harness norm).wt/.be); 008/009 retired meanwhile.be/test harness firewall is an empty .be FILE at the scratch ROOT (getrepro.sh : > "$TMP/$$/.be"), not an empty dir at the clone wt — so the suite never hits this shape today.