Many thanks Tim. That's certainly helpful and reassuring.
I've settled on a slightly safer fix. I'm just changed the code that deals with a sandbox error to mark the step as invalid and then keep it. It's known at that stage that the step is exactly not the same as the previous try (including the test for whether it's a check or precheck) or it would already have been discarded. Everything else is unchanged. I figure I can't break anything that way (a rash statement, I know).
I've settled on a slightly safer fix. I'm just changed the code that deals with a sandbox error to mark the step as invalid and then keep it. It's known at that stage that the step is exactly not the same as the previous try (including the test for whether it's a check or precheck) or it would already have been discarded. Everything else is unchanged. I figure I can't break anything that way (a rash statement, I know).