GRAF-001: shared/graf.js cached ahead/behind counts per shard, wh128 pair records

Now
OPEN

Input

Context

Every ahead/behind ask (WORK-001 renders a count per wt; status/relate/subs walk too) re-runs a full dag.js ancestor BFS per pair no result is ever kept, though a (cur,tip) pair's counts are IMMUTABLE (commit ancestry never changes; the cache only grows, never invalidates).

Goals

shared/graf.js: a per-(store,project)-shard ahead/behind pair cache lazy, index-first, self-extending.

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome