How about having the state 100% on server AND on client? No dragons, no problems.
As far as I can tell, CRDTs are the correct solution for syncing state between parties.
In my experience there’s always a logical way to solve conflicts. And CRDTs can have any kind of conflict resolution algorithm, so it’s customizable per application. “Storing conflict resolutions”, eg. “a merge operation”, is not needed and unnecessarily complicates any CRDT.
One local DB/store for each app. Who is the correct sync?
Or is it first in first out?