All, I have been trying to dig in to the CC and OT concept in wave, so I can start to work on that section of the code. It seems like we have been focusing on the UI and I want to make sure we have coverage in the CC stack. I have read all of the OT literature, so I am fairly well versed in OT in general, but some of the specifics of the WaiB implementation are a little fuzzy.
Right now I am working on understanding composition and how we infer the servers path. I have a few questions. 1) In order to compose operations I assume they don't have to have the same document width (how could they for successive inserts for example), but I assume they would need to span the same line? Is that right? In other words you wouldn't compose operations from one paragraph with operations from another? Is the desire to compose one of the driving reasons for the retain operation? 2) When we send out "first" operation over to the server and we are in a holding pattern buffering client operations, are these operations always composed together and then sent over as a single operation when we get the ACK from the server. It seems like we can only send one operation to the server at a time, however the on line material implies that when we get and ACK we send over ALL buffered operations. This seems to be contradictory. If we have buffered 4 operations, it seems like we can send all of them as four individual operations. 3) Is there a run down of how the CurrencyControl class does point #2 anywhere. I see the unacknowledged, the inferredServerPath, and the clientOperationsQueue objects and get a lose impression of how these are managed but any help with regard to incoming server operations while we have an operation in flight would be appreciated. Specifically what transformations are performed on which object structures when we get a new operation form there server, and where / when is composition happening. 4) How exactly are the hashed versions designed? There seems to be a monotonic scalar version number and a hash? I want to make sure I understand how both are generated and how both are used. If any of this is well documented, please let me know where I could find it. If it is not, I would volunteer to document this as I work through it. Thanks in advance. Michael