be get is non-atomic for the wt (ref advances before the write) and get --force/get! won't full-reset a drifted worktree
be get's COMMIT POINT (sniff/GET.c:1338-1353) appends the get ULOG row and advances the local branch tip BEFORE the worktree mutation, whose own comment admits it "is not crash-safe — a partial run leaves a mix of new contents and old paths"; so a midway fail (or any path that advances the ref without completing the write) leaves the ref/wtlog ahead of the tree, and because checkout is a baseline↔target delta (get_overlap_check, GET.c:319-335) the now-equal baseline==target paths fall into the no-op-overlay bucket (GET.c:264-297) and are skipped, so the stale bytes are never rewritten and the wt is permanently drifted with no automatic recovery — --force only steers the dirty classification (GET.c:458-475), never the no-op skip (GET.c:272), so even get! can't reset it. See GET, Issues, GET-012, GET-014.
5104a855; trunk advanced (MEM-038/040/043/045 then MEM-044 91f215a4); be get --nosub moved the ref to the tip but left the files — be log shows 91f215a4, be status shows 13 phantom mod (changed-since-old-tip) + 3 mis (added files), the diff reading "backwards" (stale disk vs newer baseline).be get ? (re-checkout) rewrote ONLY the genuinely-absent files (lstat-fail fall-through GET.c:270-295) + remounted abc; the 13 present-on-disk stale files stayed mod. be get --force leaves them too (no-op bucket ignores force).be put <those 13> ; be post would commit the stale bytes and silently REVERT the four landed tickets — the "backwards" changeset.be get --force ?<cur>, which (below) doesn't actually work.get_visit writes nothing; the no-op skip exists to protect user edits but here it preserves stale bytes.--force gap: force flips the dirty-overlay refusal into "overwrite dirty bytes", but a stale-yet-baseline==target path is classified no-op, not dirty, so force never reaches it; no reliable reconcile short of a fresh re-clone.get --force/get! = full tree reset — LANDED 52ba21b5. The content-rewrite half was already handled by the c->force short-circuit at get_overlap_step (GET.c:417); the missing piece was unlinking wt-only TRACKED orphans, added as force_orphan_cb (GET.c:641, SNIFFAtKnown-gated so untracked clutter survives) wired into GETCheckout (GET.c:1525, under force && !prune). Repro test/get/49-force-full-reset (red→green); 280/280 green. be get --force ?<cur> is now a reliable full-reset recovery.test/get/09+10 (get/10 asserts the wtlog GROWS on a failed write and that --force replay is the recovery). True all-or-nothing atomicity needs a stage-to-temp/journal+rollback redesign with a design pass — tracked as GET-018.be get --nosub not advancing a switch-shaped worktree's ref at all (the bug that forced fresh-clone salvage of MEM-041/042/044 this session) is filed as GET-017.
The Issues.mkd loop's "be get --nosub to update first" step is unreliable today — it silently leaves stale trees and invites the revert footgun; fixing (1)+(2) restores a trustworthy update-then-post cycle.