Not being able to sleep, I was thinking about the following. Another way an orphan can be left (this time a subordinate transaction rather than a subordinate transactions resource) is:
1. Start transaction at TM1
2. Propagate to TM2
3. Enlist the database at TM2
3. Return to TM1 but before the proxy resource can be enlisted at TM1....
4. -- CRASH --
This scenario has a couple of issues salient to us.
1. The transport is going to need to keep a record *before it talks to the remote server* of all remote servers it talks to so that it can generate proxy XAResourceRecoveries to make sure when the server housing it crashed it did not leave any transactions in flight.
2. The case provides the absolute requirement of storing the parents node name in an Xid as during recovery this is the only information we have to help identify which subordinate transactions in flight are owned by a recovering parent