Immutable complete packs, keyed by snapshot HEAD and encoder format.
Backends own storage, eviction, concurrency and persistence. There is no
allocation requirement. Async platform caches can use these keys outside Rust.
Hits stream directly. Misses generate into caller scratch before insertion.
Cache failures propagate; use pack::write when caching is unnecessary.
Independent ref roots return Unsupported before accessing the backend:
a HEAD-only key cannot identify their union or a selected closure.