Run one rule of the CommonsLang_OCaml.Dk.OpamBuild scriptmodule so its per-package build rule ships in this distribution. Running any rule of a scriptmodule brings in the whole scriptmodule; the marker output is otherwise unused. The value-id is harvested from the first CI run (the DkML pattern).
The @1.0.1 revision ships alongside @1.0.0 for the MlFront with-test closure (short-circuit filter eval, an arch fenv, and the dune-install --prefix repair); its per-slot value-id is likewise harvested from the first CI run.
The @1.0.8 revision ships alongside @1.0.7: it fetches the build wrapper from the fresh Apparatus.OpamBuildWrapper@1.0.4 (build-locked-package-v2.sh), whose @INSTALL@ installs Windows executables under their .exe name so cmd.exe can run a staged ocamlbuild. @1.0.4 is a new asset module because an in-place edit of @1.0.1 does not propagate through a distribution (value id hashes the invocation, not the content). All other assets stay at @1.0.1; the Export marker value-id is shared with @1.0.0/@1.0.6/@1.0.7, so no new harvest is needed.
The @1.0.9 revision supersedes @1.0.8's wrapper: @1.0.4's @INSTALL@ only added .exe when a literal <name>.exe existed, but DkML's ocamlopt emits <name> with no .exe when -o carries an extension (ocamlbuild.native), so nothing matched and the staged ocamlbuild stayed unrunnable. @1.0.9 fetches Apparatus.OpamBuildWrapper@1.0.5 (build-locked-package-v3.sh), which instead gives every bin/sbin destination the .exe suffix on Windows. @1.0.5 is again a new asset module for the same propagation reason; the Export marker value-id stays shared.
The @1.0.10 revision fetches Apparatus.OpamBuildWrapper@1.0.6 (build-locked-package-v4.sh), whose ocamlbuild-nh shim passes -install-lib-dir p/lib/ocamlbuild so ocamlbuild -where resolves to the package prefix. The relocatable ocamlbuild otherwise computes -where beside the compiler (dirname of ocaml_libdir), but the dk0 closure keeps the compiler separate and installs ocamlbuild.cmo into the package prefix, so compiling a myocamlbuild.ml plugin (e.g. ptime) fails to find ocamlbuild.cmo. @1.0.6 is a new asset module; the Export marker value-id stays shared.
The @1.0.11 revision fetches Apparatus.OpamBuildWrapper@1.0.7 (build-locked-package-v5.sh), which makes the imported relocatable findlib usable by a topkg #use "topfind". @1.0.10's wrapper set only OCAML_TOPLEVEL_PATH, which findlib_config reads to resolve its location, but the OCaml >= 4.13 toplevel does NOT search that variable for #use, so #use "topfind" failed with Cannot find file topfind whenever ocamlfind was imported (rather than built in-closure, where its build also seeded topfind into the then-writable shared stdlib). @1.0.7 also exports OCAMLTOP_INCLUDE_PATH (the toplevel's actual #use search path) and OCAMLFIND_LDCONF (pointing at the running compiler's ld.conf), because findlib_config bakes ocaml_stdlib/ocaml_ldconf as an absolute compile-time path that is dead once the object is imported into another build tree. All three variables are required together; the imported Dk0.Pkg.Ocamlfind object itself is correct and unchanged. @1.0.7 is a new asset module; the Export marker value-id stays shared.
The @1.0.15 revision fetches Apparatus.OpamBuildWrapper@1.0.9 (build-locked-package-v6.sh), which additionally rewrites the imported findlib.conf's stdlib= (and ldconf=) to the running compiler's lib/ocaml. @1.0.11's OCAMLFIND_LDCONF fixed ocamlfind list, but findlib_config's baked ocaml_stdlib still pointed at the dead compile-time path, so -package compiler-libs.toplevel (findlib expands it to <ocaml_stdlib>/compiler-libs) resolved into that dead directory and any consumer of the toplevel libraries failed with Unbound module Toploop -- first hit compiling astring's src/astring_top.ml. findlib exposes no environment override for stdlib (unlike ldconf), so the wrapper must rewrite findlib.conf itself; the DkML compiler does ship compiler-libs/toploop.cmi + ocamltoplevel.cma, so once stdlib points at it the toplevel packages resolve. @1.0.9 is a new asset module; the Export marker value-id stays shared.
The @1.0.16 revision is behaviorally identical to @1.0.15. It exists because the wrapper assets were collapsed onto the stable assets/opam/build-locked-package.sh path (Apparatus.OpamBuildWrapper@1.0.10, the same bytes as the retired build-locked-package-v6.sh) and every earlier OpamBuild revision was retired from HEAD; see "## Assets". The revision paragraphs above are history: the file names they mention exist only in earlier release tags. The Export marker value-id stays shared, so no new harvest is needed.
The @1.0.17 revision fetches Apparatus.OpamBuildWrapper@1.0.11, the same build-locked-package.sh with one Unix addition: it exports CAML_LD_LIBRARY_PATH pointing at the running compiler's stublibs. A package build that runs a bytecode helper linking unix -- first hit ocamlbuild's man/options_man.byte, run during the build to generate a man page -- loads dllunix-* at runtime via CAML_LD_LIBRARY_PATH and then the compiler's ld.conf. The DkML relocatable compiler's baked ld.conf lists a dead absolute stublibs dir (the same dead-baked-path root cause as the findlib stdlib above) and the rule strips CAML_LD_LIBRARY_PATH for hermeticity, so ocamlrun aborted (core dump) and the build failed. It is set on every slot -- as a native path (cygpath -m) on Windows, matching OCAMLFIND_LDCONF -- so the stub load path is correct regardless of how the host resolves DLLs. @1.0.11 is an OpamBuildWrapper patch bump (its bytes changed); the Export marker value-id stays shared.