LITE-017 DONE: port the list / cat / tree / blob read views to lite

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

lite has pager, index, log, commit, diff, merge/install and chat — but none of be's four basic READ views: list (github-style dir browser: entry + last-commit summary + age), cat (a file's own bytes, syntax-painted, no diff), tree (raw git-tree rows for a rev), blob (a blob by sha, emitted as a hunk like cat). All four exist in be as compact views (be/views/{list,cat,tree,blob}/*.js, 174–264 lines each) with mission comments naming their rulings; the port is the LITE-010 pattern — same view logic, lite's ODB access (git.tree/git.getHex, index/resolve.js, index/refs.js) instead of be's store/wtlog/resolve_hash stack, and lite's hunk/pager/plain output instead of core/emit.

Input

Context

be sources and their rulings, binding here: views/list/list.js (LIST-001: one row per entry, wt marker + name + pale last-commit summary + rel-age; a dir = newest commit under it), views/cat/cat.js (JAB-020 ruling: cat shows the file's OWN bytes, diff belongs to diff), views/tree/tree.js (JAB-008: <mode6> <type6> <sha40>\t<name>[/] rows in raw git-tree order, .. row when below root, fixed-format bytes), views/blob/blob.js (JAB-007 ruling: blob emits a HUNK like cat, banner blob <sha>, NOT a raw dump).

Goals

Four new lite verbs, each paging as a coloured hunk at a tty and dumping plain bytes when piped or under --plain, ODB-only where possible (usable in a repo whose .git/be was never built; list's last-commit fuse may use the LITE-006 index the way lite log does).

Constraints

WIP

Design decisions

Made, not proposed — each confirmed against the code before it was built on.

Model differences from be, deliberate

TODOs

Blockers and bummers

None. Two things bit and were fixed in place: opts.from governed which repo was opened but not which dir a path arg resolved against (headless callers landed outside the repo), and the single U span per row made Enter say "nothing to follow" on a live pty though every headless span check passed — the second is exactly why the pty leg exists.

Outcome

Landed in the worktree, jab put only. Five new index/ modules (read/list/cat/tree/blob, 640 lines), four thin main.js wrappers plus four entries in the pager's VERBS door, three THEME slots in view/bro.js, and four new test dirs (test/{tree,cat,blob,list}, 173 checks) including a pty leg that navigates list → cat, list → list and tree → blob on a real tty. Whole lite suite green: 11 dirs, 640 checks, runtime built from this tree (cmake -DJAB_JSRC=<wt> -DQUICKJAB_JSRC_PACK=ON).

Suggested commit message:

LITE-017: list/cat/tree/blob read views