Hmm that could work but I agree that the logic would be disrupted by changing the number of steps above it. It also doesn't look like there is a way to get a step index by string name. Only by a long.
I'll defer to your expertise about how to persist a unique identifier. The GUID suggestion was only a thought.
Using your suggestions, a wait step would need to be script step.
It would have to retrieve all the step IDs it cared about, then inspect those step objects for a BuildStatus of vbldStepStatSucceeded. If not all are done, do not continue. All of that would need to be in a loop.
When I wrote the initial post, I envisioned all of this happening within a wait step itself. As an input option, instead of providing a list of PIDs to not exist or files to be created, just a list of steps to have status vbldStepStatSucceeded (or any status for that matter). The wait wouldn't need to be in a loop.
My only concern is how would the wait stop waiting and ultimately end the build or fail the build if a step never returned. Perhaps being able to set a step failure status that would force the wait to stop and end the build once all other steps resolved with some kind of status...success or otherwise.
I would be happy to discuss this with you on the phone if you'd like. I believe this would be a really helpful feature. It would likely be something that I can use to justify our site license upgrade from 9.x to 10.x