Context
Current sync requires multi-step choreography from the client (changes → entries → apply). This forces every client to be "smart."
Goal
Single sync method on the server:
Client → Server: { method: "sync", body: { token: 5, entries: [...local_changes...] } }
Server → Client: { entries: [...remote_changes...], new_token: 12 }
Client sends its token + local changes, server returns remote changes + new token. All conflict resolution happens server-side.
Why
- Dumb clients: curl, Shortcuts, React Native can sync with one call
- ZEN-AGNOSTIC: protocol is simple enough that any language can implement a client
- Prerequisite for peer-to-peer sync (every node runs a server)
Acceptance criteria
Part of milestone: Portable Core
Context
Current sync requires multi-step choreography from the client (changes → entries → apply). This forces every client to be "smart."
Goal
Single
syncmethod on the server:Client sends its token + local changes, server returns remote changes + new token. All conflict resolution happens server-side.
Why
Acceptance criteria
syncmethod on SyncServerPart of milestone: Portable Core