- memoize every no-result outcome (ErrUnavailable can wrap transient agent
and storage failures, so it is not a reliable definitive/transient
discriminator) but bound it with a 1h TTL, which also un-poisons entries
recorded under future file mtimes
- cancel the worker context and check done in the drain loop, so Close
returns promptly instead of draining the backlog at up to 30s per item
- only force recompute when the image cache is operational: during warmup
every serve is a miss, which caused a recompute spike at startup