Covers the cache's promises: one shared lookup for concurrent asks, instant answers with a background refresh once stale, "pending" (not empty) on a slow first ask, the last good value surviving a failed read, and invalidation forcing a fresh one.

## Before writing SPEC.md files

Read https://raw.githubusercontent.com/brillout/sdd/refs/heads/main/sdd.md
