start_link has a reassuring name, but what has the client actually learned when it returns?
Here init returns {:ok, state, {:continue, :warm_cache}}. The startup call waits for init and nothing more. Warming happens afterwards in handle_continue. So the acknowledgement means the process exists, not that the cache is warm. Client requests won't run concurrently with the continuation inside this GenServer. They just line up behind it.
Now try the word ready on that. A client sees a healthy startup indicator and immediately asks for a cached value. If the indicator only means init returned, ready is promising too much.
There are two honest options. Hold readiness until warming finishes. Or expose Warming and bound how many requests may wait, which brings its own question about what a timeout removes from the pending work.
A supervised restart lands in the same spot. Restarting the process and restoring a usable cache are two different promises. Ready should name the one the client came for. Started is a perfectly good word for the other.