This seems to be a problem that has come from trying to use FPS networking mechanics in an RTS context.
Not really, this “problem” has come about from me seeking to reduce the latency that comes with lockstep. Ordinarily, when using lockstep, command latency is bound by packet frequency. I'm seeking to break this constraint.
Almost all games have a deterministic “input → simulation → output” process, but that is not what makes it lockstep - the lockstep aspect is that all simulations in the network apply the same input to the same simulation, and thereby get the same outputs.
I literally, right now, have a classic lockstep engine, as described in the OP, where all clients (and the server for that matter) have identical state, and an identical sequence of commands is executed on all of them. There is no rollback, because, as you say, it's not required.
However, I have spotted an opportunity to reduce command latency further by introducing rollback (as described in OP).
Normally RTS games are robust in the face of one client experiencing a bit of lag because it just means that their own input gets delayed slightly. No need for any prediction or rollback.
Yes, yes, this is exactly what I have now; however, the latency optimisation introduces the need for rollback.
So, in essence, I'm left with something that is exactly like a classic client-server lockstep i.e.
1) The latency of a command round trip (to the sever and back again) is masked by immediate local feedback
2) Large spikes in lag will result in a delay to the commands and the game “halting”
3) (Except in exceptional circumstances), no rollback is happening and all clients are executing an identical sequence of commands on identical world state
The difference is that:
1) I'll have shaved off 30-100ms off command latency. (Some might argue the price of implementing rollback is not worth it, but as a eSporter I disagree)
2) Rollback will occur when latency spikes happen. This may come with minor visual (a few frames at most) rubber banding before the client halts
I think I'm continuing to suffer being caught between two definitions.