be get file:<wt> leaves an incomplete checkout + SNIFFFAILThe worktree-form clone be get file:/home/gritzko/beagle (the Issues worker
setup: a store-backed wt sharing ~/beagle/.be) intermittently exits
SNIFFFAIL with a HALF-POPULATED tree: abc/ empty (submodule not mounted),
woof/ and 3 test/tree/ files absent — yet most of the tree is present, so it
looks done. The DIFF-003 worker hit this, then silently restored the missing
build-only dirs from the canonical tree to make cmake work — a workaround that
should have been THIS ticket, not a silent patch (Issues / CLAUDE §17).
Distinct from GET-018 (atomic rollback ON failure): here GET reports failure
yet leaves partial state.
be get file:/home/gritzko/beagle into a fresh $HOME/todo/DIFF-003/ →
SNIFFFAIL; abc/ empty (sub unmounted), woof/ + 3 test/tree/ files
missing; cmake config then failed on the gaps.be get file:<wt>
checks out 1171/1200, an IDENTICAL 29-file miss across fresh re-runs (all of
woof/, some test/spot/07-10, test/tree/), SNIFFFAIL each time;
re-running does NOT converge. So NOT mere contention (earlier theory).be get <path> materializes every
missing file (→ 1200 ok). So this is a BULK-checkout defect, not missing
data — a specific set of paths is silently skipped by the multi-file walk.be get <path> (real store checkouts), verify 1200 ok, then build.~/beagle/.be): 7 of 9 truncated
to 474/528 test/ files, a CLEAN tree-order cutoff at test/put/05 (ALL
of test/spot+test/tree+test/put/05… dropped, mis); woof/+abc/
present here, so the dropped SET is NOT fixed across runs.be
get → a second pass filled the tail. So re-run makes PROGRESS (474→528),
not the "doesn't converge" earlier theory; cutoff is a moving truncation point.$HOME/todo/PTR-001 (do NOT delete) — truncated wt,
be status shows the 54 mis. Consequence: truncated wts ran ctest over a
REDUCED set — 286 vs 298 in complete wts (~12 spot/tree/put cases silently
never registered); their "green" excluded those.be get either produces a COMPLETE checkout (every tree file + mounted
subs) or fails leaving the wt visibly unusable — never a half-populated
tree that reads as done.SNIFFFAIL mid-checkout must surface WHICH step failed and not silently
drop files / skip the sub mount.abc/ ties to the submodule mount
step (SUBS); both must be covered by the complete-or-fail guarantee.abc/ edits; this IS the dogfood worker-clone path.keeper/WALK.c::walk_tree_dive
recurses into subdirs with a PLAIN C call while each level a_carves a 1 MiB
tbuf off ABC_BASS — bare recursion never rewinds, so ~1000 dirs pile up to
the 1 GiB arena cap; the next carve returns BNOROOM mid-walk → WALK return →
SNIFFFAIL. Trace: BASS climbs 21→1023 MiB, breaks exactly at test/put/05
with free=0, vo=BNOROOM, ctx.error=OK (no file-write error). Same class
as BLAME-004's blame-bignoroom. NOT the atomic-swap hypothesis.try(walk_tree_dive,…); vo=__; — try() snapshots
BASS after the parent's tbuf carve and rewinds per subtree, so only the live
root-to-leaf chain stays carved. One line; covers WALKTreeLazy (get) +
WALKTree (blame/diff). ("empty abc/" was downstream of the truncation —
NOT a 2nd bug; abc mounts once the walk completes.)sniff/GET.c checkout + any ROWS/HUNK batch cap
it drains through); per-file be get <path> works → compare the single-path
path vs the bulk walk for where the tail is dropped + why SNIFFFAIL is the
only signal.be get truncates at test/put/05; BASS climbs to 1023 MiB
then BNOROOM. Repro preserved at $HOME/todo/PTR-001 (read-only).try()-wrap the walk_tree_dive recursion (BASS rewind per subtree);
fresh be get now 1441 tracked / 0 mis, abc mounted, exit 0.WALKtest6 (1300-wide sibling tree) — FAILS pre-fix (BNOROOM),
PASSES post-fix; full suite 298/298.keeper/WALK.c + keeper/test/WALK.c), then ff-post.49039f36 (ff, parent 229d122b): keeper/WALK.c try()-wrap of
the walk_tree_dive recursion + keeper/test/WALK.c::WALKtest6. 298/298; a
fresh be get now checks out the COMPLETE tree (1204 ok, 0 mis).sniff PATH-fallback masks which binary runs when
bin/sniff is absent (HOMEResolveSibling) — distinct dev-ergonomics hazard,
to be filed as its own ticket.