GET-048: get weaves COMMITTED deltas as if dirty divergent+clean must be a plain reset (spec GET §intro+§4)

Now
OPEN
Sev
HIGH

Incident 2026-07-17, work/ABC-016: tree CLEAN at local head ?467fb44b (ahead 1, behind 5); jab get dissolved the committed delta into 11 mod rows AND del-ed test/EXIT.c (a file the local commit ADDED the merge used the local head as diff base, so a local add read as an upstream deletion; data loss). gritzko clarified GET the same day: get "never changes history it only resets the worktree to a chosen version, maybe re-applying uncommitted changes"; §4: ONLY uncommitted changes are carried by weave. get.js classifies per-file "differs from base" as dirty without asking whether the delta is committed.

Input

Context

be/verbs/get/get.js (weave path ~:485-530): dirty-vs-clean is judged against the BASE; a committed local head's files all "differ from base" and get weaved. Spec-conforming behavior for ABC-016's case: plain reset to the target, tracking re-pointed, ?467fb44b left intact in the store for an explicit patch '#467fb44b' + post (the Verbs.mkd cheat-sheet route).

Goals

get tests differentiate the case matrix; code complies with the clarified spec.

Constraints

WIP

Design decisions

Fix is 3 spots in verbs/get/get.js: leaf weave base = cur (oldSha), never the merge base (:986) a committed delta reads clean and clean-overwrites to target; in diverged mode a path absent from the merge-base tree is a locally-committed add unlinked by the reset but NO del row (:951); basePaths demoted to del-row classifier (~:559). No auto-merge divergent heads stay patch's job.

TODOs

Blockers and bummers

The dag-diverge contradiction above is the only red; its header also stale-claims the case is unregistered.

Outcome

UNCOMMITTED in work/GET-048: mod verbs/get/get.js (3 hunks); test subrepo: 3 unk run.sh (test/get/divergent-*). Orchestrator re-verified the 3 new cases green + dag-diverge red. Suggested commit: GET-048: divergent get resets, never replays commits.