This is something I struggled with. The semantics of observed-remove make it not-so-obvious what the user *means* by an add shipped in the same operation as a remove. In the Erlang client, we decided that sending *all* recorded operations was the least surprising solution, with the caveat that removes are applied before adds.