Superbol_cache.ProducerThe two identities the cache is versioned against.
They answer different questions and move at different rates, so they are kept apart:
format_version names the on-disk layout. It appears in the cache directory path, so that instances built against different layouts share a cache root without interfering. Bump it by hand, and only when the layout changes.tag names the binary that produced a value. It takes part in every shallow key, so entries written by one producer are never even looked up by another.Bumped by hand whenever the on-disk layout changes. Never derived from the source, so that a rebuild does not orphan a usable cache.
Values are serialised with Marshal, whose representation is tied to far more than the source revision. Two users sharing a cache directory on one machine may well differ in every respect listed here --- distinct opam switches, or the native LSP alongside the one that runs under Node --- and reading one another's items would be undefined behaviour rather than a miss. So all of it takes part in the identity.
Length of tag, in bytes. Fixed, so that a reader can always tell a tag mismatch from a truncated item.
Hexadecimal digest of description.