Expand description
Implementation crate for cargo-bench-history; do not depend on this directly.
The storage port and its backends. analyze and the mutating commands talk to a
single [Storage] trait; behind it sit a local-filesystem backend, an Azure Blob
backend, and a read-through caching backend that mirrors a cloud backend onto local
disk (using per-project cache-epoch markers to detect remote rewrites). The key-layout
and sanitization rules that keep those backends addressing the same objects live here
too, alongside an in-memory fake (behind private-test-util) so commands are testable
without a filesystem or cloud account. Split out of the cargo-bench-history shell so
the Azure and blob-storage dependencies are isolated for mutation testing.
Every item is re-exported flat from the crate root, so consumers write
cbh_storage::StorageFacade rather than reaching into a submodule.