Code:
Unable to read document
Was expecting a single tail transaction, but found 2.
As far as I know, the only way for this to happen is if you edit an OmniFocus
document in two copies of OmniFocus at the same time.
Normally, OmniFocus writes out transactions like this:
1 -> 2 -> 3 -> 4
This gives one tail transaction, transaction 4.
If you were to open the
document in two copies of OmniFocus (possibly on different computers) at this point, they would each have a tailing transaction 4—so far so good. If you then edit the
document on both sides, you'll end up with two alternate transaction paths, because each computer thinks it's writing the only transactions:
OmniFocus A: 1 -> 2 -> 3 -> 4 -> A5 -> A6 -> A7
OmniFocus B: 1 -> 2 -> 3 -> 4 -> B5 -> B6
We try to prevent this by writing an OmniFocus.ofocus.lock file which warns you that another copy of OmniFocus is editing the
document at the moment, but if you copy your OmniFocus.ofocus
document to a different device, the
lock file might not come along with it (and wouldn't be up to date the moment it left anyway).
The problem above happens when you merges your two paths of changes back together, resulting in two trailing transactions. In the above example, they would be A7 and B6, and if you were to graph the transaction tree in OmniGraffle (we have a script which does this), it would look something like this:
Code:
1 -> 2 -> 3 -> 4 -> A5 -> A6 -> A7
|
+ -> B5 -> B6
When we try to open a
document in this state, we report the error about getting multiple tail transactions because we don't have any mechanism for resolving such conflicts yet. Our long-term plan is to try to resolve these synchronization conflicts by analyzing the transactions to see whether they affect the same data in different ways (and if so, prompting the user to decide which change to keep), but that work isn't planned for 1.0.
In the meantime, we weren't expecting this to affect anyone (since we don't support simultaneous edits on multiple computers yet) but obviously it has, so I guess we should at least give you the option of choosing one path or the other (presumably showing you some information about each path—perhaps the timestamps of the transactions?—so you don't have to make a completely random guess as to whether you want to keep path A or B).