word URI shape — get the verb/view OUT of the scheme slot
Hunk-carried URIs jam the VERB/VIEW word into the URI SCHEME slot — diff://name/path, status://name, commit://name?sha, log://name?ref, cat://name/path#L<n>. Per "views are verbs, not schemes" (Nav, DIS-060) the verb belongs in the HEAD/word slot; the scheme addresses TRANSPORT only (ssh:/https:/be:/file:). The overload "worked" only because these URIs never carry a real transport scheme (the trick), but it is structurally wrong and blocks composition like diff https://host/x?a..b (a lens over a remote). Convert EVERY hunk-carried URI — embedded U-tag click-target LINKS, the hunk BANNER/record URI, AND the re-typeable STATUS-BAR address — to the word URI (verb-space-URI) form, the SAME module(args) shape ulogs, hunks, the CLI, and the address bar already use. HARD CUTOVER, JS-only (beagle-ext); the C weave/graf bakers are a linked follow-up. Completes the URI-012 (resolution) + URI-013 (composition) arc with SHAPE. Method Issues.
navUri("diff", path) → diff://name/path, status://name, commit://name?sha, log://name?ref, cat://name/path#L<n>, tree://name/segs?rev. The pager (_uriAt/_resolveSpell) then parses them as SCHEMED URIs.ssh:/https:/be:/file:), so overloading scheme with the verb didn't collide — but it forbids diff https://host/x?a..b (verb diff over a REMOTE), the very composition Nav frees by emptying the scheme slot.{ts, verb, uri}, hunk records {uri, verb, ts} — so the word is DUPLICATED (record verb field AND the uri's scheme). word URI single-sources it.U-tag carries a verb args spell" and "Views are verbs, not schemes." This ticket makes the IMPLEMENTATION match the spec.word URI (verb SPACE uri): U-tag click LINKS, the hunk BANNER/record URI, and the pager STATUS-BAR re-typeable address.word is the verb/view (diff/cat/commit/log/tree/status/grep/spot/ls/…); the URI part carries ONLY addressing (//authority/path?ref#frag) and a REAL scheme ONLY for a transport (diff https://host/x).module(args) SPELL (verb head + URI arg) via the SHARED spell machinery — never a <scheme>: parse.diff https://host/x?a..b composes and clicks through.views/bro/pager.js) that parses them. The C weave/graf bakers (beagle) that emit some diff:/cat: targets are OUT OF SCOPE → a linked follow-up; note the JS/C boundary (URI-012 navAuthorize was the C-baked-target compat shim).word(context_uri, …rest) composer/parser (shared/spell.js) — the SAME one the CLI + address bar use (Nav, ONE resolver). Do NOT fork a hunk-only link parser.URI.make/navUri, authority-scoped; the word is prepended as <verb> , NEVER folded into a scheme.diff //name/path (not diff://name/path) AND clicking it dispatches verb diff with arg //name/path.verb field is the SINGLE source of the word; the uri field drops the verb-scheme and carries scheme-less addressing (real scheme only for a transport). The U-tag click-target BYTES become the <verb> <uri> spell string (a space in the hidden bytes — Nav click-targets are spells, already a verb args string).<verb> <scheme-less //name/path?ref#frag> — the URI part through URI.make/navUri (authority-scoped, URI-013); navUri's <verb>:-scheme form is RETIRED for links (its query/frag params stay for the addressing part)._uriAt/_followRow/_runSpell treat the target as a spell and drive via driveSpell/spellCall (already handle verb args); the <scheme>:-for-verb branch in _resolveSpell is dropped for links (hard cutover) and falls to the bareword-verb + relative-URI path (URI-012).<verb> <uri> (diff //name/path#L<n>) — exactly what the user would type back.navLink(verb, path, query, fragment) (shared/nav.js) → `<verb> <scheme-
less authority-scoped uri>: addressing via URI.make (authority INJECTED, rooted path), the verb prepended with a SPACE. No authority ⇒ <verb> path?q#f; empty addressing ⇒ the bare <verb>. Sibling to navUri`.
navUri("<verb>",…) → navLink("<verb>",…) for BOTH
its U-tag click-targets AND its banner/record uri; navUri (scheme form) survives ONLY for a real transport, retired for links.
uri field carries the WHOLE <verb> <uri> spell string
(the word single-sourced as the LEADING token); the record verb slot stays "" — hunksFromLog can't decode the RON60 verb slot to text, and the C plain/color banner reads [<verb> ]<uri>, so an empty slot + a word-carrying uri render identically on BOTH the pager AND the plain/color edge.
raw()
(status:…) switches to the explicit out.open(navLink(...)) (hunkrows has open; status.js's local sinkOut gains a one-line open).
_resolveSpell/_runSpell recognise a <verb> <rest> target
(leading bareword + SPACE) as a COMPLETE absolute spell → driveSpell (spellCall→argline already splits verb arg), NO URI-relative mangling; _verbUri/_viewPath SPLIT the spell on the first space (drop scheme-decode).
<scheme>:-URI branch in _resolveSpell STAYS as a compat
shim for C-baked diff:/cat: residue (out of scope) till the C follow-up; diff/cat U-targets are FINALISED in JS (diffOut.feed / cat) so the JS SUT converts them — native be output stays scheme-form till the C fix.
jab status --plain's banner diverges from native be --plain (status: → status //name) until the C follow-up — INTENDED (not byte-parity); the plain-parity + links tests amend to the word shape (user-approved, Issues).
word URI shape and click-dispatches verb+uri (status/links, log/subnav, diff/links, uri011).navLink(verb,path,query,frag) (shared/nav.js) → <verb> <scheme-less authority-scoped URI>; navRelink for the C-bridge; navUri("<verb>",…) retired for LINKS.<verb> <uri> word spell (the word rides as the leading token; record verb slot left "" — hunksFromLog can't decode the RON60 slot).<verb> <uri> (_verbUri/_splitSpell).module(args) spells (SHARED spell machinery); a <verb>: scheme parse KEPT as the C-bridge only.<verb>: scheme link (all 13 views on navLink/navRelink; grep clean).diff:/cat: bakers + the C HUNK hunk_uri_is_diff render gate — so jab diff --plain/--color + native be emit the word shape (JS keeps diff plain/color scheme-form until then).diff:/cat: scheme-form targets (out of scope) — the JS diff --plain/--color record uri STAYS scheme-form because the C HUNK hunk_uri_is_diff render gate keys off the diff: scheme (only --tlv/pager cuts over); filed as the C follow-up TODO above.test/spot/submount FAILS — a PRE-EXISTING spot sub-recursion gap (the chsub/s.c sub-hit is dropped; verified identical on the unconverted tree), ORTHOGONAL to URI-014; candidate for its own SPOT ticket.$SRC_ROOT/URI-014 (store-backed, beagle-ext). 16 source files (shared/nav.js navLink/navRelink, views/bro/pager.js _splitSpell/_verbUri/_resolveSpell/_runSpell/_viewPath, core/emit.js open, + all 13 projectors) + 17 test files; 93 tests green, 1 pre-existing fail (spot/submount). Links, banners, and the status-bar address are word URI spells — the verb out of the scheme slot, the scheme freed for real transports. Third axis of the link-correctness arc after URI-012 (resolution) and URI-013 (composition): SHAPE. NOT yet staged/committed — awaiting the user's explicit merge order.