Module Superbol_cache.Producer

The two identities the cache is versioned against.

They answer different questions and move at different rates, so they are kept apart:

val format_version : string

Bumped by hand whenever the on-disk layout changes. Never derived from the source, so that a rebuild does not orphan a usable cache.

val description : string

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.

val tag_length : int

Length of tag, in bytes. Fixed, so that a reader can always tell a tag mismatch from a truncated item.

val tag : string

Hexadecimal digest of description.