Before caching a result, define when it is wrong

Cache keys, stale data and invalidation are part of the result contract, not just performance settings.

Search projects, articles and notes.