BLAME-002: materialise tree entries in the DAG index for inflate-free descent

blame's path descent must inflate keeper objects because the DAG index records only (COMMIT,commit_h)→(TREE,tree_h) root-tree edges and (COMMIT,commit_h)→(COMMIT,parent_h) parent edges (graf/DAG.c:847-863); the DOG_OBJ_TREE/DOG_OBJ_BLOB cases are explicit no-ops (graf/DAG.c:869-876, graf/INDEX.c:16-18). The graf/DAG.h header's "materialising every tree entry" claim is stale. Adding (tree,name)→child records lets graf descend a path via in-memory binary searches with zero keeper inflate, collapsing blame's descent to O(nord·depth) lookups + a blob fetch only on change. This is the structural complement to the keeper-side win in BLAME-001. See Plan.

Issues

The index cannot descend a path; every blame commit re-inflates trees from keeper.

Blockers

None hard. Reindex is required to populate the records; old stores stay correct (descent falls back to keeper on index miss).

Planned

Encode (tree,name)→child as ordinary wh128 records, emit them once per distinct tree at ingest, descend index-first with keeper fallback.

Landed

None yet.