The fix for IDME-388 has introduced an obscure bug which breaks reconciliation if the source system contains objects with duplicate _id values.
The cause of the problem is a result of the move from ArrayList to LinkedHashSet within ReconTypeByQuery.querySource(). The move to a HashSet means that the list of IDs within ResultIterable can no longer contain duplicate values and as a result any duplicates within the source query result will cause the allids and values collections to become out of sync thereby breaking the Iterator.
We should handle duplicate IDs within source/target queries in a deterministic way. In addition to logging a meaningful message to alert the user of the condition.