BRAM+NEIL) from graf/ into dog/
dog/WEAVE (DOG-001) must sit in the dog/ layer, below the verb dogs, but the weave diff core it needs — graf/BRAM (banded Myers) and graf/NEIL (edit-list canonicalize/cleanup/shift) — lives in graf/, ABOVE dog/. Move both down to dog/ (or abc/ if fully generic) WITHOUT behaviour change, so dog/WEAVE has no upward dependency. Pure relocation; the rewrite itself is DOG-003.
graf/WEAVE.c includes graf/BRAM.h + graf/NEIL.h; WEAVEDiff/Apply
call BRAMu64s and NEILCanon/Cleanup/Shift.
BRAM/NEIL are generic edit-list machinery over abc/DIFF gauges with
no keeper/graf-state dependency — candidates for dog/ or abc/.
dog/INDEX.md defines dog as "between abc and the verb dogs"; agraf→dog include would invert that layering.
BRAM+NEIL headers/impl live at dog/ (or abc/), behaviourbyte-identical; graf keeps compiling via the new include path.
graf blame/diff/merge output unchanged
(GRAFblameident byte-for-byte).
dependency down; verify includes are abc-only first.
abc/ surface change without review; prefer dog/ when uncertain.dog/ (peer of dog/HUNK); choose abc/ only if includes are
100% abc. Move the matching tests too (graf/test/{BRAM,NEIL}*).
CMakeLists.txt, graf/INDEX.md, dog/INDEX.md in the same land;rewrite include paths repo-wide via spot.
dog/; fix include paths repo-wide (spot).graf blame/diff/merge byte-identical to pre-move.and a unit split, never a layer inversion.