dog/fuzz/NEIL.c — a six-property harness over NEILCleanup/NEILShift/
NEILCanon (reconstruction, token balance, hygiene, substantive-EQ
preservation, splice canon, shift idempotence) — is orphaned: when NEIL moved
to dog/ (DOG-002) graf/fuzz dropped its NEILfuzz target, the copied source
never entered dog/fuzz/CMakeLists.txt, and it still includes graf/JOIN.h
(JOINfile/JOINTokenize/JOINFree) which does not exist in libdog. It
silently doesn't build anywhere. Method: Issues.
beagle/graf/fuzz/CMakeLists.txt:17 records the relocation; the beagle
tree has the same unbuilt copy under dog/fuzz/NEIL.c.{toks,hashes};
dog/tok/TOK.h (TOKLexer) + the DIFF u64 hashing cover that locally.NEILfuzz builds in dog/fuzz/ (libdog standalone, no graf/) and runs;
all six property checks preserved verbatim.graf/JOIN.h dependency with a local fuzz-file helper (or a
dog-level equivalent if one already exists — check INDEX.md first).NEIL.c/BRAM.c algorithm edits: a property violation found is its
own ticket, linked here (per todo.mkd). DOG-016 tracks a known
NEILShift bound issue — cross-link, don't fix here.NEILfuzz; confirm it links against dog + abc-core.~/src/DOG-020, UNLANDED.
The only NEIL.c change is the JOIN-block swap: local JOINfile +
JOINTokenize (TOKLexer + tok32Pack + RAPHash into heap u32b/
u64b) — all six property checks byte-identical to the original
(orchestrator diffed against the orphan copy to confirm).NEILCleanup is invoked directly (fuzz harness AND
WEAVE.c:448), never via call(), so its 5 a_carve scratches leak
into the caller's frame; the FUZZ macro never rewinds BASS between
iterations, the 1 GB arena fills (a_carve returns
BNOROOM mid-pipeline and the early-return leaves a malformed EDL
(zero-len EQ). Fresh-process replay = empty arena = clean, hence the
heisenbug. Fix in NEIL.c (+11 lines): NEILCleanup snapshots the BASS
data slice at entry and rewinds on both returns — the exact call()
idiom from PRO.h. Orchestrator-verified: campaigns clean, RSS flat
CMakeLists.txt now defines the
WITH_ASAN/WITH_FUZZ flag blocks inside the standalone guard (verbatim
beagle root), so plain -DWITH_FUZZ=ON -DWITH_ASAN=ON links all five
fuzz targets standalone — the cache-var workaround is obsolete.
Beagle-child mode untouched by construction (guard is false there).a_carve's own failure path bypasses the new
restore (benign once the arena stops filling).