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:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7 ocamlformat 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 4cd10009 cat > Dockerfile <<'END-OF-DOCKERFILE' FROM ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7 USER 1000:1000 RUN 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 opam depext -i dune WORKDIR /src RUN opam depext -i ocamlformat=0.27.0 COPY --chown=1000:1000 . /src/ RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2) END-OF-DOCKERFILE docker build . END-REPRO-BLOCK 2026-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 OCluster 2026-02-27 12:05.51: Waiting for worker… 2026-02-27 12:09.54: Got resource from pool OCluster Building on laodoke.caelum.ci.dev All commits already cached HEAD 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_HEAD 340ee6fd1f..d6d1ae33b0 master -> origin/master 302e116c40 Merge pull request #29374 from shonfeder/release-dune-3.21.1 <><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><> [default] Initialised default (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 environment 2026-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 packages The 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.1 Done. # Run eval $(opam env) to update the current shell environment 2026-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 packages The 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.0 Done. <><> 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 environment 2026-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.mli index 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 the type, 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.mli index 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 : sig end val 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.ml index 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 = sig val 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 = sig It is equivalent to [List.length (list t k)] but backends might optimise this 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.mli index 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 the stable 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 that the 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 : sig open Irmin.Backend.Conf File "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.ml index 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 = sig test: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.ml index 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 in let main = Fs_store.main repo in let 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 in let str = json_to_string tau in - Eio.Flow.copy_string str env#stdout; + Eio.Flow.copy_string str env#stdout File "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.ml index 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 in Fs_store.set ~info branch path contents @@ -8,8 +9,8 @@ let set_pi env = let conf = Irmin_fs_unix.config ~root ~clock:env#clock in let repo = Fs_store.Repo.v conf in let 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 in assert (Result.is_ok result) let _ = Eio_main.run set_pi File "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.ml index 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 Import module 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 starting File "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.mli index 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.ml index 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 = sig path: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.ml index 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 = sig val 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] for File "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.mli index 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 2 2026-02-27 12:10.04: Job failed: Failed: Build failed