get from, not a bare branch string (umbrella)worktree (AUTHORITATIVE; it replaced the deleted trees.mkd, of which only img/trees.jpg survives) gives a worktree exactly two parameters — the URI it tracks and its base commit — and RULED 2026-07-15 (gritzko) pins the four laws: (1) you track the URI (branch, remote or worktree) you last get from; (2) bare get and bare post imply that URI; (3) every get/post record carries the base hash in its fragment; (4) a submodule tracks the parent's pin, addressed by the child worktree's local URI //WT/path/to/sub. be/ JS models track as a bare branch STRING: every get record strips the authority (get.js:185,242,520), refOf adopts a branch from LOCAL rows only (wtlog.js:52-55), and tip() walks back PAST a remote row to keep the last local branch (wtlog.js:116-127) — a remote or worktree source is unrepresentable and survives only in row 0's store anchor. The wiki codifies the same narrowing (Worktree:7,12, POST:48). This umbrella carries the ONE row grammar //WT/path?branch#base — wt, sub and remote recorded identically; the children carry the concrete defects.
Track is a branch string at every layer — records, readers and wiki alike; the URI never reaches the wtlog.
//WT/path/to/sub?branch#base; row 0 stays the store anchor.post does NOT detach a branch-tracking wt — track stays, base moves, the wt reads "ahead" (worktree:29-33).//WT is flat — the worktree owning the tree plus the whole path (//ABC-123/lib/abc/dog), never a per-mount worktree name.URI.make(undefined, undefined, undefined, branch, tip) at get.js:185, 233, 242, 482, 494, 504, 520.{branch, detached, rawQuery, sha} — no host slot (wtlog.js:141-156); refOf's local gate refuses a remote row's branch (wtlog.js:52-55).//host?br#sha, store.js:462-478 eachRemote) with nothing tying a worktree to it.One grammar, one reader, one implied target — the whole track/base system, per worktree.
//WT/path?branch#base — a wt, a sub and a remote parse and record identically.get record, authority included; base = the fragment of the recentmost get/post record.get/post resolve their target from that track URI — not from a branch string, not from the trunk (DIS-073, DIS-074).post 'msg' moves the worktree only (DIS-076).Read-compat is forever and the codecs own the parsing; the children land independently.
?br#sha, the legacy ?br&sha &-chain, and the absolute ?/proj/br shape — no on-disk wtlog rewrite, ever.get //OTHER?br#sha, then bare get — track must be //OTHER, not the last local branchlocal branch gate + tip()'s remote walk-back