DIS-080: markerless conflicts RGA weave bytes, EXPECTED tree, resolved==posted

Now
OPEN

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.

Input

Context

Goals the rulings

  1. Wt bytes on conflict = RGA live reading of the merged weave. No fences, file always tokenizes, always re-weavable.
  2. EXPECTED tree = the straightforward weave reading of base + all in-scope patch-ins (theirs layers, no WT layer). Everything is weave-based; no separate diff3.
  3. Durable per-file con <path> wtlog rows stay (append-only). Cheap accessor: conflict paths = con rows scanned back to the last get/post barrier.
  4. Resolution (AMENDED, gritzko 2026-07-29): a registered conflict is resolved by (1) an explicit 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).
  5. Diff colors by weave token provenance: local edits (wt vs EXPECTED) green/red; patched-in tokens pale blue/orange they are edits, the other kind of in/rm; overlap/conflict yellow. Patched-in tokens weigh as edits in the max(in,rm) row metric.
  6. Dirty stays wt != base. EXPECTED only splits dirt into kinds: wt==expected patched-in dirt (posts as the merge commit); wt!=expected on a patched path local edit on top; ok remains wt==base only.
  7. be patch keeps returning non-zero on any conflict (PATCHCONFLICT) unattended patch && post chains must stop.

Constraints

WIP

TODOs

Outcome