GET-040 JS HIGH: non-force get DELETES untracked files — only get! may clean

A plain (non-force) jab get must MERGE dirty tracked files and LEAVE UNTRACKED files alone; only jab get! may clean the worktree (GET wiki: "be get! resets the worktree to a clean state, all local changes discarded"). It does not: a non-force get that recurses into a submodule RESET the sub and SILENTLY DELETED every UNTRACKED file in it. Verified this session: in a beagle-ext worktree, test/ is the beagle-ext-tests store-backed submodule; a non-force jab get swept 7 dirs of untracked, newly-authored test files (left empty), while tracked files survived — silent data loss. Suspected locus: get's del-sweep / prune (verbs/get/get.js fanoutWholeTree + delSweep) unlinks worktree paths absent from newTree WITHOUT checking they were TRACKED (in oldTree), and/or the submodule recursion does a wholesale clean re-checkout of the sub (should be read-only, DIS-058). JS only (be/, via jab). Evidence: cost the GIT-016 T1–T4 tests. Method: work; siblings JGET-001/DIS-058/JGET-013.

Input

Context

Goals

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome