DIS-075: detach is recorded as the INPUT URI, not as a record get writes ?<sha>, a detached post writes trunk-shaped ?#<sha>; the record is #<sha>

Now
OPEN
Sev
MED

The canonical detached record is #<sha>: laws #1+#3 of DIS-071 settle it with no ruling needed a bare hash is not a branch/remote/worktree, so there is nothing to TRACK, so the query slot is ABSENT and the fragment carries the base (a "bare-hash record", law #4). URI-009's absent-vs-empty distinction then separates all three states byte-wise: #<sha> = no query = detached, ?#<sha> = present-empty query = TRUNK, ?br#<sha> = attached. Both records break it. (a) get's D2 detach writes the INPUT verbatim ?<sha>, sha in the QUERY, no fragment (get.js:491-496); ?abc1234 is what the user TYPES (GET:11 "a bare sha detaches"), never what gets recorded. (b) A detached post writes ?#<sha> branchKey is att.branch = "" when detached, so post.js:726 emits a TRUNK record (post.js:573-580, 720-726). Only attachedBranch's get-ONLY scan (wtlog.js:141-156) keeps such a wt detached; any reader trusting post rows sees the trunk views/refs/refs.js:22-28 does exactly that, labelling off curTip().br, so jab refs prints ? for a detached wt. Precisely the disagreement DIS-059's DIS-057 comment swears is impossible. Law #4 makes a sub's own commit produce the same #<sha> (DIS-072), so the shape is load-bearing, not cosmetic.

Input

Context

Detachment is encoded in the query on one path, lost on the other, and re-derived by a get-only scan that not every reader uses.

Goals

One record shape per state, readable by every reader without a get-only special case.

Constraints

Read-compat and one reader; the ARGUMENT grammar does not change.

WIP

Design decisions

TODOs

Blockers and bummers

Outcome