Merge cloud edits by field on the server

A patch can now name the fields it changed (merge.fields). The server
writes only those onto the row as it is now, without a revision check, so
two teammates changing different things of one item both land and the
last write to a field wins. Lineup groups merge by item and are checked
as a whole afterwards (merge_invalid). Work that waited offline sends the
base value of each field, and a field a teammate changed meanwhile refuses
the op (field_conflict). A delete with lastWriterWins skips the revision
check. Patches that cannot merge by field (a different payload version, or
a change of what the element is) are applied as whole, revision-checked
writes, and clients that send no merge keep today's behaviour exactly.

docs/collaborative-editing.md describes the model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
692cedf9afDara Adedeji committed on 10/10/2026, 5:23:43 AMparent656ac5e
8 files changedLine totals unavailable