Although it seemed sensible to create blip objects to represent referenced, but undefined, blips, I'm a lot less sure that it is a good idea any more. One big reason I implemented them was so that you could traverse the blip tree over blips that weren't defined in the json, but I don't think this is actually needed.
Assume we have a wavelet with 4 blips in a thread.
1) Partial event data, where all blips are described as direct chidlren of the root blip (e.g. last blip in thread deleted, so just the root blip is defined in the json)
wavelet (defined)
root_blip (defined)
blip2 (undefined, but referenced)
blip3 (undefined, but referenced)
blip4 not in structure (undefined, but referenced as the blip that was deleted)
2) Full event data, where the full thread structure is defined.
wavelet (defined)
root_blip (defined)
blip2 (defined)
blip3 (defined)
blip4 (defined)
In the first case it does tell you about all the non-deleted blips in the wavelet, but it doesn't tell you anything about structure, so there is no need for them to be structurally important enough to create virtually. Since you can't reasonably do anything with a virtual blip (you don't know what their contents are, so you can't reasonably alter them).
Although recording blip's generated/deleted/destroyed state is important, I think I should probably just remove the virtual blips entirely.
Although it seemed sensible to create blip objects to represent referenced, but undefined, blips, I'm a lot less sure that it is a good idea any more. One big reason I implemented them was so that you could traverse the blip tree over blips that weren't defined in the json, but I don't think this is actually needed.
Assume we have a wavelet with 4 blips in a thread. 1) Partial event data, where all blips are described as direct chidlren of the root blip (e.g. last blip in thread deleted, so just the root blip is defined in the json)
2) Full event data, where the full thread structure is defined.
In the first case it does tell you about all the non-deleted blips in the wavelet, but it doesn't tell you anything about structure, so there is no need for them to be structurally important enough to create virtually. Since you can't reasonably do anything with a virtual blip (you don't know what their contents are, so you can't reasonably alter them).
Although recording blip's generated/deleted/destroyed state is important, I think I should probably just remove the virtual blips entirely.