resolveParams
Replaces the unresolved values in a step's parameters with what the earlier steps produced.
A SpreadParameters contributes its entries under their own names instead of taking the name it was filed under, so the parameter map that comes out can be longer than the one that went in.
Everything that can fail here says which step it was resolving. A plan built in a loop has the same SQL and the same parameter names in every one of its steps, so the parameter alone does not identify anything and the query context on the exception cannot separate the third iteration from the seventeenth.
Parameters
The step's parameters as they were written.
What the steps before this one produced.
Where this step sits in the plan being run.
Where every step sits, for naming the step a value was taken from.