DIS-038: a fetched-but-not-DAG-indexed peer tip makes DAGAncestors bottom out at the tip, so be head reports a bogus huge ahead-count and be patch ?br! absorbs nothing

be head be://localhost?/beagle from a full be:// clone reports 1317 ahead, 1 behind when the true divergence is 1 ahead, 3 behind, and be patch --nosub be://localhost?/beagle! absorbs nothing (noop=11 … nothing absorbed). Root cause: the peer tip and its parent chain ARE fetched into keeper (commit objects intact, parent headers correct, NOT re-rooted), but their (COMMIT,COMMIT) parent edges are NOT ingested into graf's .graf.idx DAG during the be head/be patch fetch. DAGAncestors (Graf) walks ONLY the DAG index with no keeper-commit-body fallback, so DAGAncestors(peer_tip) returns just {peer_tip} — the shared base is missing from the target set, ahead = anc_cur \ anc_target = nearly all of cur, and get_lca(cur,theirs) collapses to 0 (no common ancestor), making the whole-branch replay see nothing new. graf log already fixed this exact class for its own walk (DAG-miss → parse commit body); the ancestor/LCA walk never got that fallback. Diagnosed live on /home/gritzko/todo/DIS-035 (cur 54d2eb5b over base 479fcc96, peer trunk 8d313c50). See HEAD, PATCH, Graf, CLAUDE.

Blocks (confirmed 2026-06-11): this single defect is the root of GET-014 (be head/be patch clobber local trunk ?→divergent-C — confirmed to be pure tip-resolution: zero rows written during the verb, the fetched C object in the pool makes the next .refs.idx regen pick C as the tip) AND POST-015's silent-drop half (absorbed commit collapses to the existing tip). Fixing DAGAncestorsTunable (graf/DAG.c:219) to port graf log's DAG-miss keeper-commit-body fallback (graf/LOG.c:329) closes all three at once.

Issues

The DAG-index-only reachability walk silently under-reports when a fetched tip is not yet graf-indexed.

Blockers

Two independent layers, either fix alone removes the symptom; both are worth doing.

Planned

Make reachability self-sufficient on freshly-fetched history, and close the index gap.

Evidence (live, DIS-035 clone, read-only)

Real DAG (commit objects in keeper, parent headers — NOT re-rooted): 54d2eb5b(cur DIS-035)→479fcc96(base); 8d313c50(peer)→ba77678829df3828479fcc96. True LCA = 479fcc96.