A jab get update that hits ONE conflicting file silently loses the pulled changes in every file whose write-leaf was still queued behind the conflict: the D5 CONFMARK throw-sentinel is tail-appended to the get FIFO, but a dir-reconcile row dispatching after the conflict enqueues its child leaves AFTER the sentinel, so the GETCONF throw kills them undispatched. The seed already advanced the wtlog tip, so the un-materialised files read as innocent local mods — and a repair get cements the loss (weave3 keeps the stale bytes as "ours", reports mrg, exit 0). Three worktrees hit this on 2026-07-11 (JS-111b, JS-113b, JS-114). Related: GET-018 (atomic wt update), GET-021 (phantom mod). Method Issues.
jab get/pager :get in JS-111b, JS-113b, JS-114 (all with a put-staged CMakeLists.txt edit) → GETCONF 1 file(s) merged with conflicts; afterwards 8-10 test/*.js files read mod with PRE-get mtimes: the get never wrote them, though the pulled JS-101..JS-112 commits changed them and they were locally CLEAN.be @ jsrc tip): the conflict leaf returns {enqueue:[CONFMARK]} (get.js:795); the comment "it dispatches AFTER every leaf (tail-appended), so all files are materialised, then throws" (get.js:66-68) is WRONG — the test/ dir-reconcile still in the FIFO fans its leaves out after the already-queued CONFMARK; CONFMARK throws (get.js:284-287) and the drain loop (get.js:1059-1063) drops them. Root-level leaves already queued before the conflict (net.cpp) DID merge.mod, not damage.bytesEq(theirs, base) → return ours (get.js:910-912) keeps the stale bytes, prints mrg, exits 0. Verified live in the repro: after hand-resolving the conflict, mrg test/clean.js reported while the old content stayed. Only get! recovers.zconf.txt after atest/) → same GETCONF, but the clean file updates fine. The drop is purely queue position.conf.txt+test/clean.js), wt at c1 with an overlapping local conf.txt edit, get → exit 3 = reproduced (GETCONF + tip advanced + test/clean.js stale).get after the fix must converge the wt to the target tree (no mrg-keeps-stale trap on files the user never edited).get/ (the existing get/dirty case A2 checks only the conflicted file itself — extend or sibling it with the dropped-leaf assert).be/verbs/get/get.js; follow the JSQUE-020 pattern: no CONFMARK queue row — tally g.conf at the leaf, throw from finalizeGet AFTER the FIFO drains (both the loop and plain-args drivers end there).mrg-keeps-stale weave3 early-out is load-bearing for real local reverts; only the ordering fix (all leaves materialise) makes it safe — do not special-case weave3.get! after salvaging local edits — user-driven, evidence wts kept until then.file:/abs/path (single slash) loses its FIRST path segment in the remote parse; file://abs works — hit while building the repro.