Leave it up to implementations how to interpret last_modified for dictionaries, or even not implement it (then returning Error (`Value_expected _). The previous definition was not well founded when the dictionary doesn't contain any values directly, and some implementations implements last_modified differently from the description on dictionaries. (reported in #41, fixed in #42 by @reynir)
Leave it up to implemetations how to interpret digest for dictionaries, or even not implement it (returning Error (`Value_expected _). (reported mirage/ocaml-tar#111, fixed in #43 by @reynir)
v6.1.0 (2023-01-31)
Mirage_kv.Key.add now raises Invalid_argument (instead of Failure). Document that it raises (#40 @reynir)
v6.0.1 (2022-12-15)
Specify in RO.list that the returned list consists of keys being absolute, and kinds (#38 #39 @reynir @hannesm)
BREAKING: Before 6.0.0, the return type of RO.list consisted of a string and kind list, where the string was relative. Now it is absolute.
v6.0.0 (2022-12-12)
Use ptime directly for RO.last_modified, instead of the int * int64 pair (#34)
Add RW.allocate to allocate a key and fill it with zero bytes (#34)
RO.list: return Key.t instead of string (#37, fixes #33)
Introduce a custom error for RW.rename with a source which is a prefix of destination (#37, fixes #31)
Use Optint.Int63.t for RO.size, RO.get_partial, RO.set_partial (#37, fixes #32)
Remove RW.batch (#37, fixes #29 #36, discussed at the MirageOS meeting in November, and on the mirageos-devel mailing list in January 2022)
Key.pp: escape the entire string, not individual fragments (#35)
v5.0.0 (2022-09-07)
Add get_partial and size to the RO interface (@palainp #28, review by @yomimono @hannesm)
Add set_partial and rename to the RW interface (@palainp #28, review by @yomimono @hannesm)