"Cache what changes slowly. Never cache the one thing your result must be exactly reproducible from."
Two kinds of simulation input, two caching rules
A simulation needs two very different kinds of input, and Keep treats them oppositely. Calibration — derived quantities like volatility, beta, and anchor values — is cached for a day. Seed prices — the exact starting prices each run begins from — are always resolved fresh at run time, never served from cache. Same run, two inputs, two rules: one cached, one always live. The split isn't arbitrary; each rule follows from what the input is for.
Why calibration can cache
Calibration is derived and stable. Volatility and beta are computed from windows of historical data; they describe the character of an instrument, and that character doesn't meaningfully change from one hour to the next. Recomputing them on every run would be pure waste — expensive work to arrive at essentially the same numbers. A one-day cache matches their real tempo: they're stable enough that yesterday's calibration is a fine input to today's run, and caching them keeps simulations fast.
Why seed prices must be fresh
Seed prices are the opposite kind of input: they're the exact anchor a run's whole fan of paths grows out of. If a seed price came from a cache, two runs "from the same starting point" might silently start from slightly different prices depending on cache state — and the run would no longer be exactly reproducible from its recorded inputs. So Keep resolves seed prices fresh every time and persists the resolved value with the run. That way the run's starting point is both exact at creation and captured for replay. The thing your reproducibility hangs on is never left to cache luck.