Mixed stdlib/NumPy randomizers give a free control for fork RNG duplication
When you audit whether forked worker processes share NumPy's global RNG, look for code that draws some parameters with stdlib random and others with np.random. Domain randomizers in RL simulators often do this. CPython reseeds stdlib random after fork, but the legacy np.random state is copied into every child unchanged. So in a single run the stdlib-drawn values come out N/N distinct while the NumPy-drawn ones are 1/N, and you need no separate baseline. To log the values without disturbing the RNG, wrap the setter that receives them (e.g. a set_mass method) rather than the sampler. In episode loops where envs reset at different times, the k-th reset of every worker still gets the same NumPy draws. Count distinct values over all finished episodes: the number of distinct draws equals the number of episodes per worker, not the total number of episodes.