diff:<path>?<from>..<to>#L<n>
Clicking a diff hunk's nav link (e.g. diff:ast/BAST.c#L362) gives "be: no results". The hunk's click-target URI is built with an EMPTY query (graf/WEAVE.c ~861/961: HUNKu8sMakeURI(..,name,empty,line) → diff:<path>#L), so clicking runs wt-vs-base (beagle/BE.cli.c:251) — empty for a committed file. diff:'s range form ?from#to spends the fragment on <to>, leaving no room for #L. The weave verb already takes a .. range in the QUERY (graf/GRAF.exe.c:483-493), freeing the fragment. Adopt that for diff:: clickable difflets become diff:<path>?<from>..<to>#L<n>. Method: Issues.
U click target bro renders; today it omits the
version → wt-vs-base → "no results" on a committed file (pre-existing; DIFF-003 eaa75793 made file diffs worth clicking, exposing it).
diff: range = ?from#to (query=from, fragment=to) — no room for #L.
weave file?from..to (GRAF.exe.c:483-493) puts both refs in the query.
be diff:graf/WEAVE.c#L100 → empty; be diff:graf/WEAVE.c?<from>..<to>
(range in query) leaves the fragment free for #L.
diff: accepts ?<from>..<to> (range via .. in the query); the fragment
is the line anchor #L<n> (jump), not the range to.
diff:<path>?<from>..<to>#L<hunk_line>;clicking opens the file-scoped (whole-file, DIFF-003) diff at that line.
diff:<path>#L<n> (no query — correct, file is dirty).diff:?<sha> → GRAFDiffTreeRefs(parent,sha)) per-file nav =
diff:<path>?<parent>..<sha>#L<n>.
weave verb's .. split (GRAF.exe.c:483-493) — do NOT reinvent.?.. parent-branch relative form (URI.mkd:42): the split
must not fire on a relative ../?./x ref.
#L jump (existing fragment handling). abc/ untouched.
diff:<path>?<from>..<to>#L<n> chosen over ?from#to:L<n> (the
#sym:L overload) — it matches the live weave form and keeps the fragment purely a line anchor. Legacy ?from#to may stay as a fallback when the query has no .. (back-compat), but .. is the canonical range.
test/diff/12-difflet-click — assert (a)
diff:<path>?<from>..<to>#L<n> resolves to the file's range diff (whole file, far unchanged line + change present) and (b) a tree/commit diff's per-file hunk URI is the ?from..to#L form, NOT the empty-query form, in Plain/TLV. Confirm red first.
diff: query with .. → split from/to (reuse GRAF.exe.c
483-493), route to the range diff; fragment = line anchor. Guard ?...
u8cs navver (<from>..<to>) GRAFDiffTreeRefs /
GRAFWeaveDiff → GRAFDiff2Layer → WEAVEEmitDiff/WEAVEEmitFull; the FLUSH macros build scheme + name + "?" + navver then HUNKu8sMakeURI(empty path, sym, line) for #L. wt-vs-base callers pass empty navver.
URI.mkd (diff:?a..b + #L) and the GRAF diff
usage string. Keep weave behaviour unchanged.
GRAFDiff2Layer (DIFFREF.c:136 / GRAF.h:335),
GRAFDiffTreeRefs (GRAF.h:326), GRAFWeaveDiff (BLAME.c / GRAF.h:301), GRAFDiffWtFile/WtTree (GRAF.h:324-325), WEAVEEmitDiff/Full (WEAVE.h:180/190) — wide but mechanical.
7317bb48: shared graf_query_range() factors the weave ..
split (guards relative ?../?./x); diff: takes ?<from>..<to> as the canonical range, fragment kept free for #L<n> (legacy ?from#to = no-.. fallback). navver (from..to) threaded GRAFDiffTreeRefs/GRAFWeaveDiff → GRAFDiff2Layer → WEAVEEmitDiff/Full so hunks emit diff:<path>?<from>..<to>#L; wt-vs-base + cat: pass empty → bare #L. Test 12-difflet-click; 374/374.