?The POST-026/027 track/base system (landed 59ba63c2, 2026-07-16) encodes both roles in the LAST get record of a wt's .be: the FRAGMENT is the base commit hash, everything else (scheme/host/path/query) is the TRACK — the followed branch/remote/worktree; the first row is the store anchor. So //TEST2/test#ec64900f… = tracking the parent wt's test gitlink, based at ec64900f. shared/wtlog.js:144 attachedBranch() — the ONE attach reader (DIS-057) feeding status's ?<branch> label, post's detach guard, and the ahead/behind divergence — predates the split: it only looks for a branch NAME in the query, so a track expressed as a remote/worktree URI reads as no-branch → trunk. Live in work/TEST2 2026-07-16: jab status prints ?\t93 ok / status test → ?\t360 ok — the sub tracks its pin as set in the parent repo, but status labels it trunk. Reported by gritzko (who also stated the record semantics above).
The attach record now carries track (non-fragment) + base (fragment); the reader only understands named-branch queries.
work/TEST2/test/.be: 26716FVjFD get file:/home/gritzko/.be/?/beagle-ext-tests (store anchor), 26716FVjFE get //TEST2/test#ec64900f61417a263b7efd6b5dc847b4d288c595 (track = //TEST2/test, base = ec64900f…)..be: anchor file:/home/gritzko/.be/?/beagle-ext, last get ?#59ba63c2… (track = trunk, base = 59ba63c2…).jab status | cat → ?\t93 ok and status test → ?\t360 ok: empty branch token = trunk; the sub's actual track (the parent gitlink) is never shown.wtlog.js attachedBranch() derives attachment ONLY from a branch name in the record's query (refOf/parseBranch); a track that is a remote/worktree URI (//TEST2/test, an ssh: or file: source) has no query branch → branch="" → trunk. The base-in-fragment shape also grazes the DIS-075 detach test (query===undefined && isFullSha(fragment) gated on r.local) — a wrong-positive ATTACHED-to-trunk, not even detached.views/status/status.js:296-300 (label), status.js:475 + JS-032 divergence (ahead/behind vs the WRONG ref), post's detach guard + curBranch — all route through attachedBranch() by design (DIS-057: "so they cannot disagree"); now they agree on the wrong answer.status.js:288 (SUBS-050) documents the label contract: named branch, or a mounted sub's /<title>/…/<branch>, or trunk ? — a URI-shaped track (parent pin, remote wt) has no rendering at all.Spec ruled by gritzko 2026-07-16 (chat, transcribed): status's job is simpler now.
get record in the wtlog; in get/post/patch records the #fragment is a commit hash and EVERYTHING ELSE is a ref to one of the above.resolve_hash() (core/resolve_hash.js — RULE ZERO, meta resolve-hash law).<track>#<base-sha> with a URI-shaped track (TEST2 shape); assert the shown track URI + base fragment and the divergence ref; cover trunk-track and sub-tracks-parent-pin.wtlog.js attachedBranch() or its successor), not each caller.#sha last-get record (fragment, no ref) — gritzko 2026-07-16; the DIS-075 legacy special-cases in the reader reduce to this.The fix stays inside the one reader; no second attach parser.
attachedBranch() — extend it, do not fork per-caller logic..be wts must keep reading exactly as before (DIS-075 detach forms included).<track>#<base-sha>, URI-shaped track → status prints trunk ?; assert shown track URI + base fragment + divergence refresolve_hash() ONLY; ahead/behind vs that tip.be regression: attach/detach forms of DIS-075 unchangedwork/TEST2; nothing landed yet.