Yes, some of these things I also already stumbled over, especially how to compose CRDTs without introducing undesired anamolies. I think implementing them in Datalog first and then optimizing the semantics is still a good idea, because fixing it for text editing of a general purpose JSON CRDT is not capturing the full problem, but rather fixing specific instances.