Deterministically rebuild the final game state by re-running the engine from the start
snapshot and feeding each logged input in order. Raise ValueError if an entry does not match
the engine’s expectation at that point — a desynced or corrupted tape.