be patch step 2 of test/patch/15-ancestor-skip merges lib.c to the WRONG content
on dog/WEAVE — the DIS-003 "insert-vs-blank" case: a re-stamped spine blank line and
theirs's code-line EOL share their bytes (\n), so the content-hashlet diff/merge
anchors the inserted line on the wrong side of the blank. It was a ~½ FLAKE on the old
graf engine (DIS-003); under the DOG-005 cut-over it is a HARD 5/5 failure, so dog is
not byte-parity with graf for this case. Distinct from DIS-043 (criss-cross) and
DIS-044 (causal order) — this is an identical-CONTENT token ambiguity, not an ordering
one. It is the last case blocking DOG-005's merge cut-over (diff/blame/cat/get are
already byte-parity-clean).
Identical-content tokens (blank vs EOL) are not disambiguated at a merge boundary.
test/patch/15-ancestor-skip step 2 (08.lib.want_step2.c) — merged lib.c
differs (deterministic, 5/5). Inputs are in that dir (base/ours/theirs .c).\n and a code-line's trailing
\n hash equal, so WEAVENext's BRAM/NEIL LCS (or the WEAVEMerge join) pairs the
wrong one and the insert lands on the wrong side of the blank.be-patch-15 is still GRAF-backed (DOG-005 unlanded), so reproduce via
the dog API directly (feed the step-2 base/ours/theirs through
WEAVENext/WEAVEMerge/WEAVEProduce), not the graf-backed test.Disambiguate identical-content tokens; make the fuzzer inject them.
dog/fuzz/WEAVE to inject blank lines / repeated identical-content tokens at
merge boundaries so this class is caught; fold the step-2 case in as a property test
(confirmed red pre-fix).be-patch-15 5/5 fail is graf cut-over GLUE, not
the engine — re-tasked into DOG-005.dog/test/WEAVE03
(patch/15 step-2 shared-base oracle, 08.lib.want_step2.c byte-exact),
WEAVE01 dis045_insert_blank/dis045_double_blank criss-cross-over-blank
cases, and dog/fuzz/WEAVE W2_BLANK injection. 322/322 green; DIS-043/044
not regressed; ~4.7M fuzz execs with blank injection found no mis-anchor.711618fe ("DIS-045 WEAVE: blank/EOL merge teeth + step-2
oracle"); the be-patch-15 repro lives on in DOG-005.