The input/output model of the shadow repository synchronizer is transactional (it uses a persistent data structure), but the incremental engine isn't. An exception during the synchronization causes the output model to remain in its state before the sync, but the incremental engine contains references to nodes that were created in the output model. These nodes don't exist because of the failed transaction. This causes the synchronizer to continue throwing exceptions.
The input/output model of the shadow repository synchronizer is transactional (it uses a persistent data structure), but the incremental engine isn't. An exception during the synchronization causes the output model to remain in its state before the sync, but the incremental engine contains references to nodes that were created in the output model. These nodes don't exist because of the failed transaction. This causes the synchronizer to continue throwing exceptions.