jab get --force leaves a tracked-but-out-of-tree orphan on disk (no orphan sweep)
jab get --force ?feat does not delete a tracked file that is absent from BOTH the baseline and the target trees but still present on disk (a leftover from a prior aborted unlink). When baseline==target the reconcile walks only the empty delta and has no orphan sweep, so the stale file survives; native unlinks it (the GET-016 force-full-reset invariant). Not destructive — the surviving file is stale clutter and the in-tree bytes are correct — but the case-49 invariant fails. Part of JGET-001; method Issues.
beagle/test/get/49-force-full-reset (GET-016 Part 2, the deletion side).sub/b.txt on disk;
jab get --force ?feat → sub/b.txt survives; native unlinks it. Evidence /tmp/claude-1000/jabprobe/c49-jab.
--force reconcile only diffs baseline↔target; no pass that removestracked paths present on disk yet in neither tree.
jab get --force drives the wt to EXACTLY the target tree, including removing
tracked on-disk paths absent from the target (matching native GET-016); untracked files are governed by --prune, not this sweep.
Repro-first.
stamp-set) and unlink any not present in the target tree. Gate on --force.
--force ?feat → orphan removed.fanoutWholeTree sets oldTree="" on force (get.js:395), so the reconcile (reconcileDir, get.js:655-707) visits ONLY new-tree paths; a tracked path in neither tree is never enqueued as a delete leaf. finalizeGet/sweepDelDirs (get.js:954-975) only rmdirs emptied dirs. Enumerate the BASELINE tree (don't blank it) or the wtlog stamp-set and unlink tracked paths absent from the target, gated on force; coordinate with GET-040 (non-force must never clean).be/test/get (case-49 shape; native oracle retired by TEST-003) — test/get/dirty case B covers force CONTENT reset only, not orphan removal.