ReorderWindow
data class ReorderWindow(val windowSize: Int, val seed: Long, val direction: Direction = Direction.Both) : FaultProfile
Buffer up to windowSize frames then emit them in a randomised order.
The window slides: once full it flushes all buffered frames in a seed-determined permutation, then starts filling again. direction controls which message stream is reordered.
seed guarantees determinism across test runs.