The ticker universe isn't fixed, and the cache assumed it was

15 September 2026

The replay cache was built the obvious way: work out which tickers the game needs, fetch history for all of them once, store it, done.

It covered sixteen. The game was using around sixty.

Where the other forty-four came from

The brokers choose their own names. Each scouting round, the language model covering a sector picks four to eight tickers it wants to look at. It is not selecting from a fixed list — it is answering a question about a sector, in words, and the answers vary between runs, between models, and between sessions.

So there is no complete list to pre-fetch, because the list does not exist until the model has spoken. My sixteen were simply the ones I had happened to observe while building, which felt like the universe and was a sample.

The category error: I had treated a model's output as configuration. Configuration is enumerable ahead of time. Model output is not, and anything downstream of it has to be built for names nobody has seen yet.

The fix

Lazy fill. The cache starts with what it has; when a broker names something unknown, that ticker's history is fetched on first use and added. The cache grows toward whatever this particular player's brokers actually talk about, which is not the same set as mine.

There is also a small set of symbols that come back with no data at all — delisted names, bad tickers, things the model invented. Those are remembered as failures so the game stops asking. Without that, every round re-requests the same nonexistent symbol forever.

What I would do differently

Instrument first. A single counter for cache misses would have made this obvious within one session, instead of it being something I eventually noticed by reading fetch logs. When part of a system is non-deterministic, the cheapest thing you can build is a way to measure how wrong your assumptions about it are.

Previous: Replay worked, except on the path everyone takes

Next: Sixty network calls at every launch, for data already on disk

All devlog posts