GET-053: bare get goes FF/FB-only; get! becomes the any-commit reset

Now
DONE

RULED into /wiki/GET (gritzko, 2026-08-01): a bare get may only move the wt ALONG cur's line fast-forward or fast-backward, "refuses otherwise" (/wiki/GET "Forceful execution"); diverged and unrelated targets need the bang, which resets to any commit, discards local changes and deletes untrackeds. Divergence resolves through two loud doors: patch (weave theirs in) or get! (adopt theirs). Kills the diverged-plain-reset machinery of GET-048 and the silent non-FF clobber class of GET-014.

Input

Context

Today bare get moves the wt to ANY ref: a diverged target is a plain reset (GET-048), needing merge-base basePaths classification and still risking silent loss (GET-014, GET-052); get! means "discard dirty edits + sweep untracked" (/wiki/GET §2.2, GET-040).

Goals

Land the line gate in be/verbs/get/get.js (and the native twin); the spec is written and the bang semantics are ruled, so the code is the only thing left.

Constraints

Concerns raised in review (2026-07-24); the first two are settled by the 2026-08-01 spec, the third stands:

WIP

Design decisions

The bang-semantics split is RULED (c) by /wiki/GET 2026-08-01; (a) and (b) are dead:

The FAST-BACKWARD case in GET-058 terms (the landed quad classifier decides, this only says which column feeds it):

  1. The deciding axis is TARGET vs BASE, never "track vs root" literally; the wt column stays measured vs BASE in both directions (GET-058).
  2. FAST-FORWARD: root = mergeBase = base, so the track column IS target-vs-base the 13 cells are indexed exactly as GET-058 wrote them.
  3. FAST-BACKWARD: nothing to add checkout.trackChar(oldSha, newSha) already computes that axis directly, so the backward cells (o→delete, x→restore) fall out of the landed code (VERIFIED 2026-08-01: test/get/line-backward was green before any edit).
  4. So no inversion helper was written; the backward test stays as a regression guard on trackChar.
  5. Both columns lit at once = DIVERGED = refuse (bare) the shape the table never has to fold, as GET-058 states.
  6. Nothing else moves: same 13 cells, same WEAVE3/OURS/THEIRS/DELETE verdicts, same binary modifier on the both-sides-edited cells.

TODOs

Blockers and bummers

Outcome

(open)