of
Pairs the propositions handed to a store with what the store returned for each, by position.
Position is the only pairing available: an id cannot be the key, because a deduplicated input comes back under a different one, which is the whole point. Both lists come from one call, so they are the same length and in the same order.
Every position reports the store's final answer for the id that position landed on. Two ways a position goes stale, and normalizing by canonical id covers both. One batch can name one input id twice — two revision results touching one original — and a replace-by-id store overwrites the first save with the second. And two distinct inputs can deduplicate onto one canonical, where the save that collapses the second also updates that canonical: DICE's graph repository unions the incoming evidence into the winner and answers with the winner as it then stands. In both cases an earlier position holds an object the store has already moved past, and in both cases the ids match, so comparing ids cannot catch it.
Resolving rather than rejecting is deliberate. This runs from PersistablePropositions.persistReturningCanonical after the saves have run, so throwing would fail an extraction whose propositions are already written — and last-write-wins is not a guess, it is what the store has.
Parameters
What was handed to the store, in order.
What the store returned, one per input, in the same order.
Throws
if the lists are different lengths, or if one input id appears twice landing on two different stored ids. The second is a backend that answered two saves of one id with two different propositions, which nothing downstream could act on sensibly and which resolution cannot honestly paper over.