I read a paper on this (<a href="https:&#x2F;&#x2F;hal.inria.fr&#x2F;file&#x2F;index&#x2F;docid&#x2F;71240&#x2F;filename&#x2F;RR-5580.pdf" rel="nofollow">https:&#x2F;&#x2F;hal.inria.fr&#x2F;file&#x2F;index&#x2F;docid&#x2F;71240&#x2F;filename&#x2F;RR-5580...</a>) and implemented it some time ago just for fun (<a href="https:&#x2F;&#x2F;github.com&#x2F;dwetterau&#x2F;group-edit" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;dwetterau&#x2F;group-edit</a>). You can play with it on Firebase still here <a href="https:&#x2F;&#x2F;grouped.firebaseapp.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;grouped.firebaseapp.com&#x2F;</a><p>The biggest problem that I ran into with this approach however was checkpointing. I could never correctly reason about a way to prune the log of updates that you apply that still allows (100% correct, intent-preserving) merges from someone that might have been offline since the dawn of time. Does anyone know if this issue with this approach was ever solved?