2026-02-27 12:02.29: New job: test mirage/irmin https://github.com/mirage/irmin.git#refs/heads/spice (4cd100097780e510a02a484cdd1925548bd460bf) (linux-x86_64:(lint-fmt))Base: ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7ocamlformat version: version 0.27.0 (from opam)To reproduce locally:git clone --recursive "https://github.com/mirage/irmin.git" -b "spice" && cd "irmin" && git reset --hard 4cd10009cat > Dockerfile <<'END-OF-DOCKERFILE'FROM ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7USER 1000:1000RUN cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -uRUN opam depext -i duneWORKDIR /srcRUN opam depext -i ocamlformat=0.27.0COPY --chown=1000:1000 . /src/RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)END-OF-DOCKERFILEdocker build .END-REPRO-BLOCK2026-02-27 12:02.29: Using cache hint "mirage/irmin-ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7-debian-13-4.08_opam-2.5-ocamlformat-302e116c4009da2f5a31c350a57c8b3c9b27289e"2026-02-27 12:02.29: Using OBuilder spec:((from ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7)(user (uid 1000) (gid 1000))(run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u"))(run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i dune"))(workdir /src)(run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i ocamlformat=0.27.0"))(copy (src .) (dst /src/))(run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)")))2026-02-27 12:02.29: Waiting for resource in pool OCluster2026-02-27 12:05.51: Waiting for worker…2026-02-27 12:09.54: Got resource from pool OClusterBuilding on laodoke.caelum.ci.devAll commits already cachedHEAD is now at 4cd1000977 D4 delivery(from ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7)2026-02-27 12:09.56 ---> using "8e880d54b82285cc07797680056d2282ee7dd8d645150afdce9c0dfbe68786cc" from cache/: (user (uid 1000) (gid 1000))/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u"))From https://github.com/ocaml/opam-repository* branch master -> FETCH_HEAD340ee6fd1f..d6d1ae33b0 master -> origin/master302e116c40 Merge pull request #29374 from shonfeder/release-dune-3.21.1<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>[default] Initialiseddefault (at git+file:///home/opam/opam-repository):[INFO] opam 2.1 and 2.2 include many performance and security improvements over 2.0; please consider upgrading (https://opam.ocaml.org/doc/Install.html)Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages.Nothing to do.# Run eval $(opam env) to update the current shell environment2026-02-27 12:09.56 ---> using "b08ff0ee2b029d47ebd63fda058aa6322a9ef2a1ca63d0b41e317156fad9ff84" from cache/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i dune"))# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian# No extra OS packages requirements found.# All required OS packages found.# Now letting opam install the packagesThe following actions will be performed:- install dune 3.21.1<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>[dune.3.21.1] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed dune.3.21.1Done.# Run eval $(opam env) to update the current shell environment2026-02-27 12:09.56 ---> using "ecc6dc342ae71659e951fc3d7f3b0f8bae5f117e98a01e439731b1eb512382b0" from cache/: (workdir /src)/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i ocamlformat=0.27.0"))# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian# No extra OS packages requirements found.# All required OS packages found.# Now letting opam install the packagesThe following actions will be performed:- install sexplib0 v0.14.0 [required by base]- install ocamlbuild 0.16.1 [required by fpath, astring, uuseg]- install cmdliner 1.3.0 [required by ocamlformat]- install either 1.0.0 [required by ocamlformat-lib]- install menhirLib 20260209 [required by ocamlformat-lib]- install dune-build-info 3.21.1 [required by ocamlformat-lib]- install csexp 1.5.2 [required by ocamlformat]- install menhirSdk 20260209 [required by ocamlformat-lib]- install menhirGLR 20260209 [required by menhir]- install camlp-streams 5.0.1 [required by ocamlformat-lib]- install seq base [required by re]- install fix 20250919 [required by ocamlformat-lib]- install ocamlfind 1.9.8 [required by ocp-indent, astring, fpath, uuseg]- install ocaml-version 4.0.3 [required by ocamlformat-lib]- install menhirCST 20260209 [required by menhir]- install dune-configurator 3.21.1 [required by base]- install re 1.11.0 [required by ocamlformat]- install topkg 1.1.1 [required by fpath, astring, uuseg]- install ocp-indent 1.9.0 [required by ocamlformat-lib]- install menhir 20260209 [required by ocamlformat-lib]- install base v0.14.3 [required by ocamlformat-lib]- install uutf 1.0.4 [required by ocamlformat-lib]- install astring 0.8.5 [required by ocamlformat-lib]- install stdio v0.14.0 [required by ocamlformat-lib]- install uucp 15.0.0 [required by uuseg]- install fpath 0.7.3 [required by ocamlformat-lib]- install uuseg 15.0.0 [required by ocamlformat-lib]- install ocamlformat-lib 0.27.0 [required by ocamlformat]- install ocamlformat 0.27.0===== 29 to install =====<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>[astring.0.8.5] found in cache[base.v0.14.3] found in cache[camlp-streams.5.0.1] found in cache[cmdliner.1.3.0] found in cache[csexp.1.5.2] found in cache[dune-build-info.3.21.1] found in cache[dune-configurator.3.21.1] found in cache[either.1.0.0] found in cache[fix.20250919] found in cache[fpath.0.7.3] found in cache[menhir.20260209] found in cache[menhirCST.20260209] found in cache[menhirGLR.20260209] found in cache[menhirLib.20260209] found in cache[menhirSdk.20260209] found in cache[ocaml-version.4.0.3] found in cache[ocamlbuild.0.16.1] found in cache[ocamlfind.1.9.8] found in cache[ocamlformat.0.27.0] found in cache[ocamlformat-lib.0.27.0] found in cache[ocp-indent.1.9.0] found in cache[re.1.11.0] found in cache[sexplib0.v0.14.0] found in cache[stdio.v0.14.0] found in cache[topkg.1.1.1] found in cache[uucp.15.0.0] found in cache[uuseg.15.0.0] found in cache[uutf.1.0.4] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed seq.base-> installed camlp-streams.5.0.1-> installed csexp.1.5.2-> installed either.1.0.0-> installed fix.20250919-> installed cmdliner.1.3.0-> installed menhirCST.20260209-> installed menhirGLR.20260209-> installed menhirLib.20260209-> installed menhirSdk.20260209-> installed ocaml-version.4.0.3-> installed re.1.11.0-> installed sexplib0.v0.14.0-> installed dune-build-info.3.21.1-> installed dune-configurator.3.21.1-> installed ocamlfind.1.9.8-> installed ocp-indent.1.9.0-> installed ocamlbuild.0.16.1-> installed base.v0.14.3-> installed menhir.20260209-> installed topkg.1.1.1-> installed stdio.v0.14.0-> installed uutf.1.0.4-> installed astring.0.8.5-> installed fpath.0.7.3-> installed uucp.15.0.0-> installed uuseg.15.0.0-> installed ocamlformat-lib.0.27.0-> installed ocamlformat.0.27.0Done.<><> ocp-indent.1.9.0 installed successfully ><><><><><><><><><><><><><><><><><>=> This package requires additional configuration for use in editors. Install package 'user-setup', or manually:* for Emacs, add these lines to ~/.emacs:(add-to-list 'load-path "/home/opam/.opam/4.08/share/emacs/site-lisp")(require 'ocp-indent)* for Vim, add this line to ~/.vimrc:set rtp^="/home/opam/.opam/4.08/share/ocp-indent/vim"# Run eval $(opam env) to update the current shell environment2026-02-27 12:09.56 ---> using "c3d6c04c7eaf8c3d561587626ecfd23abccfd85626fee14421b99088c30bf204" from cache/src: (copy (src .) (dst /src/))2026-02-27 12:09.58 ---> saved as "6ccadf9ea2d49c7d394be1057235e0d34ecf9f7a372ac8864bbb7cb329c225a1"/src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)"))Warning: Invalid documentation comment:File "test/irmin-graphql/common.mli", line 88, character 16 to line 92, character 6:'{[...]}' (code block) should begin on its own line.Warning: Invalid documentation comment:File "test/irmin-graphql/common.mli", line 98, character 16 to line 102, character 6:'{[...]}' (code block) should begin on its own line.Warning: Invalid documentation comment:File "test/irmin-graphql/common.mli", line 104, character 24 to line 108, character 6:'{[...]}' (code block) should begin on its own line.Warning: Invalid documentation comment:File "test/irmin-graphql/common.mli", line 114, character 16 to line 118, character 6:'{[...]}' (code block) should begin on its own line.File "src/irmin/conf.mli", line 1, characters 0-0:diff --git a/_build/default/src/irmin/conf.mli b/_build/default/src/irmin/.formatted/conf.mliindex d34ff86..ef0f025 100644--- a/_build/default/src/irmin/conf.mli+++ b/_build/default/src/irmin/.formatted/conf.mli@@ -79,8 +79,8 @@ val key :with a dot. [docv] is a meta-variable for representing the values of the key(e.g. ["BOOL"] for a boolean).- Raises [Invalid_argument] if the key name is not made of a sequence of- ASCII lowercase letter, digit, dash or underscore. *)+ Raises [Invalid_argument] if the key name is not made of a sequence of ASCII+ lowercase letter, digit, dash or underscore. *)val serialized_key :?docs:string ->@@ -95,8 +95,8 @@ val serialized_key :string ->'a ->'a key-(** Same as {!val-key} for types that don't implement [Type.t] but can be serialized- with [to_string], and deserialized with either [of_string] or+(** Same as {!val-key} for types that don't implement [Type.t] but can be+ serialized with [to_string], and deserialized with either [of_string] or[of_json_string]. The [typename] is the user-readable description of thetype, in case of dynamic type errors. *)File "src/irmin-fs/irmin_fs.mli", line 1, characters 0-0:diff --git a/_build/default/src/irmin-fs/irmin_fs.mli b/_build/default/src/irmin-fs/.formatted/irmin_fs.mliindex 3fade2f..1d9247e 100644--- a/_build/default/src/irmin-fs/irmin_fs.mli+++ b/_build/default/src/irmin-fs/.formatted/irmin_fs.mli@@ -27,8 +27,8 @@ module Conf : sigendval config : string -> Irmin.config-(** [config root] is a configuration with the key {!Conf.Key.root} set- to [root]. *)+(** [config root] is a configuration with the key {!Conf.Key.root} set to+ [root]. *)module type IO = sig(** {1 File-system abstractions} *)File "src/irmin/tree_intf.ml", line 1, characters 0-0:diff --git a/_build/default/src/irmin/tree_intf.ml b/_build/default/src/irmin/.formatted/tree_intf.mlindex f1a8911..c3e36da 100644--- a/_build/default/src/irmin/tree_intf.ml+++ b/_build/default/src/irmin/.formatted/tree_intf.ml@@ -126,7 +126,8 @@ module type S = sigval hash : ?cache:bool -> t -> hash(** [hash t] is the hash of the {!contents} value returned when [t] is- {!val-force}d successfully. [cache] controls caching of lazily-loaded data (see {b caching} section). *)+ {!val-force}d successfully. [cache] controls caching of lazily-loaded+ data (see {b caching} section). *)val key : t -> contents_key option(** [key t] is the key of the {!contents} value returned when [t] is@@ -171,7 +172,8 @@ module type S = sigIt is equivalent to [List.length (list t k)] but backends might optimisethis call: for instance it's a constant time operation in [irmin-pack].- [cache] defaults to [true], [cache] controls caching of lazily-loaded data.*)+ [cache] defaults to [true], [cache] controls caching of lazily-loaded+ data.*)val find : t -> path -> contents option(** [find] is similar to {!find_all} but it discards metadata. *)File "src/irmin-chunk/irmin_chunk.mli", line 1, characters 0-0:diff --git a/_build/default/src/irmin-chunk/irmin_chunk.mli b/_build/default/src/irmin-chunk/.formatted/irmin_chunk.mliindex aeb580a..94cfad8 100644--- a/_build/default/src/irmin-chunk/irmin_chunk.mli+++ b/_build/default/src/irmin-chunk/.formatted/irmin_chunk.mli@@ -23,10 +23,10 @@(** {1 Managing Chunks}This module exposes functors to store raw contents into append-only stores- as chunks of same size. It exposes the [AO] functor which split the- raw contents into [Data] blocks, addressed by [Node] blocks. That's the- usual rope-like representation of strings, but chunk trees are always built- as perfectly well-balanced and blocks are addressed by their hash (or by the+ as chunks of same size. It exposes the [AO] functor which split the raw+ contents into [Data] blocks, addressed by [Node] blocks. That's the usual+ rope-like representation of strings, but chunk trees are always built as+ perfectly well-balanced and blocks are addressed by their hash (or by thestable keys returned by the underlying store).A chunk has the following structure:@@ -45,10 +45,10 @@[length] is the payload length. Otherwise it is the number of children thatthe node has.- It also exposes [AO_stable] which -- as [AO] does --- stores raw contents into chunks of same size. But it also preserves the nice- property that values are addressed by their hash, instead of by the hash of- the root chunk node as is the case for [AO]. *)+ It also exposes [AO_stable] which -- as [AO] does -- stores raw contents+ into chunks of same size. But it also preserves the nice property that+ values are addressed by their hash, instead of by the hash of the root chunk+ node as is the case for [AO]. *)module Conf : sigopen Irmin.Backend.ConfFile "src/irmin/store_intf.ml", line 1, characters 0-0:diff --git a/_build/default/src/irmin/store_intf.ml b/_build/default/src/irmin/.formatted/store_intf.mlindex e2df132..b7484a7 100644--- a/_build/default/src/irmin/store_intf.ml+++ b/_build/default/src/irmin/.formatted/store_intf.ml@@ -795,7 +795,8 @@ module type S_generic_key = sigtest:tree option ->set:tree option ->(commit option, write_error) result- (** [test_set_and_get_tree] is like {!test_set_and_get} but for a {!type-tree} *)+ (** [test_set_and_get_tree] is like {!test_set_and_get} but for a {!type-tree}+ *)val test_set_and_get_tree_exn :?clear:bool ->File "demo/get_tau.ml", line 1, characters 0-0:diff --git a/_build/default/demo/get_tau.ml b/_build/default/demo/.formatted/get_tau.mlindex 1b7274d..606a0a0 100644--- a/_build/default/demo/get_tau.ml+++ b/_build/default/demo/.formatted/get_tau.ml@@ -1,12 +1,16 @@-module Fs_store = Irmin_fs_unix.KV.Make(Irmin.Contents.Json_value)+module Fs_store = Irmin_fs_unix.KV.Make (Irmin.Contents.Json_value)let rec json_to_string = function-| `Null -> "null"-| `Bool b -> string_of_bool b-| `String s -> s-| `Float f -> string_of_float f-| `O u -> "{" ^ String.concat "; " (List.map (fun (k, v) -> "\"" ^ k ^ "\": " ^ json_to_string v) u) ^ "}"-| `A u -> "[" ^ String.concat "; " (List.map json_to_string u) ^ "]"+ | `Null -> "null"+ | `Bool b -> string_of_bool b+ | `String s -> s+ | `Float f -> string_of_float f+ | `O u ->+ "{"+ ^ String.concat "; "+ (List.map (fun (k, v) -> "\"" ^ k ^ "\": " ^ json_to_string v) u)+ ^ "}"+ | `A u -> "[" ^ String.concat "; " (List.map json_to_string u) ^ "]"let get_tau env =let root = Eio.Path.(env#fs / "math") in@@ -14,10 +18,11 @@ let get_tau env =let repo = Fs_store.Repo.v conf inlet main = Fs_store.main repo inlet tau = Fs_store.get main [ "tau" ] in- assert (tau = `O ["val", `Float 6.28; ]);+ assert (tau = `O [ ("val", `Float 6.28) ]);tau-let _ = Eio_main.run @@ fun env ->+let _ =+ Eio_main.run @@ fun env ->let tau = get_tau env inlet str = json_to_string tau in- Eio.Flow.copy_string str env#stdout;+ Eio.Flow.copy_string str env#stdoutFile "demo/set_pi.ml", line 1, characters 0-0:diff --git a/_build/default/demo/set_pi.ml b/_build/default/demo/.formatted/set_pi.mlindex 749fa37..e298f4a 100644--- a/_build/default/demo/set_pi.ml+++ b/_build/default/demo/.formatted/set_pi.ml@@ -1,4 +1,5 @@-module Fs_store = Irmin_fs_unix.KV.Make(Irmin.Contents.Json_value)+module Fs_store = Irmin_fs_unix.KV.Make (Irmin.Contents.Json_value)+let commit branch message path contents =let info () = Fs_store.Info.v ~author:"jane doe" ~message 0L inFs_store.set ~info branch path contents@@ -8,8 +9,8 @@ let set_pi env =let conf = Irmin_fs_unix.config ~root ~clock:env#clock inlet repo = Fs_store.Repo.v conf inlet main = Fs_store.main repo in- let pi = `O ["val", `Float 3.1416] in- let result = commit main "set pi" ["pi"] pi in+ let pi = `O [ ("val", `Float 3.1416) ] in+ let result = commit main "set pi" [ "pi" ] pi inassert (Result.is_ok result)let _ = Eio_main.run set_piFile "src/irmin-pack/io/chunked_suffix_intf.ml", line 1, characters 0-0:diff --git a/_build/default/src/irmin-pack/io/chunked_suffix_intf.ml b/_build/default/src/irmin-pack/io/.formatted/chunked_suffix_intf.mlindex 0294794..f768c70 100644--- a/_build/default/src/irmin-pack/io/chunked_suffix_intf.ml+++ b/_build/default/src/irmin-pack/io/.formatted/chunked_suffix_intf.ml@@ -18,8 +18,8 @@ open Importmodule type S = sig(** Abstraction for a chunked suffix. It is functionally equivalent to- [Append_only_file] but with a chunked implementation that is- parameterized by+ [Append_only_file] but with a chunked implementation that is parameterized+ by- [start_idx] for {!create_rw} to know the starting file name, and- [start_idx] and [chunk_num] for the open functions to know the startingFile "src/irmin-pack/io/irmin_pack_io.mli", line 1, characters 0-0:diff --git a/_build/default/src/irmin-pack/io/irmin_pack_io.mli b/_build/default/src/irmin-pack/io/.formatted/irmin_pack_io.mliindex 90b7c56..e85f19e 100644--- a/_build/default/src/irmin-pack/io/irmin_pack_io.mli+++ b/_build/default/src/irmin-pack/io/.formatted/irmin_pack_io.mli@@ -14,8 +14,8 @@* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.*)-(** The [irmin-pack-unix] package provides an implementation of [Irmin_pack]- for Unix systems.+(** The [irmin-pack-unix] package provides an implementation of [Irmin_pack] for+ Unix systems.[irmin-pack-unix] provides advanced features such as garbage collection,snapshoting, integrity checks. *)File "src/irmin-pack/io/control_file_intf.ml", line 1, characters 0-0:diff --git a/_build/default/src/irmin-pack/io/control_file_intf.ml b/_build/default/src/irmin-pack/io/.formatted/control_file_intf.mlindex a92a922..05f66ca 100644--- a/_build/default/src/irmin-pack/io/control_file_intf.ml+++ b/_build/default/src/irmin-pack/io/.formatted/control_file_intf.ml@@ -339,7 +339,8 @@ module type S = sigpath:Eio.Fs.dir_ty Eio.Path.t ->(payload, [> open_error | Io.close_error ]) result(** [read_payload ~path] reads the payload at [path]. It is a convenient way- to read the payload without needing to call [open_], [payload], [close]. *)+ to read the payload without needing to call [open_], [payload], [close].+ *)val read_raw_payload :sw:Eio.Switch.t ->File "src/irmin-pack/io/stats_intf.ml", line 1, characters 0-0:diff --git a/_build/default/src/irmin-pack/io/stats_intf.ml b/_build/default/src/irmin-pack/io/.formatted/stats_intf.mlindex 3c36ff5..7bfac1a 100644--- a/_build/default/src/irmin-pack/io/stats_intf.ml+++ b/_build/default/src/irmin-pack/io/.formatted/stats_intf.ml@@ -265,13 +265,13 @@ module type Sigs = sigval report_pack_store : field:Pack_store.field -> unit(** [report_pack_store ~field] increments the [field] value in the- [pack_store] stats. It also increments the [total] field in- [Pack_store.t] when the field is related to [finds]. *)+ [pack_store] stats. It also increments the [total] field in [Pack_store.t]+ when the field is related to [finds]. *)val report_index : unit -> unit(** [report_index ()] fills the [stats] with value from the [Index.Stats]- module. This essentially copies the "current" values from [Index.Stats]- to the [get()] instance [index] field. *)+ module. This essentially copies the "current" values from [Index.Stats] to+ the [get()] instance [index] field. *)val incr_appended_hashes : unit -> unit(** [incr_appended_hashes ()] increments the field [appended_hashes] forFile "src/irmin-pack/unix/irmin_pack_unix.mli", line 1, characters 0-0:diff --git a/_build/default/src/irmin-pack/unix/irmin_pack_unix.mli b/_build/default/src/irmin-pack/unix/.formatted/irmin_pack_unix.mliindex 8b60ef4..1196527 100644--- a/_build/default/src/irmin-pack/unix/irmin_pack_unix.mli+++ b/_build/default/src/irmin-pack/unix/.formatted/irmin_pack_unix.mli@@ -14,8 +14,8 @@* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.*)-(** The [irmin-pack-unix] package provides an implementation of [Irmin_pack]- for Unix systems.+(** The [irmin-pack-unix] package provides an implementation of [Irmin_pack] for+ Unix systems.[irmin-pack-unix] provides advanced features such as garbage collection,snapshoting, integrity checks. *)dune build @fmt failed"/usr/bin/env" "bash" "-c" "opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)" failed with exit status 22026-02-27 12:10.04: Job failed: Failed: Build failed