LITE-025 DONE: permalinks — file.c:k4:d8K3, blob offset + blob hashlet

Now
DONE
Sev
MED
Ask
gritzko
Rep
///lite
On1
LITE-024
See
LITE-023
See
DOG-034
See
DIS-082

gritzko's ruling 2026-08-14: a text-file permalink is file.c:k4:d8K3 — segment 1 a ron64 BYTE OFFSET into the named blob, segment 2 the BLOB's ron64 hashlet, ONLY ever a blob hash (commit-id tier overruled same day). Nav: resolve the file name (may hit several files — chooser), find that blob in the path's history, count to byte k4 there, find the same place in the current/required version, open, set the cursor. Blob offset, never a weave/insertion offset: the fold's ranges are tokenizer-dependent, a weave rebuild would re-point every link; blob bytes are canonical git ground. The DOG-034 lexer already fuses both segments (pathanchor, ron64{1,10} twice), so the grammar is DONE — this ticket is the door/resolution/mint half, extending the LITE-024 :line:col landing.

Input

Context

LITE-024 lands file.c:12:24 on the line via the door's splitRef (the ONE split point in openTarget) and the LITE-023 cursor; both anchor segments are lexed into the fused F token since DOG-034. CFOLD (DIS-082, quickjab/dog/CFOLD.h) stores per-commit 'C' records: canonical id (hi64 sha1), body range, P_c view length; CFOLDBlame maps a body offset to its inserting commit; CFOLDIterNext walks any rev's view.

Goals

Door leg + resolution walk + mint gesture; line:col behavior unchanged.

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome

NAV HALF ONLY (mint untouched, out of scope by order). Worker wt work/LITE-025, lite base ///lite/#efa67a47 — which ALREADY CARRIES LITE-024 (3d0ecd67) and LITE-023 (1d0b187b), so nothing had to be ported from the LITE-024 worktree. 5 files jab put, NO commit.

Spec/code notes for gritzko, nothing improvised around:

Suggested commit (lite wt): LITE-025: permalinks follow the blob anchor