LITE-011 DONE: FSEG records — resolve a partial path against a commit

Now
DONE
Sev
MED
Ask
gritzko
Rep
///lite
On1
LITE-006
See
LITE-010

Ruling (gritzko 2026-08-13): a user names a file as a PARTIAL path (abc/TCP.c), and the index must turn that into the full repo-relative path it stands for. The LITE-006 lane is hash-only and hands back no text, so the index cannot answer alone: it narrows, a real tree object answers. A new record keyed by the filename hash carries the ancestor segment hashes, which prune a descent of the commit's tree down to (almost always) one line; the tree entries carry the real names, so the recovered path is TEXT, and path_hl falls out of hashing it. Resolution is always RELATIVE TO A COMMIT, most often HEAD.

Input

Context

lite log <path> / lite diff <path> take a path today only because the caller spells it in full: INDEXES.mkd states the gap outright — "NO name or suffix lookup: dog/git/ZINF.h, git/ZINF.h and ZINF.h hash to three unrelated keys". path_hl is a one-way 40-bit hash of the WHOLE path, so a partial spelling hashes to nothing the lane holds.

Goals

resolve(commit, "abc/TCP.c") returns the full repo-relative path(s) that partial names in that commit, or none, in plain words.

Constraints

Work in lite/ only; be/ and jab/ are READ-ONLY precedent, never imported; never read beagle/. Zero quickjab edits are the expectation (LITE-006 managed it) — a missing binding is a REPORT, not an improvisation.

WIP

Design decisions

Ruled in chat 2026-08-13, before any code:

TODOs

Blockers and bummers

Outcome