diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-12-31 15:46:41 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-12-31 15:46:41 +0900 |
| commit | 3810450c20326998aef17c0acfcd5893e7b3ca20 (patch) | |
| tree | adf5434c2afe3b24ddada7066c697070be0d5950 /src/client/sync/push.test.ts | |
| parent | f3952a509b2d98a25cbb80c9ad091b3b471be52e (diff) | |
| download | kioku-3810450c20326998aef17c0acfcd5893e7b3ca20.tar.gz kioku-3810450c20326998aef17c0acfcd5893e7b3ca20.tar.zst kioku-3810450c20326998aef17c0acfcd5893e7b3ca20.zip | |
feat(crdt): replace LWW conflict resolution with Automerge merge
The ConflictResolver now defaults to CRDT strategy which uses Automerge
to merge local and server documents during sync conflicts. This provides
conflict-free resolution that preserves changes from both sides.
Key changes:
- Add CRDT merge methods for all entity types (deck, card, note, etc.)
- Update resolve methods to accept optional CRDT binary data
- Fall back to server_wins when CRDT data is unavailable or invalid
- Add comprehensive tests for CRDT conflict resolution scenarios
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/client/sync/push.test.ts')
| -rw-r--r-- | src/client/sync/push.test.ts | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/client/sync/push.test.ts b/src/client/sync/push.test.ts index bce4652..19b39da 100644 --- a/src/client/sync/push.test.ts +++ b/src/client/sync/push.test.ts @@ -1140,7 +1140,10 @@ describe("generateCrdtChanges", () => { expect(crdtChanges[0]?.documentId).toBe("deck:deck-1"); expect(crdtChanges[0]?.binary).toBeDefined(); // Verify it's valid base64 - expect(() => base64ToBinary(crdtChanges[0]!.binary)).not.toThrow(); + const binary = crdtChanges[0]?.binary; + if (binary) { + expect(() => base64ToBinary(binary)).not.toThrow(); + } }); it("should generate CRDT changes for cards", () => { |
