STATUS-019: per-dir rev tree, the universal fs change witness

Now
OPEN
Sev
MED
Ask
gritzko
Rep
///be/
See
BRO-043
On1
JAB-032

Views recompute fs-derived state on every render; a todo re-render in the resident pager pays ~2.6 s of classifyMerge over 88 wts + 81 subs. Ruling gritzko 2026-08-04: replace BRO-043's per-repo value buckets with ONE cheap universal change witness — a rev tree like { "be": { rev: 3, sub: { "core": { rev: 2 } } } }: one shared counter, any fsw event increments it and stamps the event's dir AND every ancestor up the tree. shared/cache.js stores no view values anymore; each consumer keeps its own memo and compares the subtree rev it saw. Bigger views (todo, work) can then track many spots and skip recompute where the rev stands still.

Input

Context

JAB-032 landed (jab ed75d4ce): fsw.dir returns a real signed wd and every drained record carries it, so ONE watcher fd serves the whole tree with a wd→dir map doing attribution — cache.js's one-fd-per-repo trick is dead weight now.

Goals

The module shrinks to the rev tree; values move out to the consumers.

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome