Organisationsmbarbindunolintf1cce7 ()debian-13-5.3_opam-2.5

debian-13-5.3_opam-2.5

Logs

Show full logs
2026-01-17 13:35.11: New job: test mbarbin/dunolint https://github.com/mbarbin/dunolint.git#refs/heads/main (f1cce75361b11a88f82d7aa009489999adb4a46f) (linux-x86_64:debian-13-5.3_opam-2.5)
Base: ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d
Opam project build

To reproduce locally:

git clone --recursive "https://github.com/mbarbin/dunolint.git" -b "main" && cd "dunolint" && git reset --hard f1cce753
cat > Dockerfile <<'END-OF-DOCKERFILE'
FROM ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d
# debian-13-5.3_opam-2.5
USER 1000:1000
ENV CLICOLOR_FORCE="1"
ENV OPAMCOLOR="always"
WORKDIR /src
RUN sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam
RUN opam init --reinit -ni
RUN uname -rs && opam exec -- ocaml -version && opam --version
WORKDIR /src
RUN sudo chown opam /src
RUN cd ~/opam-repository && (git cat-file -e 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && git log --no-decorate -n1 --oneline && opam update -u
COPY --chown=1000:1000 dunolint.opam dunolint-tests.opam dunolint-lib.opam dunolint-lib-base.opam dunolint-dev.opam ./
RUN opam pin add -yn dunolint.dev './' && \
    opam pin add -yn dunolint-tests.dev './' && \
    opam pin add -yn dunolint-lib.dev './' && \
    opam pin add -yn dunolint-lib-base.dev './' && \
    opam pin add -yn dunolint-dev.dev './'
RUN echo '(lang dune 3.0)' > './dune-project'
ENV DEPS="astring.0.8.5 base.v0.17.3 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bin_prot.v0.17.0-1 bisect_ppx.2.8.3 bitv.2.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdlang.0.0.10 cmdlang-cmdliner-err-runner.0.0.16 cmdlang-stdlib-runner.0.0.10 cmdlang-to-cmdliner.0.0.10 cmdliner.1.3.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.1 cppo.1.8.0 csexp.1.5.2 dune.3.21.0 dune-build-info.3.21.0 dune-configurator.3.21.0 dyn.3.21.0 either.1.0.0 expect_test_helpers_core.v0.17.0 fieldslib.v0.17.0 file-rewriter.0.0.3 fix.20250919 fmt.0.11.0 fpath.0.7.3 fpath-base.0.4.0 fpath-sexp0.0.4.0 fs-io.3.21.0 gel.v0.17.0 int_repr.v0.17.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 loc.0.2.2 logs.0.10.0 mdx.2.5.1 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-version.4.0.3 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 ocamlformat.0.28.1 ocamlformat-lib.0.28.1 ocp-indent.1.9.0 octavius.1.2.2 ordering.3.21.0 pageantty.0.0.3 parsexp.v0.17.0 patdiff.v0.17.0 patience_diff.v0.17.0 pp.2.0.0 pplumbing.0.0.16 pplumbing-err.0.0.16 pplumbing-log.0.0.16 pplumbing-log-cli.0.0.16 pplumbing-pp-tty.0.0.16 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_bench.v0.17.0 ppx_bin_prot.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_custom_printf.v0.17.0 ppx_derivers.1.2.1 ppx_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.2 ppx_fields_conv.v0.17.0 ppx_fixed_literal.v0.17.0 ppx_globalize.v0.17.0 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_ignore_instrumentation.v0.17.0 ppx_inline_test.v0.17.0 ppx_jane.v0.17.0 ppx_js_style.v0.17.0 ppx_let.v0.17.0 ppx_log.v0.17.0 ppx_module_timer.v0.17.0 ppx_optcomp.v0.17.0 ppx_optional.v0.17.0 ppx_pipebang.v0.17.0 ppx_sexp_conv.v0.17.0 ppx_sexp_message.v0.17.0 ppx_sexp_value.v0.17.0 ppx_stable.v0.17.0 ppx_stable_witness.v0.17.0 ppx_string.v0.17.0 ppx_string_conv.v0.17.0 ppx_tydi.v0.17.0 ppx_typerep_conv.v0.17.0 ppx_variants_conv.v0.17.0 ppxlib.0.35.0 ppxlib_jane.v0.17.2 re.1.14.0 result.1.5 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 sexps-rewriter.0.0.3 spawn.v0.17.0 splittable_random.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 stdune.3.21.0 time_now.v0.17.0 timezone.v0.17.0 top-closure.3.21.0 topkg.1.1.1 typerep.v0.17.1 uopt.v0.17.0 uucp.17.0.0 uuseg.17.0.0 uutf.1.0.4 variantslib.v0.17.0 volgo.0.0.21 volgo-base.0.0.21 volgo-git-backend.0.0.21 volgo-git-unix.0.0.21 volgo-hg-backend.0.0.21 volgo-hg-unix.0.0.21 volgo-vcs.0.0.21"
ENV CI="true"
ENV OCAMLCI="true"
RUN opam update --depexts && opam install --cli=2.5 --depext-only -y dunolint.dev dunolint-tests.dev dunolint-lib.dev dunolint-lib-base.dev dunolint-dev.dev $DEPS
RUN opam install $DEPS
COPY --chown=1000:1000 . /src
RUN opam exec -- dune build @install @check @runtest && rm -rf _build

END-OF-DOCKERFILE
docker build .
END-REPRO-BLOCK

2026-01-17 13:35.11: Using cache hint "mbarbin/dunolint-ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d-debian-13-5.3_opam-2.5-23e7d746fc72aee2499b55e8f72c2b7a"
2026-01-17 13:35.11: Using OBuilder spec:
((from ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d)
 (comment debian-13-5.3_opam-2.5)
 (user (uid 1000) (gid 1000))
 (env CLICOLOR_FORCE 1)
 (env OPAMCOLOR always)
 (workdir /src)
 (run (shell "sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam"))
 (run (shell "opam init --reinit -ni"))
 (run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
 (workdir /src)
 (run (shell "sudo chown opam /src"))
 (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
      (network host)
      (shell "cd ~/opam-repository && (git cat-file -e 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && git log --no-decorate -n1 --oneline && opam update -u"))
 (copy (src dunolint.opam dunolint-tests.opam dunolint-lib.opam dunolint-lib-base.opam dunolint-dev.opam)
       (dst ./))
 (run (network host)
      (shell  "opam pin add -yn dunolint.dev './' && \
             \nopam pin add -yn dunolint-tests.dev './' && \
             \nopam pin add -yn dunolint-lib.dev './' && \
             \nopam pin add -yn dunolint-lib-base.dev './' && \
             \nopam pin add -yn dunolint-dev.dev './'"))
 (run (network host)
      (shell "echo '(lang dune 3.0)' > './dune-project'"))
 (env DEPS "astring.0.8.5 base.v0.17.3 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bin_prot.v0.17.0-1 bisect_ppx.2.8.3 bitv.2.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdlang.0.0.10 cmdlang-cmdliner-err-runner.0.0.16 cmdlang-stdlib-runner.0.0.10 cmdlang-to-cmdliner.0.0.10 cmdliner.1.3.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.1 cppo.1.8.0 csexp.1.5.2 dune.3.21.0 dune-build-info.3.21.0 dune-configurator.3.21.0 dyn.3.21.0 either.1.0.0 expect_test_helpers_core.v0.17.0 fieldslib.v0.17.0 file-rewriter.0.0.3 fix.20250919 fmt.0.11.0 fpath.0.7.3 fpath-base.0.4.0 fpath-sexp0.0.4.0 fs-io.3.21.0 gel.v0.17.0 int_repr.v0.17.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 loc.0.2.2 logs.0.10.0 mdx.2.5.1 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-version.4.0.3 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 ocamlformat.0.28.1 ocamlformat-lib.0.28.1 ocp-indent.1.9.0 octavius.1.2.2 ordering.3.21.0 pageantty.0.0.3 parsexp.v0.17.0 patdiff.v0.17.0 patience_diff.v0.17.0 pp.2.0.0 pplumbing.0.0.16 pplumbing-err.0.0.16 pplumbing-log.0.0.16 pplumbing-log-cli.0.0.16 pplumbing-pp-tty.0.0.16 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_bench.v0.17.0 ppx_bin_prot.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_custom_printf.v0.17.0 ppx_derivers.1.2.1 ppx_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.2 ppx_fields_conv.v0.17.0 ppx_fixed_literal.v0.17.0 ppx_globalize.v0.17.0 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_ignore_instrumentation.v0.17.0 ppx_inline_test.v0.17.0 ppx_jane.v0.17.0 ppx_js_style.v0.17.0 ppx_let.v0.17.0 ppx_log.v0.17.0 ppx_module_timer.v0.17.0 ppx_optcomp.v0.17.0 ppx_optional.v0.17.0 ppx_pipebang.v0.17.0 ppx_sexp_conv.v0.17.0 ppx_sexp_message.v0.17.0 ppx_sexp_value.v0.17.0 ppx_stable.v0.17.0 ppx_stable_witness.v0.17.0 ppx_string.v0.17.0 ppx_string_conv.v0.17.0 ppx_tydi.v0.17.0 ppx_typerep_conv.v0.17.0 ppx_variants_conv.v0.17.0 ppxlib.0.35.0 ppxlib_jane.v0.17.2 re.1.14.0 result.1.5 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 sexps-rewriter.0.0.3 spawn.v0.17.0 splittable_random.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 stdune.3.21.0 time_now.v0.17.0 timezone.v0.17.0 top-closure.3.21.0 topkg.1.1.1 typerep.v0.17.1 uopt.v0.17.0 uucp.17.0.0 uuseg.17.0.0 uutf.1.0.4 variantslib.v0.17.0 volgo.0.0.21 volgo-base.0.0.21 volgo-git-backend.0.0.21 volgo-git-unix.0.0.21 volgo-hg-backend.0.0.21 volgo-hg-unix.0.0.21 volgo-vcs.0.0.21")
 (env CI true)
 (env OCAMLCI true)
 (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
      (network host)
      (shell "opam update --depexts && opam install --cli=2.5 --depext-only -y dunolint.dev dunolint-tests.dev dunolint-lib.dev dunolint-lib-base.dev dunolint-dev.dev $DEPS"))
 (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
      (network host)
      (shell "opam install $DEPS"))
 (copy (src .) (dst /src))
 (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
)

2026-01-17 13:35.11: Waiting for resource in pool OCluster
2026-01-17 13:35.11: Waiting for worker…
2026-01-17 13:35.11: Got resource from pool OCluster
Building on odawa.caelum.ci.dev
HEAD is now at c18e132 Bump softprops/action-gh-release from 2.3.3 to 2.5.0
HEAD is now at f1cce75 Upgrade crs-actions to v1.0.0-alpha.9

(from ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d)
2026-01-17 13:35.11 ---> using "8f757df45728effe507eca56c86e1525d6f8aad30b62b4a9b59eae9c6cde42fb" from cache

/: (comment debian-13-5.3_opam-2.5)

/: (user (uid 1000) (gid 1000))

/: (env CLICOLOR_FORCE 1)

/: (env OPAMCOLOR always)

/: (workdir /src)

/src: (run (shell "sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam"))
2026-01-17 13:35.12 ---> saved as "b04b528e62ea0538895a78a15a41e9f453d9f14477b7181a52d907c9b1c2f35a"

/src: (run (shell "opam init --reinit -ni"))
Configuring from /home/opam/.opamrc and then from built-in defaults.
Checking for available remotes: rsync and local, git.
  - you won't be able to use mercurial repositories unless you install the hg command on your system.
  - you won't be able to use darcs repositories unless you install the darcs command on your system.

This version of opam requires an update to the layout of /home/opam/.opam from version 2.0 to version 2.2, which can't be reverted.
You may want to back it up before going further.

Continue? [Y/n] y
[NOTE] The 'jobs' option was reset, its value was 71 and its new value will vary according to the current number of cores on your machine. You can restore the fixed value using:
           opam option jobs=71 --global
Format upgrade done.

<><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><>
[default] Initialised
2026-01-17 13:35.31 ---> saved as "bbf7aa515bbed8a5ca7725309b339923b9d8f46434fbf406906241fde3c6c50c"

/src: (run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
Linux 6.8.0-87-generic
The OCaml toplevel, version 5.3.0
2.5.0
2026-01-17 13:35.32 ---> saved as "e0988c899051b72033c726186015288d182396fe909b49168ddfc9dccbef1bd3"

/src: (workdir /src)

/src: (run (shell "sudo chown opam /src"))
2026-01-17 13:35.32 ---> saved as "cb572ce1b146de47b5ca5c1aabb25cc17821c4239558a2dbdc155e2668bedc8c"

/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
           (network host)
           (shell "cd ~/opam-repository && (git cat-file -e 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && git log --no-decorate -n1 --oneline && opam update -u"))
From https://github.com/ocaml/opam-repository
 * branch                  master     -> FETCH_HEAD
   16d9c0eb87..6bda456f94  master     -> origin/master
873cb18c37 Merge pull request #29216 from shonfeder/release-dune-3.21.0

<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
[default] synchronised from git+file:///home/opam/opam-repository

Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).
However, you may "opam upgrade" these packages explicitly at these versions (e.g. "opam upgrade ocaml.5.4.0"), which will ask permission to downgrade or uninstall the conflicting packages.
Nothing to do.
# To update the current shell environment, run: eval $(opam env)
2026-01-17 13:35.46 ---> saved as "b312ef370e55bac74e801cee487dfa58b2f84e3b456c9a9ba6dc8e67a8881a02"

/src: (copy (src dunolint.opam dunolint-tests.opam dunolint-lib.opam dunolint-lib-base.opam dunolint-dev.opam)
            (dst ./))
2026-01-17 13:35.46 ---> saved as "fe2faf165dd27a828921fd7b0ecb9db5984e1b69b356415826fc7524c8792118"

/src: (run (network host)
           (shell  "opam pin add -yn dunolint.dev './' && \
                  \nopam pin add -yn dunolint-tests.dev './' && \
                  \nopam pin add -yn dunolint-lib.dev './' && \
                  \nopam pin add -yn dunolint-lib-base.dev './' && \
                  \nopam pin add -yn dunolint-dev.dev './'"))
[dunolint.dev] synchronised (file:///src)
dunolint is now pinned to file:///src (version dev)
[NOTE] Package dunolint-tests does not exist in opam repositories registered in the current switch.
[dunolint-tests.dev] synchronised (file:///src)
dunolint-tests is now pinned to file:///src (version dev)
[dunolint-lib.dev] synchronised (file:///src)
dunolint-lib is now pinned to file:///src (version dev)
[dunolint-lib-base.dev] synchronised (file:///src)
dunolint-lib-base is now pinned to file:///src (version dev)
[NOTE] Package dunolint-dev does not exist in opam repositories registered in the current switch.
[dunolint-dev.dev] synchronised (file:///src)
dunolint-dev is now pinned to file:///src (version dev)
2026-01-17 13:35.52 ---> saved as "6702c4cfcae2562005d27982e6e00a26db9ebf898a45401c9f220cf69dfacdac"

/src: (run (network host)
           (shell "echo '(lang dune 3.0)' > './dune-project'"))
2026-01-17 13:35.52 ---> saved as "f1d02d800d834fc4fd5b21b5245fa3509dcd7161379a262fa086bff1920dbaf5"

/src: (env DEPS "astring.0.8.5 base.v0.17.3 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bin_prot.v0.17.0-1 bisect_ppx.2.8.3 bitv.2.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdlang.0.0.10 cmdlang-cmdliner-err-runner.0.0.16 cmdlang-stdlib-runner.0.0.10 cmdlang-to-cmdliner.0.0.10 cmdliner.1.3.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.1 cppo.1.8.0 csexp.1.5.2 dune.3.21.0 dune-build-info.3.21.0 dune-configurator.3.21.0 dyn.3.21.0 either.1.0.0 expect_test_helpers_core.v0.17.0 fieldslib.v0.17.0 file-rewriter.0.0.3 fix.20250919 fmt.0.11.0 fpath.0.7.3 fpath-base.0.4.0 fpath-sexp0.0.4.0 fs-io.3.21.0 gel.v0.17.0 int_repr.v0.17.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 loc.0.2.2 logs.0.10.0 mdx.2.5.1 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-version.4.0.3 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 ocamlformat.0.28.1 ocamlformat-lib.0.28.1 ocp-indent.1.9.0 octavius.1.2.2 ordering.3.21.0 pageantty.0.0.3 parsexp.v0.17.0 patdiff.v0.17.0 patience_diff.v0.17.0 pp.2.0.0 pplumbing.0.0.16 pplumbing-err.0.0.16 pplumbing-log.0.0.16 pplumbing-log-cli.0.0.16 pplumbing-pp-tty.0.0.16 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_bench.v0.17.0 ppx_bin_prot.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_custom_printf.v0.17.0 ppx_derivers.1.2.1 ppx_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.2 ppx_fields_conv.v0.17.0 ppx_fixed_literal.v0.17.0 ppx_globalize.v0.17.0 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_ignore_instrumentation.v0.17.0 ppx_inline_test.v0.17.0 ppx_jane.v0.17.0 ppx_js_style.v0.17.0 ppx_let.v0.17.0 ppx_log.v0.17.0 ppx_module_timer.v0.17.0 ppx_optcomp.v0.17.0 ppx_optional.v0.17.0 ppx_pipebang.v0.17.0 ppx_sexp_conv.v0.17.0 ppx_sexp_message.v0.17.0 ppx_sexp_value.v0.17.0 ppx_stable.v0.17.0 ppx_stable_witness.v0.17.0 ppx_string.v0.17.0 ppx_string_conv.v0.17.0 ppx_tydi.v0.17.0 ppx_typerep_conv.v0.17.0 ppx_variants_conv.v0.17.0 ppxlib.0.35.0 ppxlib_jane.v0.17.2 re.1.14.0 result.1.5 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 sexps-rewriter.0.0.3 spawn.v0.17.0 splittable_random.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 stdune.3.21.0 time_now.v0.17.0 timezone.v0.17.0 top-closure.3.21.0 topkg.1.1.1 typerep.v0.17.1 uopt.v0.17.0 uucp.17.0.0 uuseg.17.0.0 uutf.1.0.4 variantslib.v0.17.0 volgo.0.0.21 volgo-base.0.0.21 volgo-git-backend.0.0.21 volgo-git-unix.0.0.21 volgo-hg-backend.0.0.21 volgo-hg-unix.0.0.21 volgo-vcs.0.0.21")

/src: (env CI true)

/src: (env OCAMLCI true)

/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
           (network host)
           (shell "opam update --depexts && opam install --cli=2.5 --depext-only -y dunolint.dev dunolint-tests.dev dunolint-lib.dev dunolint-lib-base.dev dunolint-dev.dev $DEPS"))
+ /usr/bin/sudo "apt-get" "update"
- Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
- Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
- Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
- Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9670 kB]
- Get:5 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [96.1 kB]
- Fetched 9998 kB in 3s (3154 kB/s)
- Reading package lists...

<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
[dunolint.dev] synchronised (file:///src)
[dunolint-dev.dev] synchronised (file:///src)
[dunolint-lib.dev] synchronised (file:///src)
[dunolint-lib-base.dev] synchronised (file:///src)
[dunolint-tests.dev] synchronised (file:///src)

[NOTE] Package ocaml-options-vanilla is already installed (current version is 1).
[NOTE] Package ocaml-config is already installed (current version is 3).
[NOTE] Package ocaml-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml-base-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml is already installed (current version is 5.3.0).
[NOTE] Package base-unix is already installed (current version is base).
[NOTE] Package base-threads is already installed (current version is base).
[NOTE] Package base-nnp is already installed (current version is base).
[NOTE] Package base-effects is already installed (current version is base).
[NOTE] Package base-domains is already installed (current version is base).
[NOTE] Package base-bigarray is already installed (current version is base).
# To update the current shell environment, run: eval $(opam env)
2026-01-17 13:36.03 ---> saved as "71fb36a7aefcbfe161b95bc3da26a60b1bfb7915d4b1996f8133aa35149d962a"

/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
           (network host)
           (shell "opam install $DEPS"))
[NOTE] Package ocaml-options-vanilla is already installed (current version is 1).
[NOTE] Package ocaml-config is already installed (current version is 3).
[NOTE] Package ocaml-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml-base-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml is already installed (current version is 5.3.0).
[NOTE] Package base-unix is already installed (current version is base).
[NOTE] Package base-threads is already installed (current version is base).
[NOTE] Package base-nnp is already installed (current version is base).
[NOTE] Package base-effects is already installed (current version is base).
[NOTE] Package base-domains is already installed (current version is base).
[NOTE] Package base-bigarray is already installed (current version is base).
The following actions will be performed:
=== install 132 packages
  - install astring                     0.8.5
  - install base                        v0.17.3
  - install base_bigstring              v0.17.0
  - install base_quickcheck             v0.17.0
  - install bin_prot                    v0.17.0-1
  - install bisect_ppx                  2.8.3
  - install bitv                        2.1
  - install camlp-streams               5.0.1
  - install capitalization              v0.17.0
  - install cmdlang                     0.0.10
  - install cmdlang-cmdliner-err-runner 0.0.16
  - install cmdlang-stdlib-runner       0.0.10
  - install cmdlang-to-cmdliner         0.0.10
  - install cmdliner                    1.3.0
  - install core                        v0.17.1
  - install core_kernel                 v0.17.0
  - install core_unix                   v0.17.1
  - install cppo                        1.8.0
  - install csexp                       1.5.2
  - install dune                        3.21.0
  - install dune-build-info             3.21.0
  - install dune-configurator           3.21.0
  - install dyn                         3.21.0
  - install either                      1.0.0
  - install expect_test_helpers_core    v0.17.0
  - install fieldslib                   v0.17.0
  - install file-rewriter               0.0.3
  - install fix                         20250919
  - install fmt                         0.11.0
  - install fpath                       0.7.3
  - install fpath-base                  0.4.0
  - install fpath-sexp0                 0.4.0
  - install fs-io                       3.21.0
  - install gel                         v0.17.0
  - install int_repr                    v0.17.0
  - install jane-street-headers         v0.17.0
  - install jst-config                  v0.17.0
  - install loc                         0.2.2
  - install logs                        0.10.0
  - install mdx                         2.5.1
  - install menhir                      20250912
  - install menhirCST                   20250912
  - install menhirLib                   20250912
  - install menhirSdk                   20250912
  - install num                         1.6
  - install ocaml-compiler-libs         v0.17.0
  - install ocaml-version               4.0.3
  - install ocaml_intrinsics_kernel     v0.17.1
  - install ocamlbuild                  0.16.1
  - install ocamlfind                   1.9.8
  - install ocamlformat                 0.28.1
  - install ocamlformat-lib             0.28.1
  - install ocp-indent                  1.9.0
  - install octavius                    1.2.2
  - install ordering                    3.21.0
  - install pageantty                   0.0.3
  - install parsexp                     v0.17.0
  - install patdiff                     v0.17.0
  - install patience_diff               v0.17.0
  - install pp                          2.0.0
  - install pplumbing                   0.0.16
  - install pplumbing-err               0.0.16
  - install pplumbing-log               0.0.16
  - install pplumbing-log-cli           0.0.16
  - install pplumbing-pp-tty            0.0.16
  - install ppx_assert                  v0.17.0
  - install ppx_base                    v0.17.0
  - install ppx_bench                   v0.17.0
  - install ppx_bin_prot                v0.17.0
  - install ppx_cold                    v0.17.0
  - install ppx_compare                 v0.17.0
  - install ppx_custom_printf           v0.17.0
  - install ppx_derivers                1.2.1
  - install ppx_diff                    v0.17.0
  - install ppx_disable_unused_warnings v0.17.0
  - install ppx_enumerate               v0.17.0
  - install ppx_expect                  v0.17.2
  - install ppx_fields_conv             v0.17.0
  - install ppx_fixed_literal           v0.17.0
  - install ppx_globalize               v0.17.0
  - install ppx_hash                    v0.17.0
  - install ppx_here                    v0.17.0
  - install ppx_ignore_instrumentation  v0.17.0
  - install ppx_inline_test             v0.17.0
  - install ppx_jane                    v0.17.0
  - install ppx_js_style                v0.17.0
  - install ppx_let                     v0.17.0
  - install ppx_log                     v0.17.0
  - install ppx_module_timer            v0.17.0
  - install ppx_optcomp                 v0.17.0
  - install ppx_optional                v0.17.0
  - install ppx_pipebang                v0.17.0
  - install ppx_sexp_conv               v0.17.0
  - install ppx_sexp_message            v0.17.0
  - install ppx_sexp_value              v0.17.0
  - install ppx_stable                  v0.17.0
  - install ppx_stable_witness          v0.17.0
  - install ppx_string                  v0.17.0
  - install ppx_string_conv             v0.17.0
  - install ppx_tydi                    v0.17.0
  - install ppx_typerep_conv            v0.17.0
  - install ppx_variants_conv           v0.17.0
  - install ppxlib                      0.35.0
  - install ppxlib_jane                 v0.17.2
  - install re                          1.14.0
  - install result                      1.5
  - install sexp_pretty                 v0.17.0
  - install sexplib                     v0.17.0
  - install sexplib0                    v0.17.0
  - install sexps-rewriter              0.0.3
  - install spawn                       v0.17.0
  - install splittable_random           v0.17.0
  - install stdio                       v0.17.0
  - install stdlib-shims                0.3.0
  - install stdune                      3.21.0
  - install time_now                    v0.17.0
  - install timezone                    v0.17.0
  - install top-closure                 3.21.0
  - install topkg                       1.1.1
  - install typerep                     v0.17.1
  - install uopt                        v0.17.0
  - install uucp                        17.0.0
  - install uuseg                       17.0.0
  - install uutf                        1.0.4
  - install variantslib                 v0.17.0
  - install volgo                       0.0.21
  - install volgo-base                  0.0.21
  - install volgo-git-backend           0.0.21
  - install volgo-git-unix              0.0.21
  - install volgo-hg-backend            0.0.21
  - install volgo-hg-unix               0.0.21
  - install volgo-vcs                   0.0.21

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved astring.0.8.5  (cached)
-> retrieved base.v0.17.3  (cached)
-> retrieved base_bigstring.v0.17.0  (cached)
-> retrieved base_quickcheck.v0.17.0  (cached)
-> retrieved bin_prot.v0.17.0-1  (cached)
-> retrieved bisect_ppx.2.8.3  (cached)
-> retrieved bitv.2.1  (cached)
-> retrieved camlp-streams.5.0.1  (cached)
-> retrieved capitalization.v0.17.0  (cached)
-> retrieved cmdlang-cmdliner-err-runner.0.0.16, pplumbing.0.0.16, pplumbing-err.0.0.16, pplumbing-log.0.0.16, pplumbing-log-cli.0.0.16, pplumbing-pp-tty.0.0.16  (cached)
-> retrieved cmdlang.0.0.10, cmdlang-stdlib-runner.0.0.10, cmdlang-to-cmdliner.0.0.10  (cached)
-> retrieved cmdliner.1.3.0  (cached)
-> retrieved core.v0.17.1  (cached)
-> retrieved core_kernel.v0.17.0  (cached)
-> retrieved core_unix.v0.17.1  (cached)
-> retrieved cppo.1.8.0  (cached)
-> retrieved csexp.1.5.2  (cached)
-> retrieved either.1.0.0  (cached)
-> retrieved expect_test_helpers_core.v0.17.0  (cached)
-> retrieved fieldslib.v0.17.0  (cached)
-> retrieved file-rewriter.0.0.3, sexps-rewriter.0.0.3  (cached)
-> retrieved fix.20250919  (cached)
-> retrieved fmt.0.11.0  (cached)
-> retrieved fpath.0.7.3  (cached)
-> retrieved gel.v0.17.0  (cached)
-> retrieved fpath-base.0.4.0, fpath-sexp0.0.4.0  (cached)
-> retrieved int_repr.v0.17.0  (cached)
-> retrieved jane-street-headers.v0.17.0  (cached)
-> retrieved jst-config.v0.17.0  (cached)
-> retrieved loc.0.2.2  (cached)
-> retrieved logs.0.10.0  (cached)
-> retrieved mdx.2.5.1  (cached)
-> retrieved menhir.20250912, menhirCST.20250912, menhirLib.20250912, menhirSdk.20250912  (cached)
-> retrieved dune.3.21.0, dune-build-info.3.21.0, dune-configurator.3.21.0, dyn.3.21.0, fs-io.3.21.0, ordering.3.21.0, stdune.3.21.0, top-closure.3.21.0  (cached)
-> retrieved num.1.6  (cached)
-> retrieved ocaml-compiler-libs.v0.17.0  (cached)
-> retrieved ocaml-version.4.0.3  (cached)
-> retrieved ocaml_intrinsics_kernel.v0.17.1  (cached)
-> retrieved ocamlbuild.0.16.1  (cached)
-> retrieved ocamlfind.1.9.8  (cached)
-> installed cmdliner.1.3.0
-> retrieved ocp-indent.1.9.0  (cached)
-> retrieved octavius.1.2.2  (cached)
-> retrieved pageantty.0.0.3  (cached)
-> retrieved parsexp.v0.17.0  (cached)
-> retrieved ocamlformat.0.28.1, ocamlformat-lib.0.28.1  (cached)
-> retrieved patdiff.v0.17.0  (cached)
-> retrieved patience_diff.v0.17.0  (cached)
-> retrieved pp.2.0.0  (cached)
-> retrieved ppx_assert.v0.17.0  (cached)
-> retrieved ppx_base.v0.17.0  (cached)
-> retrieved ppx_bench.v0.17.0  (cached)
-> retrieved ppx_bin_prot.v0.17.0  (cached)
-> retrieved ppx_cold.v0.17.0  (cached)
-> retrieved ppx_compare.v0.17.0  (cached)
-> retrieved ppx_custom_printf.v0.17.0  (cached)
-> retrieved ppx_derivers.1.2.1  (cached)
-> retrieved ppx_diff.v0.17.0  (cached)
-> retrieved ppx_disable_unused_warnings.v0.17.0  (cached)
-> retrieved ppx_enumerate.v0.17.0  (cached)
-> retrieved ppx_fields_conv.v0.17.0  (cached)
-> retrieved ppx_expect.v0.17.2  (cached)
-> installed num.1.6
-> retrieved ppx_fixed_literal.v0.17.0  (cached)
-> retrieved ppx_globalize.v0.17.0  (cached)
-> retrieved ppx_hash.v0.17.0  (cached)
-> retrieved ppx_here.v0.17.0  (cached)
-> retrieved ppx_ignore_instrumentation.v0.17.0  (cached)
-> retrieved ppx_inline_test.v0.17.0  (cached)
-> retrieved ppx_jane.v0.17.0  (cached)
-> retrieved ppx_js_style.v0.17.0  (cached)
-> retrieved ppx_let.v0.17.0  (cached)
-> retrieved ppx_log.v0.17.0  (cached)
-> retrieved ppx_module_timer.v0.17.0  (cached)
-> retrieved ppx_optcomp.v0.17.0  (cached)
-> retrieved ppx_optional.v0.17.0  (cached)
-> retrieved ppx_pipebang.v0.17.0  (cached)
-> retrieved ppx_sexp_message.v0.17.0  (cached)
-> retrieved ppx_sexp_conv.v0.17.0  (cached)
-> retrieved ppx_sexp_value.v0.17.0  (cached)
-> retrieved ppx_stable.v0.17.0  (cached)
-> retrieved ppx_stable_witness.v0.17.0  (cached)
-> retrieved ppx_string.v0.17.0  (cached)
-> retrieved ppx_string_conv.v0.17.0  (cached)
-> retrieved ppx_tydi.v0.17.0  (cached)
-> retrieved ppx_typerep_conv.v0.17.0  (cached)
-> retrieved ppx_variants_conv.v0.17.0  (cached)
-> retrieved ppxlib_jane.v0.17.2  (cached)
-> retrieved result.1.5  (cached)
-> retrieved re.1.14.0  (cached)
-> retrieved sexp_pretty.v0.17.0  (cached)
-> retrieved sexplib.v0.17.0  (cached)
-> retrieved ppxlib.0.35.0  (cached)
-> retrieved sexplib0.v0.17.0  (cached)
-> retrieved spawn.v0.17.0  (cached)
-> retrieved splittable_random.v0.17.0  (cached)
-> retrieved stdio.v0.17.0  (cached)
-> retrieved stdlib-shims.0.3.0  (cached)
-> retrieved time_now.v0.17.0  (cached)
-> retrieved timezone.v0.17.0  (cached)
-> retrieved typerep.v0.17.1  (cached)
-> retrieved uopt.v0.17.0  (cached)
-> retrieved topkg.1.1.1  (cached)
-> retrieved uuseg.17.0.0  (cached)
-> retrieved uutf.1.0.4  (cached)
-> retrieved variantslib.v0.17.0  (cached)
-> retrieved uucp.17.0.0  (cached)
-> retrieved volgo.0.0.21, volgo-base.0.0.21, volgo-git-backend.0.0.21, volgo-git-unix.0.0.21, volgo-hg-backend.0.0.21, volgo-hg-unix.0.0.21, volgo-vcs.0.0.21  (cached)
-> installed ocamlfind.1.9.8
-> installed ocamlbuild.0.16.1
-> installed topkg.1.1.1
-> installed uutf.1.0.4
-> installed fmt.0.11.0
-> installed astring.0.8.5
-> installed fpath.0.7.3
-> installed logs.0.10.0
-> installed dune.3.21.0
-> installed bitv.2.1
-> installed camlp-streams.5.0.1
-> installed cmdlang.0.0.10
-> installed cppo.1.8.0
-> installed csexp.1.5.2
-> installed either.1.0.0
-> installed fix.20250919
-> installed jane-street-headers.v0.17.0
-> installed menhirCST.20250912
-> installed menhirLib.20250912
-> installed menhirSdk.20250912
-> installed ocaml-compiler-libs.v0.17.0
-> installed ocaml-version.4.0.3
-> installed ocaml_intrinsics_kernel.v0.17.1
-> installed ocp-indent.1.9.0
-> installed octavius.1.2.2
-> installed pp.2.0.0
-> installed ppx_derivers.1.2.1
-> installed re.1.14.0
-> installed result.1.5
-> installed sexplib0.v0.17.0
-> installed spawn.v0.17.0
-> installed stdlib-shims.0.3.0
-> installed cmdlang-stdlib-runner.0.0.10
-> installed cmdlang-to-cmdliner.0.0.10
-> installed fpath-sexp0.0.4.0
-> installed ordering.3.21.0
-> installed mdx.2.5.1
-> installed parsexp.v0.17.0
-> installed dune-build-info.3.21.0
-> installed fs-io.3.21.0
-> installed top-closure.3.21.0
-> installed dune-configurator.3.21.0
-> installed sexplib.v0.17.0
-> installed dyn.3.21.0
-> installed uucp.17.0.0
-> installed uuseg.17.0.0
-> installed stdune.3.21.0
-> installed loc.0.2.2
-> installed base.v0.17.3
-> installed file-rewriter.0.0.3
-> installed pplumbing-pp-tty.0.0.16
-> installed fieldslib.v0.17.0
-> installed variantslib.v0.17.0
-> installed fpath-base.0.4.0
-> installed sexps-rewriter.0.0.3
-> installed stdio.v0.17.0
-> installed pplumbing-log.0.0.16
-> installed pplumbing-err.0.0.16
-> installed cmdlang-cmdliner-err-runner.0.0.16
-> installed typerep.v0.17.1
-> installed pageantty.0.0.3
-> installed pplumbing-log-cli.0.0.16
-> installed pplumbing.0.0.16
-> installed volgo.0.0.21
-> installed volgo-hg-backend.0.0.21
-> installed volgo-git-backend.0.0.21
-> installed menhir.20250912
-> installed ppxlib.0.35.0
-> installed volgo-git-unix.0.0.21
-> installed volgo-hg-unix.0.0.21
-> installed ppx_optcomp.v0.17.0
-> installed ppxlib_jane.v0.17.2
-> installed volgo-vcs.0.0.21
-> installed ppx_tydi.v0.17.0
-> installed ppx_cold.v0.17.0
-> installed ppx_disable_unused_warnings.v0.17.0
-> installed ppx_here.v0.17.0
-> installed ppx_stable_witness.v0.17.0
-> installed ppx_typerep_conv.v0.17.0
-> installed ppx_variants_conv.v0.17.0
-> installed ppx_fields_conv.v0.17.0
-> installed ppx_stable.v0.17.0
-> installed ppx_enumerate.v0.17.0
-> installed ppx_globalize.v0.17.0
-> installed ppx_ignore_instrumentation.v0.17.0
-> installed ppx_pipebang.v0.17.0
-> installed ppx_fixed_literal.v0.17.0
-> installed ppx_js_style.v0.17.0
-> installed bisect_ppx.2.8.3
-> installed ppx_compare.v0.17.0
-> installed ppx_optional.v0.17.0
-> installed ppx_sexp_conv.v0.17.0
-> installed ppx_let.v0.17.0
-> installed ppx_hash.v0.17.0
-> installed ocamlformat-lib.0.28.1
-> installed ppx_assert.v0.17.0
-> installed ppx_sexp_message.v0.17.0
-> installed ppx_custom_printf.v0.17.0
-> installed ppx_sexp_value.v0.17.0
-> installed ppx_base.v0.17.0
-> installed ocamlformat.0.28.1
-> installed capitalization.v0.17.0
-> installed volgo-base.0.0.21
-> installed sexp_pretty.v0.17.0
-> installed jst-config.v0.17.0
-> installed bin_prot.v0.17.0-1
-> installed ppx_string.v0.17.0
-> installed time_now.v0.17.0
-> installed ppx_bin_prot.v0.17.0
-> installed ppx_string_conv.v0.17.0
-> installed ppx_module_timer.v0.17.0
-> installed ppx_inline_test.v0.17.0
-> installed ppx_bench.v0.17.0
-> installed ppx_expect.v0.17.2
-> installed splittable_random.v0.17.0
-> installed base_quickcheck.v0.17.0
-> installed ppx_log.v0.17.0
-> installed ppx_jane.v0.17.0
-> installed gel.v0.17.0
-> installed uopt.v0.17.0
-> installed int_repr.v0.17.0
-> installed base_bigstring.v0.17.0
-> installed ppx_diff.v0.17.0
-> installed core.v0.17.1
-> installed timezone.v0.17.0
-> installed expect_test_helpers_core.v0.17.0
-> installed patience_diff.v0.17.0
-> installed core_kernel.v0.17.0
-> installed core_unix.v0.17.1
-> installed patdiff.v0.17.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/5.3/share/emacs/site-lisp")
     (require 'ocp-indent)

   * for Vim, add this line to ~/.vimrc:
     set rtp^="/home/opam/.opam/5.3/share/ocp-indent/vim"
# To update the current shell environment, run: eval $(opam env)
2026-01-17 13:37.55 ---> saved as "5ee86e77171e0ba9d7639c8b9ed7103723cd5dea9f7f690a79ecf7fdde614229"

/src: (copy (src .) (dst /src))
2026-01-17 13:37.55 ---> saved as "cce80bc4fae039ff9a1f4de10c6e9356032f57722a99b2721e5ca23736da2fa4"

/src: (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
File "test/expect/test__autofmt.ml", line 1, characters 0-0:
(cd _build/.sandbox/7d4d7bce305b883e6b4c4e08a0673cce/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/expect/test__autofmt.ml test/expect/test__autofmt.ml.corrected)
------ test/expect/test__autofmt.ml
++++++ test/expect/test__autofmt.ml.corrected
File "test/expect/test__autofmt.ml", line 41, characters 0-1:
 |      Dunolint_cli.Private.Linter.maybe_autoformat_file ~previous_contents ~new_contents
 |    in
 |    print_endline fmt
 |  in
 |  (* When the previous contents is well formatted, the new contents gets
 |     formatted as well. *)
 |  test
 |    ~previous_contents:
 |      (String.lstrip
 |         {|
 |(lang dune 3.17)
 |
 |(name dunolint)
 ||})
 |    ~new_contents:"(lang    dune 3.17) (name dunolint)";
 |  [%expect
-|    {|
-|    (lang dune 3.17)
-|
-|    (name dunolint)
-|    |}];
+|    {| (lang    dune 3.17) (name dunolint) |}];
 |  (* If the previous contents is not formatted, then we do not autoformat the
 |     new one. This is a heuristic. *)
 |  test
 |    ~previous_contents:"(lang  dune 3.17) (name     dunolint)"
 |    ~new_contents:"(lang    dune 3.17) (name dunolint)";
 |  [%expect {| (lang    dune 3.17) (name dunolint) |}];
 |  (* This includes cases where the previous contents fails to autofmt. *)
 |  test
 |    ~previous_contents:"(lang  dune 3.17 invalid-file"
 |    ~new_contents:"(lang    dune 3.17) (name dunolint)";
 |  [%expect {| (lang    dune 3.17) (name dunolint) |}];
 |  ()
 |;;
File "test/cram/lint-dune-workspace-file.t", line 1, characters 0-0:
(cd _build/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/cram/lint-dune-workspace-file.t test/cram/lint-dune-workspace-file.t.corrected)
------ test/cram/lint-dune-workspace-file.t
++++++ test/cram/lint-dune-workspace-file.t.corrected
File "test/cram/lint-dune-workspace-file.t", line 22, characters 0-1:
 |  $ touch dune-workspace
 |
 |Test that dune-workspace files can be linted and formatted.
 |
 |  $ printf '(lang dune 3.17)\n' > dune-workspace
 |  $ dunolint tools lint-file dune-workspace
 |  (lang dune 3.17)
 |
 |Test formatting of dune-workspace files.
 |
 |  $ cat > dune-workspace <<'EOF'
 |  > (lang
 |  >  dune
 |  >  3.17)
 |  > EOF
 |  $ dunolint tools lint-file dune-workspace
-|  (lang dune 3.17)
+|  Error: Failed to format dune file:
+|  File "dune-workspace", line 1, characters 0-11:
+|  1 | (lang
+|      ^^^^^^^^^^^
+|  Error: Invalid first line, expected: (lang <lang> <version>)
+|  Exited 1
+|  [123]
 |
 |Formatting can be disabled.
 |
 |  $ cat > dune-workspace <<'EOF'
 |  > (lang
 |  >  dune
 |  >  3.17)
 |  > EOF
 |  $ dunolint tools lint-file dune-workspace --format-file=false
 |  (lang
 |   dune
 |   3.17)
 |
 |Test invalid dune version format.
 |
 |  $ printf '(lang dune invalid)\n' > dune-workspace
 |  $ dunolint tools lint-file dune-workspace
 |  File "dune-workspace", line 1, characters 11-18:
 |  1 | (lang dune invalid)
 |                 ^^^^^^^
 |  Error: Expected VERSION.MINOR format, got: "invalid".
-|  (lang dune invalid)
+|
+|    Error: Failed to format dune file:
+|  File "dune-workspace", line 1, characters 11-18:
+|  1 | (lang dune invalid)
+|                 ^^^^^^^
+|  Error: Invalid version. Version must be two numbers separated by a
+|  dot.
+|  Exited 1
 |  [123]
 |
 |  $ printf '(lang dune 3.INVALID)\n' > dune-workspace
 |  $ dunolint tools lint-file dune-workspace
 |  File "dune-workspace", line 1, characters 11-20:
 |  1 | (lang dune 3.INVALID)
 |                 ^^^^^^^^^
 |  Error: Invalid version format: "3.INVALID".
-|  (lang dune 3.INVALID)
+|
+|    Error: Failed to format dune file:
+|  File "dune-workspace", line 1, characters 11-20:
+|  1 | (lang dune 3.INVALID)
+|                 ^^^^^^^^^
+|  Error: Invalid version. Version must be two numbers separated by a
+|  dot.
+|  Exited 1
 |  [123]
 |
 |Test invalid lang stanza (not dune).
 |
 |  $ printf '(lang dunolint 1.0)\n' > dune-workspace
 |  $ dunolint tools lint-file dune-workspace
 |  File "dune-workspace", line 1, characters 6-14:
 |  1 | (lang dunolint 1.0)
 |            ^^^^^^^^
 |  Error: Expected (lang dune VERSION) format.
-|  (lang dunolint 1.0)
+|
+|    Error: Failed to format dune file:
+|  File "dune-workspace", line 1, characters 6-14:
+|  1 | (lang dunolint 1.0)
+|            ^^^^^^^^
+|  Error: Unknown language "dunolint".
+|  Exited 1
 |  [123]
 |
 |Test invalid lang stanza (missing middle constructor).
 |
 |  $ printf '(lang 3.17)\n' > dune-workspace
 |  $ dunolint tools lint-file dune-workspace
 |  File "dune-workspace", line 1, characters 0-11:
 |  1 | (lang 3.17)
 |      ^^^^^^^^^^^
 |  Error: Expected (lang dune VERSION) format.
-|  (lang 3.17)
+|
+|    Error: Failed to format dune file:
+|  File "dune-workspace", line 1, characters 0-11:
+|  1 | (lang 3.17)
+|      ^^^^^^^^^^^
+|  Error: Invalid first line, expected: (lang <lang> <version>)
+|  Exited 1
 |  [123]
 |
 |Test invalid sexp in dune-workspace files.
 |
 |  $ printf '(invalid sexp\n' > dune-workspace
 |  $ dunolint tools lint-file dune-workspace
 |  File "dune-workspace", line 2, characters 0-0:
 |  Error: unclosed parentheses at end of input
 |  [123]
 |
 |Test a complete dune-workspace file.
 |
 |  $ cat > dune-workspace <<'EOF'
 |  > (lang dune 3.17)
 |  > 
 |  > (context default)
File "test/dunolint/dune_linter/test__library.ml", line 1, characters 0-0:
(cd _build/.sandbox/70050349f24ee873cd4b67a1a564dd4f/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/dunolint/dune_linter/test__library.ml test/dunolint/dune_linter/test__library.ml.corrected)
------ test/dunolint/dune_linter/test__library.ml
++++++ test/dunolint/dune_linter/test__library.ml.corrected
File "test/dunolint/dune_linter/test__library.ml", line 793, characters 0-1:
 |    {|
 |    (Dunolinter.Handler.Enforce_failure (loc _)
 |     (condition (name (not (equals main)))))
 |    |}];
 |  test_fails [ name false_ ];
 |  [%expect {| (Dunolinter.Handler.Enforce_failure (loc _) (condition (name false))) |}];
 |  let init = {| (library (name my_lib)) |} in
 |  let test cond =
 |    let t = parse init in
 |    enforce_diff t cond
 |  in
 |  let test_fails cond =
 |    let t = parse init in
 |    require_does_raise (fun () -> enforce t cond)
 |  in
 |  test [ public_name (equals (Dune.Library.Public_name.v "public_lib")) ];
-|  [%expect
-|    {|
-|    -1,2 +1,3
-|      (library
-|    -| (name my_lib))
-|    +| (name my_lib)
-|    +| (public_name public_lib))
-|    |}];
+|  [%expect.unreachable];
-|  (* [is_prefix] and [is_suffix] cannot provide initial values - enforcement fails. *)
-|  test_fails [ public_name (is_prefix "prefix_") ];
-|  [%expect
-|    {|
-|    (Dunolinter.Handler.Enforce_failure (loc _)
-|     (condition (public_name (is_prefix prefix_))))
-|    |}];
+|  (* [is_prefix] and [is_suffix] cannot provide initial values - enforcement fails. *)
+|  test_fails [ public_name (is_prefix "prefix_") ];
+|  [%expect.unreachable];
-|  test_fails [ public_name (is_suffix "_suffix") ];
-|  [%expect
-|    {|
-|    (Dunolinter.Handler.Enforce_failure (loc _)
-|     (condition (public_name (is_suffix _suffix))))
-|    |}];
+|  test_fails [ public_name (is_suffix "_suffix") ];
+|  [%expect.unreachable];
-|  (* Package can also be added via enforce with equals. *)
-|  test [ package (equals (Dune.Package.Name.v "my-pkg")) ];
-|  [%expect
-|    {|
-|    -1,2 +1,3
-|      (library
-|    -| (name my_lib))
-|    +| (name my_lib)
-|    +| (package my-pkg))
-|    |}];
+|  (* Package can also be added via enforce with equals. *)
+|  test [ package (equals (Dune.Package.Name.v "my-pkg")) ];
+|  [%expect.unreachable];
-|  (* Package prefix/suffix predicates cannot provide initial values - enforcement fails. *)
-|  test_fails [ package (is_prefix "prefix-") ];
-|  [%expect
-|    {|
-|    (Dunolinter.Handler.Enforce_failure (loc _)
-|     (condition (package (is_prefix prefix-))))
-|    |}];
+|  (* Package prefix/suffix predicates cannot provide initial values - enforcement fails. *)
+|  test_fails [ package (is_prefix "prefix-") ];
+|  [%expect.unreachable];
-|  test_fails [ package (is_suffix "-suffix") ];
-|  [%expect
-|    {|
-|    (Dunolinter.Handler.Enforce_failure (loc _)
-|     (condition (package (is_suffix -suffix))))
-|    |}];
-|  ()
+|  test_fails [ package (is_suffix "-suffix") ];
+|  [%expect.unreachable];
+|  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5313) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60
+|  Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 786, characters 4-23
+|  Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 792, characters 2-73
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
 |
 |let%expect_test "enforce_failures" =
 |  (* This covers cases yielding enforce failures. *)
 |  let init = {| (library) |} in
 |  let test cond =
 |    let t = parse init in
 |    enforce t cond
 |  in
 |  (* Certain fields don't have heuristics in place for initializing a value if
 |     it isn't there. *)
 |  require_does_raise (fun () -> test [ has_field `name ]);
 |  [%expect
 |    {| (Dunolinter.Handler.Enforce_failure (loc _) (condition (has_field name))) |}];
 |  require_does_raise (fun () -> test [ has_field `public_name ]);
 |  [%expect
File "test/dunolint/dune_linter/test__library.ml", line 993, characters 0-1:
 |    {|
 |(library
 | (name my-lib)
 | (public_name my-public-lib)
 | (inline_tests)
 | (modes byte native)
 | (instrumentation (backend bisect_ppx))
 | (lint (pps ppx_linter))
 | (preprocess no_preprocessing))
 ||}
 |  in
 |  let test cond =
 |    let t = parse init in
 |    enforce_diff t cond
 |  in
 |  test [ not_ (has_field `inline_tests) ];
-|  [%expect
-|    {|
-|    -1,7 +1,6
-|      (library
-|       (name my-lib)
-|       (public_name my-public-lib)
-|    -| (inline_tests)
-|       (modes byte native)
-|       (instrumentation
-|        (backend bisect_ppx))
-|    |}];
+|  [%expect.unreachable];
 |  (* Test removing inline_tests with arguments. *)
 |  let init_with_args =
 |    {|
 |(library
 | (name my-lib)
 | (inline_tests (deps ./test_data))
 | (modes byte native))
 ||}
 |  in
 |  let t = parse init_with_args in
 |  enforce_diff t [ not_ (has_field `inline_tests) ];
-|  [%expect
-|    {|
-|    -1,5 +1,3
-|      (library
-|       (name my-lib)
-|    -| (inline_tests
-|    -|  (deps ./test_data))
-|       (modes byte native))
-|    |}];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `instrumentation) ];
-|  [%expect
-|    {|
-|    -3,8 +3,6
-|       (public_name my-public-lib)
-|       (inline_tests)
-|       (modes byte native)
-|    -| (instrumentation
-|    -|  (backend bisect_ppx))
-|       (lint
-|        (pps ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  test [ not_ (has_field `instrumentation) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `lint) ];
-|  [%expect
-|    {|
-|    -5,6 +5,4
-|       (modes byte native)
-|       (instrumentation
-|        (backend bisect_ppx))
-|    -| (lint
-|    -|  (pps ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  test [ not_ (has_field `lint) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `preprocess) ];
-|  [%expect
-|    {|
-|    -6,5 +6,4
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    -|  (pps ppx_linter))
-|    -| (preprocess no_preprocessing))
-|    +|  (pps ppx_linter)))
-|    |}];
+|  test [ not_ (has_field `preprocess) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `modes) ];
-|  [%expect
-|    {|
-|    -2,7 +2,6
-|       (name my-lib)
-|       (public_name my-public-lib)
-|       (inline_tests)
-|    -| (modes byte native)
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    |}];
+|  test [ not_ (has_field `modes) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `name) ];
-|  [%expect
-|    {|
-|    -1,5 +1,4
-|      (library
-|    -| (name my-lib)
-|       (public_name my-public-lib)
-|       (inline_tests)
-|       (modes byte native)
-|    |}];
+|  test [ not_ (has_field `name) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `public_name) ];
-|  [%expect
-|    {|
-|    -1,6 +1,5
-|      (library
-|       (name my-lib)
-|    -| (public_name my-public-lib)
-|       (inline_tests)
-|       (modes byte native)
-|       (instrumentation
-|    |}];
+|  test [ not_ (has_field `public_name) ];
+|  [%expect.unreachable];
 |  (* Test removing package field. *)
 |  let init_with_package =
 |    {|
 |(library
 | (name my-lib)
 | (package my-pkg)
 | (modes byte native))
 ||}
 |  in
 |  let t = parse init_with_package in
 |  enforce_diff t [ not_ (has_field `package) ];
-|  [%expect
-|    {|
-|    -1,4 +1,3
-|      (library
-|       (name my-lib)
-|    -| (package my-pkg)
-|       (modes byte native))
-|    |}];
-|  ()
+|  [%expect.unreachable];
+|  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5342) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60
+|  Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 990, characters 4-23
+|  Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 992, characters 2-41
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
 |
 |let%expect_test "positive_enforcement_with_existing_fields" =
 |  (* Test enforcement conditions when fields are already present. *)
 |  let init =
 |    {|
 |(library
 | (name my-lib)
 | (public_name my-public-lib)
 | (inline_tests)
 | (modes byte native)
 | (instrumentation (backend bisect_ppx))
 | (lint (pps ppx_linter))
 | (preprocess no_preprocessing))
 ||}
 |  in
 |  let test cond =
 |    let t = parse init in
 |    enforce_diff t cond
 |  in
 |  test [ has_field `name ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `public_name ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `inline_tests ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `modes ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `instrumentation ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `lint ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `preprocess ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  (* Test [has_field `package] with existing package field. *)
 |  let init_with_package =
 |    {|
 |(library
 | (name my-lib)
 | (package my-pkg)
 | (modes byte native))
 ||}
 |  in
 |  let t = parse init_with_package in
 |  enforce_diff t [ has_field `package ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5367) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60
+|  Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 1130, characters 4-23
+|  Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 1132, characters 2-26
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
 |
 |let%expect_test "field_condition_enforcement_with_existing_fields" =
 |  (* Test fields condition enforcement when fields are already present. *)
 |  let init =
 |    {|
 |(library
 | (name my-lib)
 | (public_name my-public-lib)
 | (modes byte native)
 | (instrumentation (backend bisect_ppx))
 | (lint (pps ppx_linter))
 | (preprocess no_preprocessing))
 ||}
 |  in
 |  let test cond =
 |    let t = parse init in
 |    enforce_diff t cond
 |  in
 |  test [ public_name (equals (Dune.Library.Public_name.v "new.name")) ];
 |  [%expect
 |    {|
 |    -1,6 +1,6
 |      (library
 |       (name my-lib)
 |    -| (public_name my-public-lib)
 |    +| (public_name new.name)
 |       (modes byte native)
 |       (instrumentation
 |        (backend bisect_ppx))
 |    |}];
 |  test [ public_name (is_prefix "lib."); public_name (is_suffix "-pub") ];
-|  [%expect
-|    {|
-|    -1,6 +1,6
-|      (library
-|       (name my-lib)
-|    -| (public_name my-public-lib)
-|    +| (public_name lib.my-public-lib-pub)
-|       (modes byte native)
-|       (instrumentation
-|        (backend bisect_ppx))
-|    |}];
+|  [%expect.unreachable];
-|  test [ instrumentation (backend (Dune.Instrumentation.Backend.Name.v "coverage")) ];
-|  [%expect
-|    {|
-|    -3,7 +3,7
-|       (public_name my-public-lib)
-|       (modes byte native)
-|       (instrumentation
-|    -|  (backend bisect_ppx))
-|    +|  (backend coverage))
-|       (lint
-|        (pps ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  test [ instrumentation (backend (Dune.Instrumentation.Backend.Name.v "coverage")) ];
+|  [%expect.unreachable];
-|  test [ lint (pps (pp (Dune.Pp.Name.v "ppx_deriving"))) ];
-|  [%expect
-|    {|
-|    -5,5 +5,5
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    -|  (pps ppx_linter))
-|    +|  (pps ppx_deriving ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  test [ lint (pps (pp (Dune.Pp.Name.v "ppx_deriving"))) ];
+|  [%expect.unreachable];
-|  test [ preprocess (pps (pp (Dune.Pp.Name.v "ppx_compare"))) ];
-|  [%expect
-|    {|
-|    -6,4 +6,5
-|        (backend bisect_ppx))
-|       (lint
-|        (pps ppx_linter))
-|    -| (preprocess no_preprocessing))
-|    +| (preprocess
-|    +|  (pps ppx_compare)))
-|    |}];
+|  test [ preprocess (pps (pp (Dune.Pp.Name.v "ppx_compare"))) ];
+|  [%expect.unreachable];
 |  (* Test package condition enforcement with existing package field. *)
 |  let init_with_package =
 |    {|
 |(library
 | (name my-lib)
 | (package old-pkg)
 | (modes byte native))
 ||}
 |  in
 |  let test_pkg cond =
 |    let t = parse init_with_package in
 |    enforce_diff t cond
 |  in
 |  test_pkg [ package (equals (Dune.Package.Name.v "new-pkg")) ];
-|  [%expect
-|    {|
-|    -1,4 +1,4
-|      (library
-|       (name my-lib)
-|    -| (package old-pkg)
-|    +| (package new-pkg)
-|       (modes byte native))
-|    |}];
+|  [%expect.unreachable];
-|  test_pkg [ package (is_prefix "prefix-"); package (is_suffix "-suffix") ];
-|  [%expect
-|    {|
-|    -1,4 +1,4
-|      (library
-|       (name my-lib)
-|    -| (package old-pkg)
-|    +| (package prefix-old-pkg-suffix)
-|       (modes byte native))
-|    |}];
-|  ()
+|  test_pkg [ package (is_prefix "prefix-"); package (is_suffix "-suffix") ];
+|  [%expect.unreachable];
+|  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5412) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60
+|  Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 1176, characters 4-23
+|  Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 1190, characters 2-73
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
 |
 |let%expect_test "if_present eval" =
 |  (* Test [if_present] evaluation behavior.
 |     When the field is absent, [if_present] evaluates to [True].
 |     When the field is present, it evaluates the inner condition. *)
 |  let _, t_no_public_name = parse {| (library (name mylib)) |} in
 |  let _, t_with_public_name =
 |    parse {| (library (name mylib) (public_name my-public-lib)) |}
 |  in
 |  let _, t_no_package = parse {| (library (name mylib)) |} in
 |  let _, t_with_package = parse {| (library (name mylib) (package my-pkg)) |} in
 |  (* [if_present] on absent public_name evaluates to True. *)
 |  Test_helpers.is_true
 |    (Dune_linter.Library.eval
 |       t_no_public_name
File "test/dunolint/dune_linter/test__executable.ml", line 1, characters 0-0:
(cd _build/.sandbox/70050349f24ee873cd4b67a1a564dd4f/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/dunolint/dune_linter/test__executable.ml test/dunolint/dune_linter/test__executable.ml.corrected)
------ test/dunolint/dune_linter/test__executable.ml
++++++ test/dunolint/dune_linter/test__executable.ml.corrected
File "test/dunolint/dune_linter/test__executable.ml", line 631, characters 0-1:
 |    enforce_diff t cond
 |  in
 |  test [ not_ (has_field `instrumentation) ];
 |  [%expect
 |    {|
 |    -1,8 +1,6
 |      (executable
 |       (name my-exe)
 |       (public_name my-cli)
 |    -| (instrumentation
 |    -|  (backend bisect_ppx))
 |       (lint
 |        (pps ppx_linter))
 |       (preprocess no_preprocessing))
 |    |}];
 |  test [ not_ (has_field `lint) ];
-|  [%expect
-|    {|
-|    -3,6 +3,4
-|       (public_name my-cli)
-|       (instrumentation
-|        (backend bisect_ppx))
-|    -| (lint
-|    -|  (pps ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `preprocess) ];
-|  [%expect
-|    {|
-|    -4,5 +4,4
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    -|  (pps ppx_linter))
-|    -| (preprocess no_preprocessing))
-|    +|  (pps ppx_linter)))
-|    |}];
+|  test [ not_ (has_field `preprocess) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `name) ];
-|  [%expect
-|    {|
-|    -1,5 +1,4
-|      (executable
-|    -| (name my-exe)
-|       (public_name my-cli)
-|       (instrumentation
-|        (backend bisect_ppx))
-|    |}];
+|  test [ not_ (has_field `name) ];
+|  [%expect.unreachable];
-|  test [ not_ (has_field `public_name) ];
-|  [%expect
-|    {|
-|    -1,6 +1,5
-|      (executable
-|       (name my-exe)
-|    -| (public_name my-cli)
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    |}];
-|  ()
+|  test [ not_ (has_field `public_name) ];
+|  [%expect.unreachable];
+|  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5385) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__executable.enforce_diff in file "test/dunolint/dune_linter/test__executable.ml", lines 297-298, characters 4-60
+|  Called from Dune_linter_test__Test__executable.(fun).test in file "test/dunolint/dune_linter/test__executable.ml" (inlined), line 615, characters 4-23
+|  Called from Dune_linter_test__Test__executable.(fun) in file "test/dunolint/dune_linter/test__executable.ml", line 630, characters 2-33
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
 |
 |let%expect_test "positive_enforcement_with_existing_fields" =
 |  (* Test enforcement conditions when fields are already present. *)
 |  let init =
 |    {|
 |(executable
 | (name my-exe)
 | (public_name my-cli)
 | (instrumentation (backend bisect_ppx))
 | (lint (pps ppx_linter))
 | (preprocess no_preprocessing))
 ||}
 |  in
 |  let test cond =
 |    let t = parse init in
 |    enforce_diff t cond
 |  in
 |  test [ has_field `name ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `public_name ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `instrumentation ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `lint ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  test [ has_field `preprocess ];
-|  [%expect {||}];
+|  [%expect.unreachable];
 |  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5401) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__executable.enforce_diff in file "test/dunolint/dune_linter/test__executable.ml", lines 292-293, characters 4-60
+|  Called from Dune_linter_test__Test__executable.(fun).test in file "test/dunolint/dune_linter/test__executable.ml" (inlined), line 690, characters 4-23
+|  Called from Dune_linter_test__Test__executable.(fun) in file "test/dunolint/dune_linter/test__executable.ml", line 692, characters 2-26
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
 |
 |let%expect_test "field_condition_enforcement_with_existing_fields" =
 |  (* Test fields condition enforcement when fields are already present. *)
 |  let init =
 |    {|
 |(executable
 | (name my-exe)
 | (public_name my-cli)
 | (instrumentation (backend bisect_ppx))
 | (lint (pps ppx_linter))
 | (preprocess no_preprocessing))
 ||}
 |  in
 |  let test cond =
 |    let t = parse init in
 |    enforce_diff t cond
 |  in
 |  test [ public_name (equals (Dune.Executable.Public_name.v "new-name")) ];
-|  [%expect
-|    {|
-|    -1,6 +1,6
-|      (executable
-|       (name my-exe)
-|    -| (public_name my-cli)
-|    +| (public_name new-name)
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    |}];
+|  [%expect.unreachable];
-|  test [ public_name (is_prefix "cli-"); public_name (is_suffix "-pub") ];
-|  [%expect
-|    {|
-|    -1,6 +1,6
-|      (executable
-|       (name my-exe)
-|    -| (public_name my-cli)
-|    +| (public_name cli-my-cli-pub)
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    |}];
+|  test [ public_name (is_prefix "cli-"); public_name (is_suffix "-pub") ];
+|  [%expect.unreachable];
-|  test [ instrumentation (backend (Dune.Instrumentation.Backend.Name.v "coverage")) ];
-|  [%expect
-|    {|
-|    -2,7 +2,7
-|       (name my-exe)
-|       (public_name my-cli)
-|       (instrumentation
-|    -|  (backend bisect_ppx))
-|    +|  (backend coverage))
-|       (lint
-|        (pps ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  test [ instrumentation (backend (Dune.Instrumentation.Backend.Name.v "coverage")) ];
+|  [%expect.unreachable];
-|  test [ lint (pps (pp (Dune.Pp.Name.v "ppx_deriving"))) ];
-|  [%expect
-|    {|
-|    -4,5 +4,5
-|       (instrumentation
-|        (backend bisect_ppx))
-|       (lint
-|    -|  (pps ppx_linter))
-|    +|  (pps ppx_deriving ppx_linter))
-|       (preprocess no_preprocessing))
-|    |}];
+|  test [ lint (pps (pp (Dune.Pp.Name.v "ppx_deriving"))) ];
+|  [%expect.unreachable];
-|  test [ preprocess (pps (pp (Dune.Pp.Name.v "ppx_compare"))) ];
-|  [%expect
-|    {|
-|    -5,4 +5,5
-|        (backend bisect_ppx))
-|       (lint
-|        (pps ppx_linter))
-|    -| (preprocess no_preprocessing))
-|    +| (preprocess
-|    +|  (pps ppx_compare)))
-|    |}];
-|  ()
+|  test [ preprocess (pps (pp (Dune.Pp.Name.v "ppx_compare"))) ];
+|  [%expect.unreachable];
+|  ()
+|[@@expect.uncaught_exn {|
+|  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+|     This is strongly discouraged as backtraces are fragile.
+|     Please change this test to not include a backtrace. *)
+|  ("Failed to format dune file:"
+|     "\027[1;31mError\027[0m: A running dune (pid: 5434) instance has locked the build directory. If\
+|    \nthis is not the case, please delete \"_build/.lock\"." "Exited 1")
+|  Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61
+|  Called from Dune_linter_test__Test__executable.enforce_diff in file "test/dunolint/dune_linter/test__executable.ml", lines 297-298, characters 4-60
+|  Called from Dune_linter_test__Test__executable.(fun).test in file "test/dunolint/dune_linter/test__executable.ml" (inlined), line 719, characters 4-23
+|  Called from Dune_linter_test__Test__executable.(fun) in file "test/dunolint/dune_linter/test__executable.ml", line 721, characters 2-74
+|  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+|  |}]
 |;;
File "test/cram/lint-file.t", line 1, characters 0-0:
(cd _build/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/cram/lint-file.t test/cram/lint-file.t.corrected)
------ test/cram/lint-file.t
++++++ test/cram/lint-file.t.corrected
File "test/cram/lint-file.t", line 119, characters 0-1:
 |code. This should be handled by the logic responsible for the editor
 |integration.
 |
 |  $ printf "(invalid sexp\n" | dunolint tools lint-file --filename=dune
 |  File "dune", line 2, characters 0-0:
 |  Error: unclosed parentheses at end of input
 |  [123]
 |
 |Test invalid lang stanza (missing middle constructor) for dune-project files.
 |
 |  $ printf '(lang 3.17)\n' > dune-project
 |  $ dunolint tools lint-file dune-project
 |  File "dune-project", line 1, characters 0-11:
 |  1 | (lang 3.17)
 |      ^^^^^^^^^^^
 |  Error: Expected (lang dune VERSION) format.
-|  (lang 3.17)
+|
+|    Error: Failed to format dune file:
+|  File "dune-project", line 1, characters 0-11:
+|  1 | (lang 3.17)
+|      ^^^^^^^^^^^
+|  Error: Invalid first line, expected: (lang <lang> <version>)
+|  Exited 1
 |  [123]
 |
 |Next we are going to test the command with config.
 |
 |The command may be passed a config file.
 |
 |  $ printf '(lang dunolint 1.0)\n' > dunolint
 |
 |  $ dunolint tools lint dune --config=dunolint
-|  (library
-|   (name mylib)
-|   (libraries a b c))
+|  Error: Failed to format dune file:
+|  File "dune-project", line 1, characters 0-11:
+|  1 | (lang 3.17)
+|      ^^^^^^^^^^^
+|  Error: Invalid first line, expected: (lang <lang> <version>)
+|  Exited 1
+|  [123]
 |
 |To make it easier to write in this test, we're generating an actual config from
 |an OCaml file.
 |
 |  $ ./lint_file_config_gen.exe --format=v1 > dunolint
 |
 |  $ dunolint tools lint dune
-|  (library
-|   (name mylib)
-|   (libraries a b c))
+|  Error: Failed to format dune file:
+|  File "dune-project", line 1, characters 0-11:
+|  1 | (lang 3.17)
+|      ^^^^^^^^^^^
+|  Error: Invalid first line, expected: (lang <lang> <version>)
+|  Exited 1
+|  [123]
 |
 |  $ cat dunolint
 |  ;; This file is generated by [bin/lint_file_gen_config.ml]. Do not edit!
 |  (lang dunolint 1.0)
 |  
 |  (skip_paths .git/*)
 |  
 |  (skip_paths _build/*)
 |  
 |  (rule
 |   (cond ((path (glob vendor/*)) return)
 |    (true (enforce (dune_project (name (equals foo)))))))
 |
 |  $ cat > dune-project <<EOF
 |  > (lang dune 3.17)
 |  > 
"/usr/bin/env" "bash" "-c" "opam exec -- dune build @install @check @runtest && rm -rf _build" failed with exit status 1
2026-01-17 13:38.02: Job failed: Failed: Build failed