be get <path>?<rev> drops the path, treats the rev as a branch
There is no way to materialize ONE file at a given rev into the worktree (git checkout <rev> -- <path> parity). be get <path>?<rev> silently DROPS the path and resolves ?<rev> as a branch/ahead-behind target → a no-op or KEEPNONE. The blob:/cat: projection resolves the file at the rev for READING, but no VERB writes it back. This is the tool GET-021 needs: fix a single stale working file without a whole-tree be get that would clobber unrelated WIP. Method: Issues.
~/beagle, fixing the GET-021 stale graf/BLAME.c):
be get! graf/BLAME.c?f6bea1c5 → sniff: get: cannot resolve graf/BLAME.c?f6bea1c5 / KEEPNONE (sniff/GET.c:1711/1821).
be head dry-run: be head 'graf/BLAME.c?f6bea1c5' →
head:?f6bea1c5 / ?f6bea1c5/: 0 ahead, 0 behind, 0 changed — the PATH is dropped and f6bea1c5 is parsed as a branch name. be head 'graf/BLAME.c?#f6bea1c5' → whole-branch ahead/behind, path again ignored. The blob:/cat: projection (be blob:graf/BLAME.c?f6bea1c5) DOES resolve the file content at the rev.
get only means "which sub(s) to recurse into" (BE.cli.c:1887,"ONLY a LOCAL bareword path is a within-wt scope"; SUBS-018) — NOT "check out this file at this rev". There is no per-file restore.
file to cur — without be get '?#<tip>' over the whole tree, which a --force would use to also overwrite unrelated dirty WIP (e.g. ABC.md).
be get [!] <path>?<rev> (or the agreed canonical form) writes <path>'s blob at
<rev> into the worktree and records it; --force (!) overwrites a dirty path; no whole-tree checkout, no touch of other paths' WIP. Multiple paths allowed.
<path> does not exist at <rev> (not a silent path-drop /branch-ahead-behind no-op).
blob:/cat: projector already uses (it
resolves <path>?<rev> correctly) + the path-scope parse — do NOT re-roll URI parsing (CLAUDE.md / Issues hazards).
be get or path-scoped sub-recursion get.get with a non-empty u->path + a rev to a single-blob checkout
that reuses the projector's resolve, instead of falling through to the branch ahead/behind / whole-wt path (the fall-through is what yields the ?<rev>/ branch no-op + KEEPNONE at sniff/GET.c:1711/1821).
be get <path>?<rev> on a known file/rev → assert the worktree filebecomes that rev's blob (and a clean error when the path is absent at the rev).
--force overwrites a dirty path only.path-scope semantics of GET-017/SUBS-018.
be get! graf/BLAME.c?f6bea1c5 → KEEPNONE)