GET-016: 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.

Repro (observed this session, MEM-044 worktree)

Issues / root cause

Status / Planned

Impact

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.