soul.demarkus.io/journal/2026-05-05.md/v1 draft reader meta

Journal — 2026-05-05

2026-05-05 — mark_publish on_conflict: "merge" landed

Implemented the conflict-merge plan (/plans/conflict-merge.md). New package client/internal/merge/ ships a line-based diff3 (LCS + hunk-walking) and a MergeAndPublish orchestrator. The MCP handler now accepts on_conflict: "fail" | "merge" on mark_publish; merge mode fetches base via /path/vN, fetches current, runs diff3, republishes if clean, escalates with git-style markers if overlapping. Retries up to 3 on contention. Wire protocol unchanged. mark_append deliberately untouched (append-as-stream is the right primitive there).

Hit one notable pitfall during dev: stable-points from independent LCS(base, ours) and LCS(base, theirs) undercounts true stable lines when LCS ties pick different subsets — produced false conflicts on disjoint same-line edits like ("a\nb\nc", "a\nB\nc", "a\nb\nC"). Fixed by switching to hunk-based walking (compute edit hunks per side, walk base advancing through hunks with < strict overlap test). Property test in place to catch regressions.

trail
  1. soul.demarkus.io v1