"Randomness you saved the seed for isn't really random anymore — it's a result you can prove."
The paradox of reproducible randomness
Monte Carlo is built on random draws, so at first it seems like the opposite of reproducible — run it twice, get two different fans. Keep dissolves that paradox by storing the random seed alongside every run. A pseudo-random generator is deterministic: give it the same seed and it produces the exact same sequence of "random" numbers, every time, on every machine. So a run that captures its seed can be regenerated bit-for-bit later. The randomness is real enough to explore possibility, and pinned enough to reproduce and audit.
What a run persists
Reproducibility means capturing everything that determined the output, not just some of it. A Keep simulation run stores the full determinant set: the mode, owner, ticker set, horizon, iteration count, hurdles, mean-reversion coefficient, calibration, seed prices, the percentile paths, the results — and the random seed. Miss any one of these and the run stops being reproducible: the same seed with different inputs gives a different answer, and the same inputs with a lost seed gives different random paths. Reproducibility is all-or-nothing. You capture the complete recipe, or you can't rebake the cake.
Why an auditable run matters here
This isn't academic rigor for its own sake — it serves the calm, honest posture of the whole app. Because a run is fully persisted and replayable, you can come back to a scenario months later and see exactly what it assumed and produced, not a fuzzy memory of "I ran something like this once." There's no mystery number floating in the UI that nobody can reconstruct. Every scenario is a durable, inspectable artifact with a complete provenance — the same honesty Keep applies to prices and cash, applied to simulations.