2026-01-23 18:42.00: New job: test ocurrent/ocaml-docs-ci https://github.com/ocurrent/ocaml-docs-ci.git#refs/heads/staging (824c1a9e4c800ddb0efa212f4855a07e72a435d3) (linux-x86_64:(lint-fmt))Base: ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500ocamlformat version: version 0.27.0 (from opam)To reproduce locally:git clone --recursive "https://github.com/ocurrent/ocaml-docs-ci.git" -b "staging" && cd "ocaml-docs-ci" && git reset --hard 824c1a9ecat > Dockerfile <<'END-OF-DOCKERFILE'FROM ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500USER 1000:1000RUN 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 -uRUN opam depext -i duneWORKDIR /srcRUN opam depext -i ocamlformat=0.27.0COPY --chown=1000:1000 . /src/RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)END-OF-DOCKERFILEdocker build .END-REPRO-BLOCK2026-01-23 18:42.00: Using cache hint "ocurrent/ocaml-docs-ci-ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500-debian-13-4.08_opam-2.5-ocamlformat-873cb18c37b308713d11ad3894c4bb78d73fb3e7"2026-01-23 18:42.00: Using OBuilder spec:((from ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500)(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 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && 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-01-23 18:42.00: Waiting for resource in pool OCluster2026-01-23 18:42.00: Waiting for worker…2026-01-23 19:16.50: Got resource from pool OClusterBuilding on odawa.caelum.ci.devAll commits already cachedHEAD is now at 824c1a9 Update Dockerfile(from ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500)2026-01-23 19:17.29 ---> saved as "4c1f60dc0cc5644c6a4c05cf3315bdbf9cc478b70e443b212a1220385bab8bba"/: (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 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_HEADa6b2f19780..8e1b9a49e8 master -> origin/master873cb18c37 Merge pull request #29216 from shonfeder/release-dune-3.21.0<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>[default] Initialiseddefault (at git+file:///home/opam/opam-repository):[INFO] opam 2.1 and 2.2 include many performance and security improvements over 2.0; please consider upgrading (https://opam.ocaml.org/doc/Install.html)Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages.Nothing to do.# Run eval $(opam env) to update the current shell environment2026-01-23 19:18.22 ---> saved as "72a7cd495abee3d0659c15140c96fff42d035222fc9b794ad453f1a5292cd6f1"/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i dune"))# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian# No extra OS packages requirements found.# All required OS packages found.# Now letting opam install the packagesThe following actions will be performed:- install dune 3.21.0<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>[dune.3.21.0] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed dune.3.21.0Done.# Run eval $(opam env) to update the current shell environment2026-01-23 19:18.47 ---> saved as "3b5aee51bb4636e6dab95deb6944478b896d0b06f021712424b773f7d70073ac"/: (workdir /src)/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i ocamlformat=0.27.0"))# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian# No extra OS packages requirements found.# All required OS packages found.# Now letting opam install the packagesThe following actions will be performed:- install sexplib0 v0.14.0 [required by base]- install ocamlbuild 0.16.1 [required by fpath, astring, uuseg]- install cmdliner 1.3.0 [required by ocamlformat]- install either 1.0.0 [required by ocamlformat-lib]- install menhirLib 20250912 [required by ocamlformat-lib]- install csexp 1.5.2 [required by ocamlformat]- install dune-build-info 3.21.0 [required by ocamlformat-lib]- install camlp-streams 5.0.1 [required by ocamlformat-lib]- install seq base [required by re]- install menhirSdk 20250912 [required by ocamlformat-lib]- install fix 20250919 [required by ocamlformat-lib]- install menhirCST 20250912 [required by menhir]- install ocamlfind 1.9.8 [required by ocp-indent, astring, fpath, uuseg]- install ocaml-version 4.0.3 [required by ocamlformat-lib]- install dune-configurator 3.21.0 [required by base]- install re 1.11.0 [required by ocamlformat]- install menhir 20250912 [required by ocamlformat-lib]- install topkg 1.1.1 [required by fpath, astring, uuseg]- install ocp-indent 1.9.0 [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===== 28 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.0] found in cache[dune-configurator.3.21.0] found in cache[either.1.0.0] found in cache[fix.20250919] found in cache[fpath.0.7.3] found in cache[menhir.20250912] found in cache[menhirCST.20250912] found in cache[menhirLib.20250912] found in cache[menhirSdk.20250912] 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 cmdliner.1.3.0-> installed either.1.0.0-> installed fix.20250919-> installed menhirCST.20250912-> installed menhirLib.20250912-> installed menhirSdk.20250912-> installed ocaml-version.4.0.3-> installed re.1.11.0-> installed sexplib0.v0.14.0-> installed dune-build-info.3.21.0-> installed dune-configurator.3.21.0-> installed ocamlfind.1.9.8-> installed ocamlbuild.0.16.1-> installed ocp-indent.1.9.0-> installed base.v0.14.3-> installed topkg.1.1.1-> installed stdio.v0.14.0-> installed uutf.1.0.4-> installed astring.0.8.5-> installed menhir.20250912-> installed fpath.0.7.3-> installed uucp.15.0.0-> installed uuseg.15.0.0-> installed ocamlformat-lib.0.27.0-> installed ocamlformat.0.27.0Done.<><> ocp-indent.1.9.0 installed successfully ><><><><><><><><><><><><><><><><><>=> This package requires additional configuration for use in editors. Install package 'user-setup', or manually:* for Emacs, add these lines to ~/.emacs:(add-to-list 'load-path "/home/opam/.opam/4.08/share/emacs/site-lisp")(require 'ocp-indent)* for Vim, add this line to ~/.vimrc:set rtp^="/home/opam/.opam/4.08/share/ocp-indent/vim"# Run eval $(opam env) to update the current shell environment2026-01-23 19:20.15 ---> saved as "2ae43ae662b95641fa2bf73d980051b9145f20314d85ad107c6a3257b77df4e6"/src: (copy (src .) (dst /src/))2026-01-23 19:20.16 ---> saved as "dd540fc8b220d867cc60acebcf7fe930bab0ef02a7cc7ac4547ed8f7bb7714e7"/src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)"))File "src/solver/solver.mli", line 1, characters 0-0:diff --git a/_build/default/src/solver/solver.mli b/_build/default/src/solver/.formatted/solver.mliindex 14734ad..a9f7034 100644--- a/_build/default/src/solver/solver.mli+++ b/_build/default/src/solver/.formatted/solver.mli@@ -11,7 +11,8 @@ val test_fake : unit -> unit(** [test_fake ()] runs a test with fake packages, no git needed. *)val test_real : string -> unit-(** [test_real repo_path] runs a test with the real opam-repository at [repo_path]. *)+(** [test_real repo_path] runs a test with the real opam-repository at+ [repo_path]. *)val main : Git_unix.Store.Hash.t -> unit(** [main hash] runs a worker process that reads requests from stdin and writesFile "src/solver/git_context.ml", line 1, characters 0-0:diff --git a/_build/default/src/solver/git_context.ml b/_build/default/src/solver/.formatted/git_context.mlindex e805f22..728e10f 100644--- a/_build/default/src/solver/git_context.ml+++ b/_build/default/src/solver/.formatted/git_context.ml@@ -160,6 +160,6 @@ let read_packages store commit =OpamPackage.Name.Map.empty)let create ?(test = OpamPackage.Name.Set.empty)- ?(pins = OpamPackage.Name.Map.empty) ?(doc = false)- ~constraints ~env ~packages () =+ ?(pins = OpamPackage.Name.Map.empty) ?(doc = false) ~constraints ~env+ ~packages () ={ env; packages; pins; constraints; test; doc }File "src/solver/main.ml", line 1, characters 0-0:diff --git a/_build/default/src/solver/main.ml b/_build/default/src/solver/.formatted/main.mlindex d791ee1..fb6d7f5 100644--- a/_build/default/src/solver/main.ml+++ b/_build/default/src/solver/.formatted/main.ml@@ -79,10 +79,8 @@ let () =| [| _prog; "test" |] ->Solver.test(Git_unix.Store.Hash.of_hex "ac01ad6037c0bdcca9f67fe49cd54475b585f9b2")- | [| _prog; "test-fake" |] ->- Solver.test_fake ()- | [| _prog; "test-real"; repo_path |] ->- Solver.test_real repo_path+ | [| _prog; "test-fake" |] -> Solver.test_fake ()+ | [| _prog; "test-real"; repo_path |] -> Solver.test_real repo_path| args ->Fmt.failwith "Usage: ocaml-ci-solver (got %a)"Fmt.(array (quote string))File "src/lib/config.ml", line 1, characters 0-0:diff --git a/_build/default/src/lib/config.ml b/_build/default/src/lib/.formatted/config.mlindex 0a45c63..ad17dcb 100644--- a/_build/default/src/lib/config.ml+++ b/_build/default/src/lib/.formatted/config.ml@@ -3,7 +3,8 @@ open Cmdlinerlet random =In_channel.with_open_bin "/dev/urandom" (fun ch ->let str =- String.init 4 (fun _ -> In_channel.input_byte ch |> Option.get |> Char.chr)+ String.init 4 (fun _ ->+ In_channel.input_byte ch |> Option.get |> Char.chr)inBase64.encode_exn str)File "src/solver/opam_repository.ml", line 1, characters 0-0:diff --git a/_build/default/src/solver/opam_repository.ml b/_build/default/src/solver/.formatted/opam_repository.mlindex 05e9f3a..4492e3e 100644--- a/_build/default/src/solver/opam_repository.ml+++ b/_build/default/src/solver/.formatted/opam_repository.ml@@ -21,7 +21,8 @@ let open_store_at path =Git_unix.Store.v ~dotgit fpath >|= function| Ok x -> x| Error e ->- Fmt.failwith "Failed to open opam-repository at %s: %a" path Store.pp_error e+ Fmt.failwith "Failed to open opam-repository at %s: %a" path+ Store.pp_error elet clone () =match Unix.lstat clone_path withFile "src/lib/package.ml", line 1, characters 0-0:diff --git a/_build/default/src/lib/package.ml b/_build/default/src/lib/.formatted/package.mlindex 507c299..1d28214 100644--- a/_build/default/src/lib/package.ml+++ b/_build/default/src/lib/.formatted/package.ml@@ -117,12 +117,15 @@ end = structlet memo = ref OpamPackage.Map.empty inlet package_deps = OpamPackage.Map.of_list compile_deps inlet rec obtain ~visiting package =- if OpamPackage.Set.mem package visiting then begin+ if OpamPackage.Set.mem package visiting then (Printf.eprintf "CYCLE DETECTED: %s\n%!" (OpamPackage.to_string package);Printf.eprintf " Visiting stack: %s\n%!"- (OpamPackage.Set.elements visiting |> List.map OpamPackage.to_string |> String.concat " -> ");- failwith (Printf.sprintf "Dependency cycle detected at %s" (OpamPackage.to_string package))- end;+ (OpamPackage.Set.elements visiting+ |> List.map OpamPackage.to_string+ |> String.concat " -> ");+ failwith+ (Printf.sprintf "Dependency cycle detected at %s"+ (OpamPackage.to_string package)));match OpamPackage.Map.find_opt package !memo with| Some package -> package| None ->File "src/lib/voodoo.ml", line 1, characters 0-0:diff --git a/_build/default/src/lib/voodoo.ml b/_build/default/src/lib/.formatted/voodoo.mlindex 7a32bcb..abf31f8 100644--- a/_build/default/src/lib/voodoo.ml+++ b/_build/default/src/lib/.formatted/voodoo.ml@@ -58,10 +58,12 @@ module OdocDriver = struct@@ Misc.Cmd.list["sudo apt-get update";- Fmt.str "opam pin -ny sherlodoc.dev %s --with-version 3.1.0" sherlodoc_pin;+ Fmt.str "opam pin -ny sherlodoc.dev %s --with-version 3.1.0"+ sherlodoc_pin;Fmt.str- "opam pin -ny odoc-parser.dev --with-version 3.1.0 %s && opam pin -ny \- odoc-md.dev %s --with-version 3.1.0 && opam pin -ny odoc.dev %s --with-version 3.1.0"+ "opam pin -ny odoc-parser.dev --with-version 3.1.0 %s && \+ opam pin -ny odoc-md.dev %s --with-version 3.1.0 && opam \+ pin -ny odoc.dev %s --with-version 3.1.0"odoc_pin odoc_pin odoc_pin;"opam install -y odoc-md";"opam install -y odoc-driver sherlodoc";File "src/lib/valid_packages.ml", line 1, characters 0-0:diff --git a/_build/default/src/lib/valid_packages.ml b/_build/default/src/lib/.formatted/valid_packages.mlindex e0fde28..bc555d9 100644--- a/_build/default/src/lib/valid_packages.ml+++ b/_build/default/src/lib/.formatted/valid_packages.ml@@ -11,12 +11,15 @@ module Op = structmodule Value = structtype t = Package.Set.t+let digest v =let b = Buffer.create 1000000 in- Package.Set.elements v |> List.iter (fun p ->- Buffer.add_string b (Package.universe p |> Package.Universe.hash);- Buffer.add_string b (Package.opam p |> OpamPackage.name_to_string);- Buffer.add_string b (Package.opam p |> OpamPackage.version_to_string));+ Package.Set.elements v+ |> List.iter (fun p ->+ Buffer.add_string b (Package.universe p |> Package.Universe.hash);+ Buffer.add_string b (Package.opam p |> OpamPackage.name_to_string);+ Buffer.add_string b+ (Package.opam p |> OpamPackage.version_to_string));Digest.string (Buffer.contents b)endFile "src/solver/solver.ml", line 1, characters 0-0:diff --git a/_build/default/src/solver/solver.ml b/_build/default/src/solver/.formatted/solver.mlindex bc93853..f28e5ba 100644--- a/_build/default/src/solver/solver.ml+++ b/_build/default/src/solver/.formatted/solver.ml@@ -13,8 +13,10 @@ let env (vars : Worker.Vars.t) =let get_names = OpamFormula.fold_left (fun a (name, _) -> name :: a) []-let universes ?(post = false) ?(doc = false) ~packages (resolutions : OpamPackage.t list) =- Printf.eprintf "DEBUG universes: post=%b doc=%b resolutions=%d\n%!" post doc (List.length resolutions);+let universes ?(post = false) ?(doc = false) ~packages+ (resolutions : OpamPackage.t list) =+ Printf.eprintf "DEBUG universes: post=%b doc=%b resolutions=%d\n%!" post doc+ (List.length resolutions);let aux root =let name, version = (OpamPackage.name root, OpamPackage.version root) inlet opamfile : OpamFile.OPAM.t =@@ -23,15 +25,16 @@ let universes ?(post = false) ?(doc = false) ~packages (resolutions : OpamPackag|> OpamPackage.Name.Map.find name|> OpamPackage.Version.Map.find versionwith Not_found ->- Printf.eprintf "DEBUG: Package not found in packages map: %s\n%!" (OpamPackage.to_string root);+ Printf.eprintf "DEBUG: Package not found in packages map: %s\n%!"+ (OpamPackage.to_string root);raise Not_foundinlet deps =opamfile|> OpamFile.OPAM.depends|> OpamFilter.partial_filter_formula- (OpamFilter.deps_var_env ~build:true ~post ~test:false- ~doc ~dev_setup:false ~dev:false)+ (OpamFilter.deps_var_env ~build:true ~post ~test:false ~doc+ ~dev_setup:false ~dev:false)|> get_names|> OpamPackage.Name.Set.of_listin@@ -39,8 +42,8 @@ let universes ?(post = false) ?(doc = false) ~packages (resolutions : OpamPackagopamfile|> OpamFile.OPAM.depopts|> OpamFilter.partial_filter_formula- (OpamFilter.deps_var_env ~build:true ~post ~test:false- ~doc ~dev_setup:false ~dev:false)+ (OpamFilter.deps_var_env ~build:true ~post ~test:false ~doc+ ~dev_setup:false ~dev:false)|> get_names|> OpamPackage.Name.Set.of_listin@@ -113,11 +116,15 @@ let solve ~packages ~constraints ~root_pkgs (vars : Worker.Vars.t) =on odoc/documentation tools that create cycles (e.g., camlp-streams -> odoc -> odoc-parser -> camlp-streams) *)Printf.eprintf "DEBUG: Computing compile_universes...\n%!";let compile_universes = universes ~post:false ~doc:false ~packages pkgs in- Printf.eprintf "DEBUG: compile_universes done (%d entries)\n%!" (List.length compile_universes);+ Printf.eprintf "DEBUG: compile_universes done (%d entries)\n%!"+ (List.length compile_universes);(* link_universes: use extended packages, include all deps *)Printf.eprintf "DEBUG: Computing link_universes...\n%!";- let link_universes = universes ~post:true ~doc:true ~packages:extended pkgs in- Printf.eprintf "DEBUG: link_universes done (%d entries)\n%!" (List.length link_universes);+ let link_universes =+ universes ~post:true ~doc:true ~packages:extended pkgs+ in+ Printf.eprintf "DEBUG: link_universes done (%d entries)\n%!"+ (List.length link_universes);let map_universes univs =List.map(fun (pkg, str, univ) ->@@ -232,7 +239,8 @@ let main commit =(* Test with fake packages - no git needed *)let test_fake () =(* Helper to create a simple opam with unfiltered depends *)- let make_opam ?(depends = []) ?(doc_depends = []) ?(x_extra_doc_deps = []) () =+ let make_opam ?(depends = []) ?(doc_depends = []) ?(x_extra_doc_deps = []) ()+ =let empty = OpamFile.OPAM.empty inlet mk_dep name =let name = OpamPackage.Name.of_string name in@@ -245,7 +253,9 @@ let test_fake () =List.map(fun name ->let name = OpamPackage.Name.of_string name in- let filter = OpamTypes.FIdent ([], OpamVariable.of_string "with-doc", None) in+ let filter =+ OpamTypes.FIdent ([], OpamVariable.of_string "with-doc", None)+ inOpamFormula.Atom (name, OpamFormula.Atom (OpamTypes.Filter filter)))doc_depends|> OpamFormula.ands@@ -258,7 +268,10 @@ let test_fake () =if x_extra_doc_deps = [] then opamelselet ext_value =- let deps_str = String.concat " & " (List.map (fun s -> "\"" ^ s ^ "\"") x_extra_doc_deps) in+ let deps_str =+ String.concat " & "+ (List.map (fun s -> "\"" ^ s ^ "\"") x_extra_doc_deps)+ inOpamParser.FullPos.value_from_string deps_str "<test>"inlet extensions =@@ -295,19 +308,18 @@ let test_fake () =("base", "2.0", make_opam ());("doc-helper", "1.0", make_opam ());("extra-helper", "1.0", make_opam ());- ( "mylib", "1.0",- make_opam- ~depends:[ "base" ]- ~doc_depends:[ "doc-helper" ]- ~x_extra_doc_deps:[ "extra-helper" ]- () );+ ( "mylib",+ "1.0",+ make_opam ~depends:[ "base" ] ~doc_depends:[ "doc-helper" ]+ ~x_extra_doc_deps:[ "extra-helper" ] () );]inlet constraints = OpamPackage.Name.Map.empty inlet root_pkgs = [ OpamPackage.Name.of_string "mylib" ] inPrintf.printf "=== Testing two-phase solve with fake packages ===\n%!";- Printf.printf "Testing both {with-doc} filtered deps AND x-extra-doc-deps extension\n%!";+ Printf.printf+ "Testing both {with-doc} filtered deps AND x-extra-doc-deps extension\n%!";(* First solve: no doc deps *)let context =@@ -318,7 +330,7 @@ let test_fake () =| Error e ->Printf.printf "First solve failed: %s\n" (Solver.diagnostics e);exit 1- | Ok sels ->+ | Ok sels -> (let pkgs = Solver.packages_of_result sels inPrintf.printf "\n[1] First solve (no with-doc deps):\n%!";List.iter (fun p -> Printf.printf " %s\n" (OpamPackage.to_string p)) pkgs;@@ -334,10 +346,13 @@ let test_fake () =List.exists (fun p -> OpamPackage.name_to_string p = "doc-helper") pkgsinlet has_extra_helper =- List.exists (fun p -> OpamPackage.name_to_string p = "extra-helper") pkgs+ List.exists+ (fun p -> OpamPackage.name_to_string p = "extra-helper")+ pkgsinif has_doc_helper || has_extra_helper then (- Printf.printf "FAILURE: First solve should not include doc/extra helpers\n%!";+ Printf.printf+ "FAILURE: First solve should not include doc/extra helpers\n%!";exit 1);(* Use extended packages (processes x-extra-doc-deps) *)@@ -361,21 +376,23 @@ let test_fake () =~constraints ~pins ~doc:trueinlet extended_result = Solver.solve extended_context root_pkgs in- (match extended_result with+ match extended_result with| Error e ->- Printf.printf "Extended solve failed: %s\n%!"- (Solver.diagnostics e);+ Printf.printf "Extended solve failed: %s\n%!" (Solver.diagnostics e);exit 1| Ok extended_sels ->let extended_pkgs = Solver.packages_of_result extended_sels in- Printf.printf "\n[2] Extended solve (doc=true, post=true, with pins):\n%!";+ Printf.printf+ "\n[2] Extended solve (doc=true, post=true, with pins):\n%!";List.iter(fun p -> Printf.printf " %s\n" (OpamPackage.to_string p))extended_pkgs;(* Verify base version is still the same (pinned) *)let extended_base_pkg =- List.find (fun p -> OpamPackage.name_to_string p = "base") extended_pkgs+ List.find+ (fun p -> OpamPackage.name_to_string p = "base")+ extended_pkgsinlet base_version_preserved =OpamPackage.Version.equal@@ -392,16 +409,23 @@ let test_fake () =extra;let has_doc_helper =- List.exists (fun p -> OpamPackage.name_to_string p = "doc-helper") extra+ List.exists+ (fun p -> OpamPackage.name_to_string p = "doc-helper")+ extrainlet has_extra_helper =- List.exists (fun p -> OpamPackage.name_to_string p = "extra-helper") extra+ List.exists+ (fun p -> OpamPackage.name_to_string p = "extra-helper")+ extrainPrintf.printf "\n[4] Results:\n%!";- Printf.printf " Base version preserved (pinning works): %b\n%!" base_version_preserved;- Printf.printf " doc-helper added ({doc} filter works): %b\n%!" has_doc_helper;- Printf.printf " extra-helper added (x-extra-doc-deps works): %b\n%!" has_extra_helper;+ Printf.printf " Base version preserved (pinning works): %b\n%!"+ base_version_preserved;+ Printf.printf " doc-helper added ({doc} filter works): %b\n%!"+ has_doc_helper;+ Printf.printf " extra-helper added (x-extra-doc-deps works): %b\n%!"+ has_extra_helper;if base_version_preserved && has_doc_helper && has_extra_helper then (Printf.printf "\nSUCCESS: Both mechanisms work!\n%!";@@ -435,9 +459,7 @@ let test_real repo_path =(OpamPackage.Name.Map.cardinal packages);(* Test with odoc.3.1.0 which has x-extra-doc-deps *)- let root_pkgs =- List.map OpamPackage.Name.of_string [ "odoc" ]- in+ let root_pkgs = List.map OpamPackage.Name.of_string [ "odoc" ] inlet constraints =[ ("odoc", `Eq, "3.1.0"); ("ocaml", `Geq, "5.2.0") ]|> List.map (fun (name, rel, version) ->@@ -468,7 +490,9 @@ let test_real repo_path =result.compile_universesinlet link_pkgs =- List.find_opt (fun (name, _, _) -> name = "odoc.3.1.0") result.link_universes+ List.find_opt+ (fun (name, _, _) -> name = "odoc.3.1.0")+ result.link_universesin(match compile_pkgs with| Some (_, _, deps) ->@@ -492,17 +516,31 @@ let test_real repo_path =let extra_in_link =List.filter(fun name ->- List.exists (fun dep -> String.sub dep 0 (min (String.length name) (String.length dep)) = name) link_deps- && not (List.exists (fun dep -> String.sub dep 0 (min (String.length name) (String.length dep)) = name) compile_deps))+ List.exists+ (fun dep ->+ String.sub dep 0 (min (String.length name) (String.length dep))+ = name)+ link_deps+ && not+ (List.exists+ (fun dep ->+ String.sub dep 0+ (min (String.length name) (String.length dep))+ = name)+ compile_deps))expected_extrain- Printf.printf "\nExtra packages in link but not compile (from x-extra-doc-deps):\n%!";+ Printf.printf+ "\nExtra packages in link but not compile (from x-extra-doc-deps):\n%!";List.iter (fun p -> Printf.printf " %s\n%!" p) extra_in_link;if List.length extra_in_link >= 2 then (- Printf.printf "\nSUCCESS: x-extra-doc-deps packages found in link universe!\n%!";+ Printf.printf+ "\nSUCCESS: x-extra-doc-deps packages found in link universe!\n%!";exit 0)else (- Printf.printf "\nNote: Some x-extra-doc-deps packages may not be available.\n%!";- Printf.printf "Check if odoc-driver, sherlodoc, odig exist in the repo.\n%!";+ Printf.printf+ "\nNote: Some x-extra-doc-deps packages may not be available.\n%!";+ Printf.printf+ "Check if odoc-driver, sherlodoc, odig exist in the repo.\n%!";exit 0)File "src/lib/prep.ml", line 1, characters 0-0:diff --git a/_build/default/src/lib/prep.ml b/_build/default/src/lib/.formatted/prep.mlindex 89e1c0b..a6793be 100644--- a/_build/default/src/lib/prep.ml+++ b/_build/default/src/lib/.formatted/prep.ml@@ -496,7 +496,9 @@ module Prep = structinHashtbl.hash (Buffer.contents buf)in- let tools_digest = Spec.to_spec tools_base |> Digest.string |> Digest.to_hex in+ let tools_digest =+ Spec.to_spec tools_base |> Digest.string |> Digest.to_hex+ inFmt.str "%s\n%s\n%s\n%s\n%d\n" prep_version (Package.digest prep)(Package.digest prep) tools_digest opamfiles_hashenddune build @fmt failed"/usr/bin/env" "bash" "-c" "opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)" failed with exit status 22026-01-23 19:20.18: Job failed: Failed: Build failed