Versioned hang recording objects on any [object_store::ObjectStore].
The crate owns the portable layout and codecs: percent-encoded track names, .info JSON,
the binary segment envelope, and put/get/list/delete. Callers that need runtime dispatch
supply Arc<dyn ObjectStore>; the archive API itself stays generic.
Group bounds are finite inclusive ranges in first-to-last order:
let key = groups?;
assert_eq!;
# Ok::