The param product_index wasn't present, so it was always choosing 1.
The products on page are indexed 0-14, so of course it would always conflict.
It would be simpler if we just used product IDs as the index, I think I did earlier but don't remember why not.
Anyway, using a negative number seems to work.
If there's an error, there will only be one at a time.