GIT-016 JS: one graph-only relative-history routine for get/head/post/put

The four remote verbs (get/head/post/put) all turn on ONE question — the relative history of local cur vs a remote/branch tip (ahead/behind/diverged) — yet each answers it ad hoc, head is unimplemented, and post's non-FF refusal collapses every divergent/unrelated case into one misleading "use native be put to force" hint. The verdict is a GRAPH question, answerable WITHOUT downloading content packs: the push-side FF decision is a LOCAL parent-walk from cur against the advertised remote tip sha (dag.isAncestor over local objects — ALREADY correct in pushRemote); only the pull side (head/get) needs remote commits. Factor a shared advertise→resolve→verdict routine over dag.aheadBehind/ isAncestor, add head (report-only), route all four through it, make the non-FF path honest with no force hint on post. JS only (be/, via jab). Supersedes the discarded content-fetch spine. Method: work; siblings GIT-013/GIT-014/GIT-015.

Input

Context

Goals

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome