Is the take-home message of the post that the full complexity of CRDTs/OT is necessary only in the absence of a central server?
As others in the comments argue, this is technically a CRDT (though a fully general one); also, undoing/replaying ops is itself non-trivial to implement. However, I hope this is still simpler than using a traditional CRDT/OT for each data type.