2026-03-02 11:01.22: New job: test ocaml-ppx/ppxlib https://github.com/ocaml-ppx/ppxlib.git#refs/pull/629/head (51fb44d0bd133b6658a939ee098b9a09c78df740) (linux-x86_64:(lint-fmt))Base: ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7ocamlformat version: version 0.28.1 (from opam)To reproduce locally:git clone --recursive "https://github.com/ocaml-ppx/ppxlib.git" && cd "ppxlib" && git fetch origin "refs/pull/629/head" && git reset --hard 51fb44d0cat > Dockerfile <<'END-OF-DOCKERFILE'FROM ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7USER 1000:1000RUN cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -uRUN opam depext -i duneWORKDIR /srcRUN opam depext -i ocamlformat=0.28.1COPY --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-03-02 11:01.22: Using cache hint "ocaml-ppx/ppxlib-ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7-debian-13-4.08_opam-2.5-ocamlformat-302e116c4009da2f5a31c350a57c8b3c9b27289e"2026-03-02 11:01.22: Using OBuilder spec:((from ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7)(user (uid 1000) (gid 1000))(run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u"))(run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i dune"))(workdir /src)(run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i ocamlformat=0.28.1"))(copy (src .) (dst /src/))(run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)")))2026-03-02 11:01.22: Waiting for resource in pool OCluster2026-03-02 11:01.22: Waiting for worker…2026-03-02 11:01.44: Got resource from pool OClusterBuilding on odawa.caelum.ci.devAll commits already cachedHEAD is now at 51fb44d0 Add support for 5.4 bivariant type parameters in type declaration(from ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7)2026-03-02 11:02.15 ---> saved as "8e880d54b82285cc07797680056d2282ee7dd8d645150afdce9c0dfbe68786cc"/: (user (uid 1000) (gid 1000))/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u"))From https://github.com/ocaml/opam-repository* branch master -> FETCH_HEAD340ee6fd1f..f7006d12f1 master -> origin/master302e116c40 Merge pull request #29374 from shonfeder/release-dune-3.21.1<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>[default] Initialiseddefault (at git+file:///home/opam/opam-repository):[INFO] opam 2.1 and 2.2 include many performance and security improvements over 2.0; please consider upgrading (https://opam.ocaml.org/doc/Install.html)Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages.Nothing to do.# Run eval $(opam env) to update the current shell environment2026-03-02 11:03.07 ---> saved as "b08ff0ee2b029d47ebd63fda058aa6322a9ef2a1ca63d0b41e317156fad9ff84"/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i dune"))# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian# No extra OS packages requirements found.# All required OS packages found.# Now letting opam install the packagesThe following actions will be performed:- install dune 3.21.1<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>[dune.3.21.1] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed dune.3.21.1Done.# Run eval $(opam env) to update the current shell environment2026-03-02 11:03.35 ---> saved as "ecc6dc342ae71659e951fc3d7f3b0f8bae5f117e98a01e439731b1eb512382b0"/: (workdir /src)/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))(network host)(shell "opam depext -i ocamlformat=0.28.1"))# 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 either 1.0.0 [required by ocamlformat-lib]- install menhirLib 20260209 [required by ocamlformat-lib]- install dune-build-info 3.21.1 [required by ocamlformat-lib]- install csexp 1.5.2 [required by ocamlformat]- install menhirSdk 20260209 [required by ocamlformat-lib]- install menhirGLR 20260209 [required by menhir]- install camlp-streams 5.0.1 [required by ocamlformat-lib]- install seq base [required by re]- install fix 20250919 [required by ocamlformat-lib]- install ocamlfind 1.9.8 [required by ocp-indent, astring, fpath, uuseg]- install ocaml-version 4.0.3 [required by ocamlformat-lib]- install cmdliner 2.1.0 [required by ocamlformat]- install menhirCST 20260209 [required by menhir]- install dune-configurator 3.21.1 [required by base]- install re 1.11.0 [required by ocamlformat]- install topkg 1.1.1 [required by fpath, astring, uuseg]- install ocp-indent 1.9.0 [required by ocamlformat-lib]- install menhir 20260209 [required by ocamlformat-lib]- install base v0.14.3 [required by ocamlformat-lib]- install uutf 1.0.4 [required by ocamlformat-lib]- install astring 0.8.5 [required by ocamlformat-lib]- install stdio v0.14.0 [required by ocamlformat-lib]- install uucp 15.0.0 [required by uuseg]- install fpath 0.7.3 [required by ocamlformat-lib]- install uuseg 15.0.0 [required by ocamlformat-lib]- install ocamlformat-lib 0.28.1 [required by ocamlformat]- install ocamlformat 0.28.1===== 29 to install =====<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>[astring.0.8.5] found in cache[base.v0.14.3] found in cache[camlp-streams.5.0.1] found in cache[cmdliner.2.1.0] found in cache[csexp.1.5.2] found in cache[dune-build-info.3.21.1] found in cache[dune-configurator.3.21.1] found in cache[either.1.0.0] found in cache[fix.20250919] found in cache[fpath.0.7.3] found in cache[menhir.20260209] found in cache[menhirCST.20260209] found in cache[menhirGLR.20260209] found in cache[menhirLib.20260209] found in cache[menhirSdk.20260209] found in cache[ocaml-version.4.0.3] found in cache[ocamlbuild.0.16.1] found in cache[ocamlfind.1.9.8] found in cache[ocamlformat.0.28.1] found in cache[ocamlformat-lib.0.28.1] found in cache[ocp-indent.1.9.0] found in cache[re.1.11.0] found in cache[sexplib0.v0.14.0] found in cache[stdio.v0.14.0] found in cache[topkg.1.1.1] found in cache[uucp.15.0.0] found in cache[uuseg.15.0.0] found in cache[uutf.1.0.4] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed seq.base-> installed camlp-streams.5.0.1-> installed csexp.1.5.2-> installed either.1.0.0-> installed fix.20250919-> installed cmdliner.2.1.0-> installed menhirCST.20260209-> installed menhirGLR.20260209-> installed menhirLib.20260209-> installed menhirSdk.20260209-> installed ocaml-version.4.0.3-> installed re.1.11.0-> installed sexplib0.v0.14.0-> installed dune-build-info.3.21.1-> installed dune-configurator.3.21.1-> installed ocamlfind.1.9.8-> installed ocamlbuild.0.16.1-> installed ocp-indent.1.9.0-> installed menhir.20260209-> 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 fpath.0.7.3-> installed uucp.15.0.0-> installed uuseg.15.0.0-> installed ocamlformat-lib.0.28.1-> installed ocamlformat.0.28.1Done.<><> 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-03-02 11:04.24 ---> saved as "5bd5c38c9bd7c6e28df7f0a29ad6b8aecee5d6d63694a0a64c17b9eabec41dcd"/src: (copy (src .) (dst /src/))2026-03-02 11:04.24 ---> saved as "b313fe87d59e279cb5e06d0b83a37c848f1193e85db6c3e5ad6e8ef669e285a3"/src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)"))File "astlib/encoding_504.mli", line 1, characters 0-0:diff --git a/_build/default/astlib/encoding_504.mli b/_build/default/astlib/.formatted/encoding_504.mliindex f38c38f..8264e4d 100644--- a/_build/default/astlib/encoding_504.mli+++ b/_build/default/astlib/.formatted/encoding_504.mli@@ -31,18 +31,15 @@ module To_503 : sigloc:Location.t -> payload -> (string option * pattern) list * closed_flagval encode_bivariant_param :- core_type -> injectivity ->- core_type * (variance * injectivity)+ core_type -> injectivity -> core_type * (variance * injectivity)val decode_bivariant_param :- (core_type * (variance * injectivity)) ->- (core_type * injectivity) option+ core_type * (variance * injectivity) -> (core_type * injectivity) optionval encode_bivariant_pstr_type :loc:Location.t -> rec_flag -> type_declaration list -> structure_item_desc- val decode_bivariant_pstr :- loc:Location.t -> payload -> structure_item_desc+ val decode_bivariant_pstr : loc:Location.t -> payload -> structure_item_descendmodule To_502 : sigFile "astlib/stdlib0.ml", line 1, characters 0-0:diff --git a/_build/default/astlib/stdlib0.ml b/_build/default/astlib/.formatted/stdlib0.mlindex 8a88d3c..f6ebc78 100644--- a/_build/default/astlib/stdlib0.ml+++ b/_build/default/astlib/.formatted/stdlib0.ml@@ -37,8 +37,8 @@ module List = structlet without_first l ~pred =let rec aux seen = function| [] -> None- | hd::tl when pred hd -> Some (List.rev_append seen tl)- | hd::tl -> aux (hd::seen) tl+ | hd :: tl when pred hd -> Some (List.rev_append seen tl)+ | hd :: tl -> aux (hd :: seen) tlinaux [] lendFile "astlib/encoding_504.ml", line 1, characters 0-0:diff --git a/_build/default/astlib/encoding_504.ml b/_build/default/astlib/.formatted/encoding_504.mlindex 81b5d60..13f6061 100644--- a/_build/default/astlib/encoding_504.ml+++ b/_build/default/astlib/.formatted/encoding_504.ml@@ -363,48 +363,43 @@ endmodule To_503 = structinclude Make (Ast_503_arg)-open Ast_503.Asttypesopen Ast_503.Parsetreelet encode_bivariant_param typ inj =- let loc = {typ.ptyp_loc with Location.loc_ghost = true} in+ let loc = { typ.ptyp_loc with Location.loc_ghost = true } inlet attr =- { attr_name = {txt = Ext_name.bivariant_param; loc}- ; attr_payload = PStr []- ; attr_loc = loc+ {+ attr_name = { txt = Ext_name.bivariant_param; loc };+ attr_payload = PStr [];+ attr_loc = loc;}in- ({typ with ptyp_attributes = attr::typ.ptyp_attributes}, (NoVariance, inj))+ ( { typ with ptyp_attributes = attr :: typ.ptyp_attributes },+ (NoVariance, inj) )let decode_bivariant_param (typ, (var, inj)) =let ptyp_attributes =- List.without_first typ.ptyp_attributes- ~pred:- (fun attr -> String.equal attr.attr_name.txt Ext_name.bivariant_param)+ List.without_first typ.ptyp_attributes ~pred:(fun attr ->+ String.equal attr.attr_name.txt Ext_name.bivariant_param)in- match ptyp_attributes, var with- | Some ptyp_attributes, NoVariance -> Some ({typ with ptyp_attributes}, inj)+ match (ptyp_attributes, var) with+ | Some ptyp_attributes, NoVariance ->+ Some ({ typ with ptyp_attributes }, inj)| None, _ -> None- | Some _, _ ->- invalid_encoding ~loc:typ.ptyp_loc "bivariant type parameter"+ | Some _, _ -> invalid_encoding ~loc:typ.ptyp_loc "bivariant type parameter"let encode_bivariant_pstr_type ~loc rec_flag tds =- let loc = {loc with Location.loc_ghost = true} in+ let loc = { loc with Location.loc_ghost = true } inlet ext =- ( {txt = Ext_name.bivariant_pstr; loc}- , PStr- [ { pstr_loc = loc- ; pstr_desc = Pstr_type (rec_flag, tds)- }- ]- )+ ( { txt = Ext_name.bivariant_pstr; loc },+ PStr [ { pstr_loc = loc; pstr_desc = Pstr_type (rec_flag, tds) } ] )inPstr_extension (ext, [])let decode_bivariant_pstr ~loc payload =match payload with- | PStr [{pstr_desc = (Pstr_type _) as x; _}] -> x+ | PStr [ { pstr_desc = Pstr_type _ as x; _ } ] -> x| _ -> invalid_encoding ~loc "bivariant structure_item"endFile "astlib/migrate_503_504.ml", line 1, characters 0-0:diff --git a/_build/default/astlib/migrate_503_504.ml b/_build/default/astlib/.formatted/migrate_503_504.mlindex 7e26db4..2e18b75 100644--- a/_build/default/astlib/migrate_503_504.ml+++ b/_build/default/astlib/.formatted/migrate_503_504.ml@@ -544,7 +544,7 @@ and copy_structure : Ast_503.Parsetree.structure -> Ast_504.Parsetree.structureand copy_structure_item :Ast_503.Parsetree.structure_item -> Ast_504.Parsetree.structure_item =fun { Ast_503.Parsetree.pstr_desc; Ast_503.Parsetree.pstr_loc } ->- let loc = copy_location pstr_loc in+ let loc = copy_location pstr_loc in{Ast_504.Parsetree.pstr_desc =copy_structure_item_desc_with_loc ~loc pstr_desc;@@ -585,8 +585,8 @@ and copy_structure_item_desc_with_loc ~loc :Ast_504.Parsetree.Pstr_include (copy_include_declaration x0)| Ast_503.Parsetree.Pstr_attribute x0 ->Ast_504.Parsetree.Pstr_attribute (copy_attribute x0)- | Ast_503.Parsetree.Pstr_extension (({txt; _}, payload), [])- when String.equal txt Encoding_504.Ext_name.bivariant_pstr ->+ | Ast_503.Parsetree.Pstr_extension (({ txt; _ }, payload), [])+ when String.equal txt Encoding_504.Ext_name.bivariant_pstr ->let desc = Encoding_504.To_503.decode_bivariant_pstr ~loc payload incopy_structure_item_desc_with_loc ~loc desc| Ast_503.Parsetree.Pstr_extension (x0, x1) ->@@ -1176,15 +1176,11 @@ and copy_extension_constructor_kind :and copy_type_params params =List.map(fun ((typ, (var, inj)) as param) ->- match Encoding_504.To_503.decode_bivariant_param param with- | Some (typ, inj) ->- ( copy_core_type typ- , (Ast_504.Asttypes.Bivariant, copy_injectivity inj)- )- | None ->- ( copy_core_type typ- , (copy_variance var, copy_injectivity inj)- ))+ match Encoding_504.To_503.decode_bivariant_param param with+ | Some (typ, inj) ->+ ( copy_core_type typ,+ (Ast_504.Asttypes.Bivariant, copy_injectivity inj) )+ | None -> (copy_core_type typ, (copy_variance var, copy_injectivity inj)))paramsand copy_type_declaration :File "astlib/migrate_504_503.ml", line 1, characters 0-0:diff --git a/_build/default/astlib/migrate_504_503.ml b/_build/default/astlib/.formatted/migrate_504_503.mlindex 09dc5d4..3ce9592 100644--- a/_build/default/astlib/migrate_504_503.ml+++ b/_build/default/astlib/.formatted/migrate_504_503.ml@@ -8,7 +8,7 @@ module Bivariant_param = struct| Type_decl of Ast_503.Parsetree.type_declaration| Type_decl_list of Ast_503.Parsetree.type_declaration list-(* TODO: register exception printers to display those as location errors+ (* TODO: register exception printers to display those as location errorspointing to the right AST element and displaying a clear migration errormessage *)end@@ -535,7 +535,7 @@ and copy_structure : Ast_504.Parsetree.structure -> Ast_503.Parsetree.structureand copy_structure_item :Ast_504.Parsetree.structure_item -> Ast_503.Parsetree.structure_item =fun { Ast_504.Parsetree.pstr_desc; Ast_504.Parsetree.pstr_loc } ->- let loc = copy_location pstr_loc in+ let loc = copy_location pstr_loc in{Ast_503.Parsetree.pstr_desc =copy_structure_item_desc_with_loc ~loc pstr_desc;@@ -552,13 +552,12 @@ and copy_structure_item_desc_with_loc ~loc :(copy_rec_flag x0, List.map copy_value_binding x1)| Ast_504.Parsetree.Pstr_primitive x0 ->Ast_503.Parsetree.Pstr_primitive (copy_value_description x0)- | Ast_504.Parsetree.Pstr_type (x0, x1) ->- let rec_flag = copy_rec_flag x0 in- (match copy_type_declaration_list x1 with- | tds ->- Ast_503.Parsetree.Pstr_type (rec_flag, tds)- | exception Bivariant_param.Type_decl_list tds ->- Encoding_504.To_503.encode_bivariant_pstr_type ~loc rec_flag tds)+ | Ast_504.Parsetree.Pstr_type (x0, x1) -> (+ let rec_flag = copy_rec_flag x0 in+ match copy_type_declaration_list x1 with+ | tds -> Ast_503.Parsetree.Pstr_type (rec_flag, tds)+ | exception Bivariant_param.Type_decl_list tds ->+ Encoding_504.To_503.encode_bivariant_pstr_type ~loc rec_flag tds)| Ast_504.Parsetree.Pstr_typext x0 ->Ast_503.Parsetree.Pstr_typext (copy_type_extension x0)| Ast_504.Parsetree.Pstr_exception x0 ->@@ -1164,15 +1163,15 @@ and copy_type_params params =let params' =List.map(fun (typ, (variance, injectivity)) ->- let typ' = copy_core_type typ in- let injectivity' = copy_injectivity injectivity in- try (typ', (copy_variance variance, injectivity'))- with Bivariant_param.T ->- contains_bivariant_param := true;- Encoding_504.To_503.encode_bivariant_param typ' injectivity')+ let typ' = copy_core_type typ in+ let injectivity' = copy_injectivity injectivity in+ try (typ', (copy_variance variance, injectivity'))+ with Bivariant_param.T ->+ contains_bivariant_param := true;+ Encoding_504.To_503.encode_bivariant_param typ' injectivity')paramsin- params', !contains_bivariant_param+ (params', !contains_bivariant_param)and copy_type_declaration :Ast_504.Parsetree.type_declaration -> Ast_503.Parsetree.type_declaration =@@ -1186,46 +1185,43 @@ and copy_type_declaration :Ast_504.Parsetree.ptype_attributes;Ast_504.Parsetree.ptype_loc;} ->- let params, contains_bivariant = copy_type_params ptype_params in- let td =- {- Ast_503.Parsetree.ptype_name = copy_loc (fun x -> x) ptype_name;- Ast_503.Parsetree.ptype_params = params;- Ast_503.Parsetree.ptype_cstrs =- List.map- (fun x ->- let x0, x1, x2 = x in- (copy_core_type x0, copy_core_type x1, copy_location x2))- ptype_cstrs;- Ast_503.Parsetree.ptype_kind = copy_type_kind ptype_kind;- Ast_503.Parsetree.ptype_private = copy_private_flag ptype_private;- Ast_503.Parsetree.ptype_manifest = Option.map copy_core_type ptype_manifest;- Ast_503.Parsetree.ptype_attributes = copy_attributes ptype_attributes;- Ast_503.Parsetree.ptype_loc = copy_location ptype_loc;- }- in- if contains_bivariant then- raise (Bivariant_param.Type_decl td)- else- td+ let params, contains_bivariant = copy_type_params ptype_params in+ let td =+ {+ Ast_503.Parsetree.ptype_name = copy_loc (fun x -> x) ptype_name;+ Ast_503.Parsetree.ptype_params = params;+ Ast_503.Parsetree.ptype_cstrs =+ List.map+ (fun x ->+ let x0, x1, x2 = x in+ (copy_core_type x0, copy_core_type x1, copy_location x2))+ ptype_cstrs;+ Ast_503.Parsetree.ptype_kind = copy_type_kind ptype_kind;+ Ast_503.Parsetree.ptype_private = copy_private_flag ptype_private;+ Ast_503.Parsetree.ptype_manifest =+ Option.map copy_core_type ptype_manifest;+ Ast_503.Parsetree.ptype_attributes = copy_attributes ptype_attributes;+ Ast_503.Parsetree.ptype_loc = copy_location ptype_loc;+ }+ in+ if contains_bivariant then raise (Bivariant_param.Type_decl td) else tdand copy_type_declaration_list :- Ast_504.Parsetree.type_declaration list ->- Ast_503.Parsetree.type_declaration list = fun l ->+ Ast_504.Parsetree.type_declaration list ->+ Ast_503.Parsetree.type_declaration list =+ fun l ->let contains_bivariant_param = ref false inlet tds =List.map(fun td ->- try copy_type_declaration td- with Bivariant_param.Type_decl td' ->- contains_bivariant_param := true;- td')+ try copy_type_declaration td+ with Bivariant_param.Type_decl td' ->+ contains_bivariant_param := true;+ td')lin- if !contains_bivariant_param then- raise (Bivariant_param.Type_decl_list tds)- else- tds+ if !contains_bivariant_param then raise (Bivariant_param.Type_decl_list tds)+ else tdsand copy_private_flag :Ast_504.Asttypes.private_flag -> Ast_503.Asttypes.private_flag = functiondune 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-03-02 11:04.26: Job failed: Failed: Build failed