list: view — fs ⊕ tree ⊕ per-entry last commitlist:<path> VIEW (be/views/list/list.js) renders a dir github-style: per entry
<wt-marker> <name> <pale-grey last-commit summary> <short rel-age>, files AND
dirs. It FUSES the wt listing (ls classifyDir — name + change bucket) with each
entry's LAST COMMIT (message + age) from a BOUNDED backward history walk, so a user
sees uncommitted state AND commit context in ONE view. list owns the expensive
per-entry-commit fuse; ls/tree stay untouched and cheap. jab+libdog bindings +
JS ONLY, NO dog binary. Method: Issues.
ls: (views/ls/ls.js) is the O(dir) wt lister: a file row is <7date> <verb>
<name>, verb = wt bucket, date = the file MTIME (classify.js:53, io.lstat
ron60), NOT a commit time; dirs get a BLANK date. libabc+libdog only, no log.tree: (views/tree/tree.js) is the raw committed tree <mode6> <type6>
<sha40>\t<name> — no message, no age, byte-parity with native. Too technical
for a friendly listing (gritzko ruling 2026-07-05: add a NEW word, not overload).store.js readTree / commitTree /
commitParents / parseCommit / descendPath (store.js:468-531), + shared/
changedpaths.js (changedTrees/changedCommits) — the per-commit changed-path diff.views/log/log.js already extracts a commit SUMMARY (first msg line) + author
and paints a grey tail (log.js:362-402, TAG_D/TAG_Q) — the message-render model.render.dateCol(ts) (render.js:16,
ron.date) is the short ABSOLUTE date ls uses. Ruling: a JS relAge reimpl is fine.list:<path> view (be/views/list/list.js): one row per entry (files AND
dirs), <wt-marker> <name> left, a PALE-GREY last-commit summary on the far
side, a short rel-age at the right; name carries the U click-target.3h/2d/1y) via a JS relAge(ts, now) sibling of dateCol;
optionally the message run opens commit ?<sha> on click.list:<path>?<rev> lists AS OF a rev (walk from <rev>); bare/no query = cur tip
with the wt overlay (so uncommitted edits show), reusing the diff/tree ref-parse.views/list/) so :list <path>
dispatches as a view, not degrading to ls (cf DIS-060).status view (theme.VERB_SLOT) in BOTH the piped --color AND the pager paths.ls:/tree: UNCHANGED and cheap — list is additive, its own word, its
O(history) cost isolated in its own view.classifyDir, tree readTree/descendPath, changedpaths
changedTrees, log's summary/author extract, the theme grey slot, the pager U-tag.log.js:186 LOG_MAX_WALK). Unattributed-within-ceiling entries render blank.<marker> <name> left, pale summary mid/right, rel-age far right; column
widths settled in the repro; the wt-marker reuses ls's verb-slot colour.view/render.js (sibling of dateCol) so log/commit can reuse it;
coordinate the home with COMMIT-007 (also wants human dates).relAge(ts, now) in view/render.js — short Nm/Nh/Nd/Ny; test boundaries.shared/ helper): first-touch attribution over the scope
entries via changedpaths, ceiling cap; returns entry → {summary, ts, sha}.be/views/list/list.js: fuse classifyDir (marker) ⊕ readTree (entries) ⊕ the
walk (commit info); ONE hunk, name = U click, message+age in the grey slot.:list <path> dispatches (not ls).list:<path>?<rev>: walk from <rev> (reuse tree/diff ref-parse); bare → tip⊕wt.--follow) is OUT of scope: the walk sees a path appear /
disappear only; note it, do not build it here.a43250f6 (be trunk, 2026-07-05): "LIST-001: the list view (annotated dirs)" — be/views/list/list.js, the bounded walk shared/lastcommit.js, render.relAge, help SCHEMES row, ?<rev> scope; tests be/test/list/ (e2e + fuse.js).1b7c9934).