RULING (gritzko, 2026-07-29): conflict fence markers (<<<</||||/>>>>) are retired — fenced bytes cannot be cleanly diffed or merged again, which breaks multi-patch stacking. On conflict the wt file gets the weave's LIVE BYTES per RGA rules (both sides' insertions in deterministic weave order, no fences). Conflict state lives in wtlog rows + render, never in file bytes. Umbrella; implementation split: PATCH-025, ULOG-004, DIFF-016, STATUS-017, POST-035.
weave.merge output carries fences; shared/conflict.js hasConflictMarker scans them; con liveness = durable con row AND markers-on-disk (classify.js:423-427); resolution is detected by markers vanishing. All of that assumes fenced bytes.patch run folds the fences as content; multi-patch is the driving case.con rows stay).con <path> wtlog rows stay (append-only). Cheap accessor: conflict paths = con rows scanned back to the last get/post barrier.put/delete row LATER than its con row (row order decides), or (2) a forced post! — believed all-resolved, its row is the barrier; else (3) still pending, post refuses. No content-based detection. Amendment lands in POST-035's wt (conflicts() shadows con rows by later put/delete).ok remains wt==base only.be patch keeps returning non-zero on any conflict (PATCHCONFLICT) — unattended patch && post chains must stop.cnf mtime stamp slot, marker-based tests.