I think you misunderstood the problem. The problem is not the collisions or the for each, it is the trigger once.
The way it works is every single one of them get an UID attached to them. Then, when they are called, they store their UID in a storage of all the UID of the trigger once that have been called. If after 2 frames it hasn’t been called again, it is deleted from that storage. While it is in that storage, it will return false as a condition.
Therefore, as you have one trigger once, it will be shared for every iteration. If it is once called, it’s uid will be stored, and for the next block the trigger once uid will still be in the storage, therefore it won’t trigger again.