I think the Tl;dr though is that the way they set their RNGs up were with seed=run_seed + hash(“rng instance name”); this meant that all of the rngs they used had seeds that were constant offsets to each other. The PRNG algorithm they were using (C# standard library) happens to have a property where if you shift the seed by some constant, your rng’s output shifts by a linear amount corresponding to that. As a result, all the rngs for what are supposed to be independent things were basically all giving the same results just offset to each other.
Here’s a write up that, eventually, gets to the RNG stuff. https://tck.mn/blog/correlated-randomness-sts2/
I think the Tl;dr though is that the way they set their RNGs up were with seed=run_seed + hash(“rng instance name”); this meant that all of the rngs they used had seeds that were constant offsets to each other. The PRNG algorithm they were using (C# standard library) happens to have a property where if you shift the seed by some constant, your rng’s output shifts by a linear amount corresponding to that. As a result, all the rngs for what are supposed to be independent things were basically all giving the same results just offset to each other.