Organisationsahrefsatd9b2abd ()opensuse-15.6-4.14_opam-2.4

opensuse-15.6-4.14_opam-2.4

Link Copied
Code Copied

Logs

2025-12-09 19:39.05: New job: test ahrefs/atd https://github.com/ahrefs/atd.git#refs/heads/yojson3 (9b2abd5bc58e93fd0a38a1de4f4a819e13226e7a) (linux-x86_64:opensuse-15.6-4.14_opam-2.4)
Base: ocaml/opam:opensuse-15.6-ocaml-4.14@sha256:50aa7a792077bfe5442547de8d4e905fc62326dd7ff1e6b8e5918804437644dc
Opam project build


To reproduce locally:


git clone --recursive "https://github.com/ahrefs/atd.git" -b "yojson3" && cd "atd" && git reset --hard 9b2abd5b
cat > Dockerfile <<'END-OF-DOCKERFILE'
FROM ocaml/opam:opensuse-15.6-ocaml-4.14@sha256:50aa7a792077bfe5442547de8d4e905fc62326dd7ff1e6b8e5918804437644dc
# opensuse-15.6-4.14_opam-2.4
USER 1000:1000
ENV CLICOLOR_FORCE="1"
ENV OPAMCOLOR="always"
WORKDIR /src
RUN sudo ln -f /usr/bin/opam-2.4 /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 8a324a5b9945e0e515da441ede437f3756caa83d || git fetch origin master) && git reset -q --hard 8a324a5b9945e0e515da441ede437f3756caa83d && git log --no-decorate -n1 --oneline && opam update -u
COPY --chown=1000:1000 atdts.opam atds.opam atdpy.opam atdj.opam atdgen.opam atdgen-runtime.opam atdgen-codec-runtime.opam atdd.opam atdcpp.opam atd.opam ./
RUN opam pin add -yn atdts.dev './' && \
opam pin add -yn atds.dev './' && \
opam pin add -yn atdpy.dev './' && \
opam pin add -yn atdj.dev './' && \
opam pin add -yn atdgen.dev './' && \
opam pin add -yn atdgen-runtime.dev './' && \
opam pin add -yn atdgen-codec-runtime.dev './' && \
opam pin add -yn atdd.dev './' && \
opam pin add -yn atdcpp.dev './' && \
opam pin add -yn atd.dev './'
RUN echo '(lang dune 3.0)' > './dune-project'
ENV DEPS="alcotest.1.9.1 astring.0.8.5 base-bigarray.base base-threads.base base-unix.base biniou.1.2.2 camlp-streams.5.0.1 cmdliner.2.1.0 conf-python-3.9.0.0 dune.3.20.2 easy-format.1.3.4 fmt.0.11.0 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 ocaml.4.14.2 ocaml-base-compiler.4.14.2 ocaml-config.2 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocamlbuild.0.16.1 ocamlfind.1.9.8 re.1.14.0 seq.base stdlib-shims.0.3.0 topkg.1.1.1 uutf.1.0.4 yojson.2.2.2"
ENV CI="true"
ENV OCAMLCI="true"
RUN opam update --depexts && opam install --cli=2.4 --depext-only -y atdts.dev atds.dev atdpy.dev atdj.dev atdgen.dev atdgen-runtime.dev atdgen-codec-runtime.dev atdd.dev atdcpp.dev atd.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


2025-12-09 19:39.05: Using cache hint "ahrefs/atd-ocaml/opam:opensuse-15.6-ocaml-4.14@sha256:50aa7a792077bfe5442547de8d4e905fc62326dd7ff1e6b8e5918804437644dc-opensuse-15.6-4.14_opam-2.4-3defb39c8f8e1d2ad79778404c35fe0a"
2025-12-09 19:39.05: Using OBuilder spec:
((from ocaml/opam:opensuse-15.6-ocaml-4.14@sha256:50aa7a792077bfe5442547de8d4e905fc62326dd7ff1e6b8e5918804437644dc)
(comment opensuse-15.6-4.14_opam-2.4)
(user (uid 1000) (gid 1000))
(env CLICOLOR_FORCE 1)
(env OPAMCOLOR always)
(workdir /src)
(run (shell "sudo ln -f /usr/bin/opam-2.4 /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 8a324a5b9945e0e515da441ede437f3756caa83d || git fetch origin master) && git reset -q --hard 8a324a5b9945e0e515da441ede437f3756caa83d && git log --no-decorate -n1 --oneline && opam update -u"))
(copy (src atdts.opam atds.opam atdpy.opam atdj.opam atdgen.opam atdgen-runtime.opam atdgen-codec-runtime.opam atdd.opam atdcpp.opam atd.opam)
(dst ./))
(run (network host)
(shell  "opam pin add -yn atdts.dev './' && \
\nopam pin add -yn atds.dev './' && \
\nopam pin add -yn atdpy.dev './' && \
\nopam pin add -yn atdj.dev './' && \
\nopam pin add -yn atdgen.dev './' && \
\nopam pin add -yn atdgen-runtime.dev './' && \
\nopam pin add -yn atdgen-codec-runtime.dev './' && \
\nopam pin add -yn atdd.dev './' && \
\nopam pin add -yn atdcpp.dev './' && \
\nopam pin add -yn atd.dev './'"))
(run (network host)
(shell "echo '(lang dune 3.0)' > './dune-project'"))
(env DEPS "alcotest.1.9.1 astring.0.8.5 base-bigarray.base base-threads.base base-unix.base biniou.1.2.2 camlp-streams.5.0.1 cmdliner.2.1.0 conf-python-3.9.0.0 dune.3.20.2 easy-format.1.3.4 fmt.0.11.0 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 ocaml.4.14.2 ocaml-base-compiler.4.14.2 ocaml-config.2 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocamlbuild.0.16.1 ocamlfind.1.9.8 re.1.14.0 seq.base stdlib-shims.0.3.0 topkg.1.1.1 uutf.1.0.4 yojson.2.2.2")
(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.4 --depext-only -y atdts.dev atds.dev atdpy.dev atdj.dev atdgen.dev atdgen-runtime.dev atdgen-codec-runtime.dev atdd.dev atdcpp.dev atd.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"))
)


2025-12-09 19:39.05: Waiting for resource in pool OCluster
2025-12-09 19:39.05: Waiting for worker…
2025-12-09 19:53.57: Got resource from pool OCluster
Building on laodoke.caelum.ci.dev
All commits already cached
HEAD is now at 9b2abd5 Import the missing Yojson functions 'start_any_variant' and 'start_any_tuple' which were accidentally removed from Yojson.


(from ocaml/opam:opensuse-15.6-ocaml-4.14@sha256:50aa7a792077bfe5442547de8d4e905fc62326dd7ff1e6b8e5918804437644dc)
2025-12-09 19:55.51 ---> saved as "1ed727fb4720e9227d4a2d9ffd31de95472026133f61c47fad7232f79b4bcbf3"


/: (comment opensuse-15.6-4.14_opam-2.4)


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


/: (env CLICOLOR_FORCE 1)


/: (env OPAMCOLOR always)


/: (workdir /src)


/src: (run (shell "sudo ln -f /usr/bin/opam-2.4 /usr/bin/opam"))
2025-12-09 19:55.51 ---> saved as "1b5a742d46646c730452516f9e49ff68daecac01105b4ec1457af17a3029ca87"


/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
Format upgrade done.


<><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><>
[default] Initialised
2025-12-09 19:56.32 ---> saved as "64be90fb9860095de6d379869a6dffc2a3a2a4722ee54978f48e62afc681600b"


/src: (run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
Linux 6.8.0-86-generic
The OCaml toplevel, version 4.14.2
2.4.1
2025-12-09 19:56.33 ---> saved as "0a87e94424160b0814c032a29d20f9e8df86cd57ccd21f249aa1d315480158bb"


/src: (workdir /src)


/src: (run (shell "sudo chown opam /src"))
2025-12-09 19:56.33 ---> saved as "dac30a9dd133a362e4705f7808077d600afb7cce254e195a07d20fec7ec8b50f"


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "cd ~/opam-repository && (git cat-file -e 8a324a5b9945e0e515da441ede437f3756caa83d || git fetch origin master) && git reset -q --hard 8a324a5b9945e0e515da441ede437f3756caa83d && git log --no-decorate -n1 --oneline && opam update -u"))
From https://github.com/ocaml/opam-repository
* branch                  master     -> FETCH_HEAD
2ec6d6cc92..d684c896eb  master     -> origin/master
8a324a5b99 Add: cmdliner.2.1.0 (#28962)


<><> 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)
2025-12-09 19:57.10 ---> saved as "8ff5d39731c74ff1d4841213104447051eecc0c145371ff0f1024e50d6df1d49"


/src: (copy (src atdts.opam atds.opam atdpy.opam atdj.opam atdgen.opam atdgen-runtime.opam atdgen-codec-runtime.opam atdd.opam atdcpp.opam atd.opam)
(dst ./))
2025-12-09 19:57.11 ---> saved as "bcfc06b0cd91a7a09845248a6dc3c0dd739d03fc22aba82cf941b82a7d449d7d"


/src: (run (network host)
(shell  "opam pin add -yn atdts.dev './' && \
\nopam pin add -yn atds.dev './' && \
\nopam pin add -yn atdpy.dev './' && \
\nopam pin add -yn atdj.dev './' && \
\nopam pin add -yn atdgen.dev './' && \
\nopam pin add -yn atdgen-runtime.dev './' && \
\nopam pin add -yn atdgen-codec-runtime.dev './' && \
\nopam pin add -yn atdd.dev './' && \
\nopam pin add -yn atdcpp.dev './' && \
\nopam pin add -yn atd.dev './'"))
[atdts.dev] synchronised (file:///src)
atdts is now pinned to file:///src (version dev)
[atds.dev] synchronised (file:///src)
atds is now pinned to file:///src (version dev)
[atdpy.dev] synchronised (file:///src)
atdpy is now pinned to file:///src (version dev)
[atdj.dev] synchronised (file:///src)
atdj is now pinned to file:///src (version dev)
[atdgen.dev] synchronised (file:///src)
atdgen is now pinned to file:///src (version dev)
[atdgen-runtime.dev] synchronised (file:///src)
atdgen-runtime is now pinned to file:///src (version dev)
[atdgen-codec-runtime.dev] synchronised (file:///src)
atdgen-codec-runtime is now pinned to file:///src (version dev)
[atdd.dev] synchronised (file:///src)
atdd is now pinned to file:///src (version dev)
[atdcpp.dev] synchronised (file:///src)
atdcpp is now pinned to file:///src (version dev)
[atd.dev] synchronised (file:///src)
atd is now pinned to file:///src (version dev)
2025-12-09 19:57.21 ---> saved as "d63b61ef9ce46e527aa3bb24887c950e4105cf28caa89baf8f0d39e454f4a3b0"


/src: (run (network host)
(shell "echo '(lang dune 3.0)' > './dune-project'"))
2025-12-09 19:57.22 ---> saved as "3c1e377e3a47180b721eb3c52e2d10ab2a04b4d690002b9048e0c6613e5f394a"


/src: (env DEPS "alcotest.1.9.1 astring.0.8.5 base-bigarray.base base-threads.base base-unix.base biniou.1.2.2 camlp-streams.5.0.1 cmdliner.2.1.0 conf-python-3.9.0.0 dune.3.20.2 easy-format.1.3.4 fmt.0.11.0 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 ocaml.4.14.2 ocaml-base-compiler.4.14.2 ocaml-config.2 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocamlbuild.0.16.1 ocamlfind.1.9.8 re.1.14.0 seq.base stdlib-shims.0.3.0 topkg.1.1.1 uutf.1.0.4 yojson.2.2.2")


/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.4 --depext-only -y atdts.dev atds.dev atdpy.dev atdj.dev atdgen.dev atdgen-runtime.dev atdgen-codec-runtime.dev atdd.dev atdcpp.dev atd.dev $DEPS"))
+ /usr/bin/sudo "zypper" "--non-interactive" "refresh"
- Retrieving repository 'Update repository of openSUSE Backports' metadata [.
- .
- Looking for gpg keys in repository Update repository of openSUSE Backports.
-   gpgkey=http://download.opensuse.org/update/leap/15.6/backports/repodata/repomd.xml.key
- ......
- ....
- ....
- ....
- ....
- ....
- ..............done]
- Building repository 'Update repository of openSUSE Backports' cache [..
- ..done]
- Retrieving repository 'Update repository with updates from SUSE Linux Enterprise 15' metadata [.
- .
- Looking for gpg keys in repository Update repository with updates from SUSE Linux Enterprise 15.
-   gpgkey=http://download.opensuse.org/update/leap/15.6/sle/repodata/repomd.xml.key
- ......
- ....
- ....
- ....
- ....
- ...................
- ...........
- ..........
- ..........
- .........
- .........
- ..........
- .........
- .........
- .........
- .........
- ..........
- ..........
- .........
- ..........
- .........
- ..........
- ..........
- ..........
- ..........
- ........
- ..............done]
- Building repository 'Update repository with updates from SUSE Linux Enterprise 15' cache [..
- ..done]
- Repository 'Main Update Repository' is up to date.
- Repository 'Update Repository (Non-Oss)' is up to date.
- Repository 'Non-OSS Repository' is up to date.
- Repository 'Main Repository' is up to date.
- All repositories have been refreshed.


<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
[atd.dev] synchronised (file:///src)
[atdcpp.dev] synchronised (file:///src)
[atdd.dev] synchronised (file:///src)
[atdgen.dev] synchronised (file:///src)
[atdgen-codec-runtime.dev] synchronised (file:///src)
[atdgen-runtime.dev] synchronised (file:///src)
[atdj.dev] synchronised (file:///src)
[atds.dev] synchronised (file:///src)
[atdpy.dev] synchronised (file:///src)
[atdts.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 2).
[NOTE] Package ocaml-base-compiler is already installed (current version is 4.14.2).
[NOTE] Package ocaml is already installed (current version is 4.14.2).
[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-bigarray is already installed (current version is base).


The following system packages will first need to be installed:
python3


<><> Handling external dependencies <><><><><><><><><><><><><><><><><><><><><><>


+ /usr/bin/sudo "zypper" "--non-interactive" "install" "python3"
- Loading repository data...
- Reading installed packages...
- Resolving package dependencies...
- 
- The following 4 NEW packages are going to be installed:
-   libopenssl1_1 libpython3_6m1_0 python3 python3-base
- 
- 4 new packages to install.
- 
- Package download size:    10.5 MiB
- 
- Package install size change:
-               |      38.5 MiB  required by packages that will be installed
-     38.5 MiB  |  -      0 B    released by packages that will be removed
- 
- Backend:  classic_rpmtrans
- Continue? [y/n/v/...? shows all options] (y): y
- Retrieving: libopenssl1_1-1.1.1w-150600.5.18.1.x86_64 (Update repository with updates from SUSE Linux Enterprise 15) (1/4),   1.4 MiB
- Retrieving: libopenssl1_1-1.1.1w-150600.5.18.1.x86_64.rpm [...
- ....
- ....
- ....
- ....
- ....
- ....
- ..not found]
- Retrieving: libopenssl1_1-1.1.1w-150600.5.18.1.x86_64.rpm [.not found]
- Retrieving: libopenssl1_1-1.1.1w-150600.5.18.1.x86_64.rpm [.done]
- Retrieving: libpython3_6m1_0-3.6.15-150300.10.97.1.x86_64 (Update repository with updates from SUSE Linux Enterprise 15) (2/4),   1.2 MiB
- Retrieving: libpython3_6m1_0-3.6.15-150300.10.97.1.x86_64.rpm [.not found]
- Retrieving: libpython3_6m1_0-3.6.15-150300.10.97.1.x86_64.rpm [.not found]
- Retrieving: libpython3_6m1_0-3.6.15-150300.10.97.1.x86_64.rpm [..done (508.7 KiB/s)]
- Retrieving: python3-base-3.6.15-150300.10.97.1.x86_64 (Update repository with updates from SUSE Linux Enterprise 15) (3/4),   7.8 MiB
- Retrieving: python3-base-3.6.15-150300.10.97.1.x86_64.rpm [.not found]
- Retrieving: python3-base-3.6.15-150300.10.97.1.x86_64.rpm [.not found]
- Retrieving: python3-base-3.6.15-150300.10.97.1.x86_64.rpm [....
- .........
- done (3.6 MiB/s)]
- Retrieving: python3-3.6.15-150300.10.97.2.x86_64 (Update repository with updates from SUSE Linux Enterprise 15) (4/4), 104.8 KiB
- Retrieving: python3-3.6.15-150300.10.97.2.x86_64.rpm [.not found]
- Retrieving: python3-3.6.15-150300.10.97.2.x86_64.rpm [.not found]
- Retrieving: python3-3.6.15-150300.10.97.2.x86_64.rpm [.done]
- 
- Checking for file conflicts: [...done]
- (1/4) Installing: libopenssl1_1-1.1.1w-150600.5.18.1.x86_64 [....done]
- (2/4) Installing: libpython3_6m1_0-3.6.15-150300.10.97.1.x86_64 [....done]
- (3/4) Installing: python3-base-3.6.15-150300.10.97.1.x86_64 [..........
- ..........
- .done]
- (4/4) Installing: python3-3.6.15-150300.10.97.2.x86_64 [..done]
2025-12-09 19:59.13 ---> saved as "23696db0aafeedb9147fa340dc7dbc80e93a5ae391fb91bf32ee430d5e4c0797"


/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 2).
[NOTE] Package ocaml-base-compiler is already installed (current version is 4.14.2).
[NOTE] Package ocaml is already installed (current version is 4.14.2).
[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-bigarray is already installed (current version is base).
The following actions will be performed:
=== install 22 packages
- install alcotest           1.9.1
- install astring            0.8.5
- install biniou             1.2.2
- install camlp-streams      5.0.1
- install cmdliner           2.1.0
- install conf-python-3      9.0.0
- install dune               3.20.2
- install easy-format        1.3.4
- install fmt                0.11.0
- install menhir             20250912
- install menhirCST          20250912
- install menhirLib          20250912
- install menhirSdk          20250912
- install ocaml-syntax-shims 1.0.0
- install ocamlbuild         0.16.1
- install ocamlfind          1.9.8
- install re                 1.14.0
- install seq                base
- install stdlib-shims       0.3.0
- install topkg              1.1.1
- install uutf               1.0.4
- install yojson             2.2.2


<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved alcotest.1.9.1  (cached)
-> retrieved astring.0.8.5  (cached)
-> retrieved biniou.1.2.2  (cached)
-> retrieved conf-python-3.9.0.0  (cached)
-> retrieved camlp-streams.5.0.1  (cached)
-> retrieved cmdliner.2.1.0  (cached)
-> retrieved easy-format.1.3.4  (cached)
-> retrieved fmt.0.11.0  (cached)
-> installed conf-python-3.9.0.0
-> retrieved ocaml-syntax-shims.1.0.0  (cached)
-> retrieved ocamlbuild.0.16.1  (cached)
-> retrieved menhir.20250912, menhirCST.20250912, menhirLib.20250912, menhirSdk.20250912  (cached)
-> retrieved ocamlfind.1.9.8  (cached)
-> retrieved seq.base  (cached)
-> installed seq.base
-> retrieved re.1.14.0  (cached)
-> retrieved stdlib-shims.0.3.0  (cached)
-> retrieved uutf.1.0.4  (cached)
-> retrieved topkg.1.1.1  (cached)
-> retrieved yojson.2.2.2  (cached)
-> retrieved dune.3.20.2  (cached)
-> installed cmdliner.2.1.0
-> 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 dune.3.20.2
-> installed camlp-streams.5.0.1
-> installed easy-format.1.3.4
-> installed menhirCST.20250912
-> installed stdlib-shims.0.3.0
-> installed menhirSdk.20250912
-> installed menhirLib.20250912
-> installed biniou.1.2.2
-> installed ocaml-syntax-shims.1.0.0
-> installed re.1.14.0
-> installed yojson.2.2.2
-> installed alcotest.1.9.1
-> installed menhir.20250912
Done.
# To update the current shell environment, run: eval $(opam env)
2025-12-09 20:00.43 ---> saved as "17ecbf39f4db115d7f0144afaf0f3e3b0103658c3216d1625922e5b4d1be6d58"


/src: (copy (src .) (dst /src))
2025-12-09 20:00.47 ---> saved as "3b0e7727db261a16effff4367297afec1209dcd32f43f935a9a857747d08de3c"


/src: (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
File "atds/test/dune", lines 13-22, characters 0-177:
13 | (rule
14 |  (alias runtest)
15 |  (package atds)
16 |  (deps
17 |   AtdsTest.scala
18 |   argonaut_2.11-6.2.2.jar
19 |   argonaut_2.12-6.2.2.jar
20 |   junit-4.8.2.jar
21 |   test.scala)
22 |  (action (run ./run_test.sh)))
(cd _build/default/atds/test && ./run_test.sh)
./run_test.sh: line 6: scalac: command not found
File "atdd/test/dlang-tests/dune", lines 17-26, characters 0-141:
17 | (rule
18 |  (alias runtest)
19 |  (package atdd)
20 |  (deps
21 |   (glob_files *.d))
22 |  (action
23 |   (progn
24 |    (bash "ldc2 %{deps} --of test")
25 |    (bash ./test)
26 |   )))
(cd _build/default/atdd/test/dlang-tests && /usr/bin/bash -e -u -o pipefail -c 'ldc2 everything_atd.d test_atdd.d --of test')
/usr/bin/bash: ldc2: command not found
(cd _build/default/atdts/src/test && ./Main.exe)
Testing `atdts'.
This run has ID `P8MU7ZDN'.


Full test results in `/src/_build/default/atdts/src/test/_build/_tests/atdts'.
Test Successful in 0.000s. 0 test run.
File "atdcpp/test/cpp-tests/dune", lines 19-28, characters 0-183:
19 | (rule
20 |  (alias runtest)
21 |  (package atdcpp)
22 |  (deps
23 |   (glob_files *.cpp))
24 |  (action
25 |   (progn
26 |    (bash "g++ -I../../lib/rapidjson/include -std=c++17 %{deps} -o test")
27 |    (bash ./test)
28 |   )))
(cd _build/default/atdcpp/test/cpp-tests && /usr/bin/bash -e -u -o pipefail -c 'g++ -I../../lib/rapidjson/include -std=c++17 everything_atd.cpp test_atdd.cpp -o test')
In file included from everything_atd.cpp:12:0:
everything_atd.hpp:12:10: fatal error: rapidjson/document.h: No such file or directory
#include <rapidjson/document.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from test_atdd.cpp:12:0:
everything_atd.hpp:12:10: fatal error: rapidjson/document.h: No such file or directory
#include <rapidjson/document.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
File "atdpy/test/python-tests/dune", lines 19-29, characters 0-198:
19 | (rule
20 |  (alias runtest)
21 |  (package atdpy)
22 |  (deps
23 |   everything.py
24 |   (glob_files *.py))
25 |  (action
26 |   (progn
27 |    (run python3 -m flake8 .)
28 |    (run python3 -m mypy --strict .)
29 |    (run python3 -m pytest .))))
(cd _build/default/atdpy/test/python-tests && /usr/bin/python3 -m flake8 .)
/usr/bin/python3: No module named flake8
(cd _build/default/atdpy/src/test && ./Main.exe)
Testing `atdpy'.
This run has ID `Z6FB002O'.


Full test results in `/src/_build/default/atdpy/src/test/_build/_tests/atdpy'.
Test Successful in 0.000s. 0 test run.
File "atdj/test/dune", lines 53-61, characters 0-160:
53 | (rule
54 |  (alias runtest)
55 |  (package atdj)
56 |  (deps
57 |   AtdjTest.java
58 |   json.jar
59 |   junit-4.8.2.jar
60 |   (glob_files com/mylife/test/*.java))
61 |  (action (run ./run_test.sh)))
(cd _build/default/atdj/test && ./run_test.sh)
./run_test.sh: line 5: javac: command not found
./run_test.sh: line 6: javac: command not found
./run_test.sh: line 7: javadoc: command not found
./run_test.sh: line 10: java: command not found
File "atdcat/test/dune", lines 57-87, characters 0-907:
57 | (rule
58 |  (alias runtest)
59 |  (deps
....
85 |    )
86 |  )
87 | )
(cd _build/default/atdcat/test && /usr/bin/python3 -m jsonschema schema.json -i data.json)
/usr/bin/python3: No module named jsonschema
File "atdgen/test/melange/melangespec_j.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/melange/melangespec_j.expected.ml _build/default/atdgen/test/melange/melangespec_j.ml
diff --git a/_build/default/atdgen/test/melange/melangespec_j.expected.ml b/_build/default/atdgen/test/melange/melangespec_j.ml
index 5cba12b..c2ed7f4 100644
--- a/_build/default/atdgen/test/melange/melangespec_j.expected.ml
+++ b/_build/default/atdgen/test/melange/melangespec_j.ml
@@ -392,20 +392,7 @@ let string_of_with_open_enum ?(len = 1024) x =
let read_with_open_enum = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Alpha" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Alpha
-            | "Beta" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Beta
-            | x ->
-              `Other x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "Alpha" ->
@@ -467,20 +454,7 @@ let string_of_variant3 ?(len = 1024) x =
let read_variant3 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "C" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (C : variant3)
-            | "B" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (B : variant3)
-            | x ->
-              (A x : variant3)
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "C" ->
@@ -511,20 +485,7 @@ let string_of_variant2 ?(len = 1024) x =
let read_variant2 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (A : variant2)
-            | "C" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (C : variant2)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -560,25 +521,7 @@ let string_of_variant1 ?(len = 1024) x =
let read_variant1 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (A x : variant1)
-            | "B" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (B : variant1)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "B" ->
@@ -640,30 +583,7 @@ let string_of_v2 ?(len = 1024) x =
let read_v2 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "V1_foo" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (V1_foo x : v2)
-            | "V2_bar" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_bool
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (V2_bar x : v2)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -722,30 +642,7 @@ let string_of_v1 ?(len = 1024) x =
let read_v1 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "V1_foo" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_bool
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (V1_foo x : v1)
-            | "V2_bar" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (V2_bar x : v1)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -923,51 +820,7 @@ let string_of_single_tuple ?(len = 1024) x =
let read_single_tuple = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Single_tuple" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  fun p lb ->
-                    Yojson.Safe.read_space p lb;
-                    let std_tuple = Yojson.Safe.start_any_tuple p lb in
-                    let len = ref 0 in
-                    let end_of_tuple = ref false in
-                    (try
-                      let x0 =
-                        let x =
-                          (
-                            Atdgen_runtime.Oj_run.read_int
-                          ) p lb
-                        in
-                        incr len;
-                        (try
-                          Yojson.Safe.read_space p lb;
-                          Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        with Yojson.End_of_tuple -> end_of_tuple := true);
-                        x
-                      in
-                      if not !end_of_tuple then (
-                        try
-                          while true do
-                            Yojson.Safe.skip_json p lb;
-                            Yojson.Safe.read_space p lb;
-                            Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                          done
-                        with Yojson.End_of_tuple -> ()
-                      );
-                      (x0)
-                    with Yojson.End_of_tuple ->
-                      Atdgen_runtime.Oj_run.missing_tuple_fields p !len [ 0 ]);
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Single_tuple x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -1096,84 +949,7 @@ let string_of__unit_simple_var ?(len = 1024) x =
let read__unit_simple_var = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Foo" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  fun p lb ->
-                    Yojson.Safe.read_space p lb;
-                    let std_tuple = Yojson.Safe.start_any_tuple p lb in
-                    let len = ref 0 in
-                    let end_of_tuple = ref false in
-                    (try
-                      let x0 =
-                        let x =
-                          (
-                            Atdgen_runtime.Oj_run.read_int
-                          ) p lb
-                        in
-                        incr len;
-                        Yojson.Safe.read_space p lb;
-                        Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        x
-                      in
-                      let x1 =
-                        let x =
-                          (
-                            Atdgen_runtime.Oj_run.read_int
-                          ) p lb
-                        in
-                        incr len;
-                        (try
-                          Yojson.Safe.read_space p lb;
-                          Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        with Yojson.End_of_tuple -> end_of_tuple := true);
-                        x
-                      in
-                      if not !end_of_tuple then (
-                        try
-                          while true do
-                            Yojson.Safe.skip_json p lb;
-                            Yojson.Safe.read_space p lb;
-                            Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                          done
-                        with Yojson.End_of_tuple -> ()
-                      );
-                      (x0, x1)
-                    with Yojson.End_of_tuple ->
-                      Atdgen_runtime.Oj_run.missing_tuple_fields p !len [ 0; 1 ]);
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Foo x
-            | "Bar" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Bar
-            | "Foobar" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_null
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Foobar x
-            | "Foo_id" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_id
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Foo_id x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "Bar" ->
@@ -1334,84 +1110,7 @@ let string_of_simple_var write__a ?(len = 1024) x =
let read_simple_var read__a = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Foo" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  fun p lb ->
-                    Yojson.Safe.read_space p lb;
-                    let std_tuple = Yojson.Safe.start_any_tuple p lb in
-                    let len = ref 0 in
-                    let end_of_tuple = ref false in
-                    (try
-                      let x0 =
-                        let x =
-                          (
-                            Atdgen_runtime.Oj_run.read_int
-                          ) p lb
-                        in
-                        incr len;
-                        Yojson.Safe.read_space p lb;
-                        Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        x
-                      in
-                      let x1 =
-                        let x =
-                          (
-                            Atdgen_runtime.Oj_run.read_int
-                          ) p lb
-                        in
-                        incr len;
-                        (try
-                          Yojson.Safe.read_space p lb;
-                          Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        with Yojson.End_of_tuple -> end_of_tuple := true);
-                        x
-                      in
-                      if not !end_of_tuple then (
-                        try
-                          while true do
-                            Yojson.Safe.skip_json p lb;
-                            Yojson.Safe.read_space p lb;
-                            Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                          done
-                        with Yojson.End_of_tuple -> ()
-                      );
-                      (x0, x1)
-                    with Yojson.End_of_tuple ->
-                      Atdgen_runtime.Oj_run.missing_tuple_fields p !len [ 0; 1 ]);
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Foo x
-            | "Bar" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Bar
-            | "Foobar" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__a
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Foobar x
-            | "Foo_id" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_id
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Foo_id x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "Bar" ->
@@ -2749,30 +2448,7 @@ let read_adapted = (
Atdgen_runtime.Oj_run.read_with_adapter Atdgen_codec_runtime.Json_adapter.Type_field.normalize (
fun p lb ->
Yojson.Safe.read_space p lb;
-      match Yojson.Safe.start_any_variant p lb with
-        | `Edgy_bracket -> (
-            match Yojson.Safe.read_ident p lb with
-              | "A" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    read_a
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `A x
-              | "B" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    read_b
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `B x
-              | x ->
-                Atdgen_runtime.Oj_run.invalid_variant_tag p x
-          )
+      match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
(cd _build/default/atd/test && ./unit_tests.exe)
Testing `atd'.
This run has ID `L8HMN92N'.


[OK]          Annot                0   valid.
[OK]          Annot                1   invalid1.
[OK]          Annot                2   invalid2.
[OK]          Annot                3   invalid3.
[OK]          Annot                4   invalid4.
[OK]          Annot                5   invalid5.
[OK]          Annot                6   invalid6.
[OK]          Annot                7   invalid7.
[OK]          Annot                8   invalid8.
[OK]          Annot                9   invalid9.
[OK]          Sort                 0   sort.
[OK]          Unique_name          0   reserved identifiers.
[OK]          Unique_name          1   reserved prefixes.
[OK]          Unique_name          2   identifier creation.
[OK]          Doc                  0   normalize "".
[OK]          Doc                  1   normalize "a".
[OK]          Doc                  2   normalize "a b".
[OK]          Doc                  3   normalize "a\nb".
[OK]          Doc                  4   normalize "a  b".
[OK]          Doc                  5   normalize "a \n b".
[OK]          Doc                  6   normalize "a \n\n b".
[OK]          Doc                  7   normalize "  a  ".
[OK]          Doc                  8   normalize "\n\na\n\n".
[OK]          Doc                  9   normalize "{{}}".
[OK]          Doc                 10   normalize "{{a}}".
[OK]          Doc                 11   normalize "{{  a  b\n\nc\n }}".
[OK]          Doc                 12   normalize "{{ {a} }}".
[OK]          Doc                 13   normalize "{{{}}}".
[OK]          Doc                 14   normalize "{{{a}}}".
[OK]          Doc                 15   normalize "{{{ }}}".
[OK]          Doc                 16   normalize "{{{ {{a}} }}}".
[OK]          Doc                 17   normalize "{{{ a\n\n  b }}}".


Full test results in `/src/_build/default/atd/test/_build/_tests/atd'.
Test Successful in 0.016s. 32 tests run.
File "atdgen/test/test2j.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/test2j.expected.ml _build/default/atdgen/test/test2j.ml
diff --git a/_build/default/atdgen/test/test2j.expected.ml b/_build/default/atdgen/test/test2j.ml
index cea20a4..1f613c7 100644
--- a/_build/default/atdgen/test/test2j.expected.ml
+++ b/_build/default/atdgen/test/test2j.ml
@@ -52,25 +52,7 @@ let string_of__string_option ?(len = 1024) x =
let read__string_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
File "atdgen/test/test3j_j.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/test3j_j.expected.ml _build/default/atdgen/test/test3j_j.ml
diff --git a/_build/default/atdgen/test/test3j_j.expected.ml b/_build/default/atdgen/test/test3j_j.ml
index 5d74e97..77be75a 100644
--- a/_build/default/atdgen/test/test3j_j.expected.ml
+++ b/_build/default/atdgen/test/test3j_j.ml
@@ -261,80 +261,7 @@ let string_of_tf_variant2 ?(len = 1024) x =
let read_tf_variant2 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "a" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `A x
-            | "b" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `B x
-            | "Unknown" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  fun p lb ->
-                    Yojson.Safe.read_space p lb;
-                    let std_tuple = Yojson.Safe.start_any_tuple p lb in
-                    let len = ref 0 in
-                    let end_of_tuple = ref false in
-                    (try
-                      let x0 =
-                        let x =
-                          (
-                            Atdgen_runtime.Oj_run.read_string
-                          ) p lb
-                        in
-                        incr len;
-                        Yojson.Safe.read_space p lb;
-                        Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        x
-                      in
-                      let x1 =
-                        let x =
-                          (
-                            read__json_nullable
-                          ) p lb
-                        in
-                        incr len;
-                        (try
-                          Yojson.Safe.read_space p lb;
-                          Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                        with Yojson.End_of_tuple -> end_of_tuple := true);
-                        x
-                      in
-                      if not !end_of_tuple then (
-                        try
-                          while true do
-                            Yojson.Safe.skip_json p lb;
-                            Yojson.Safe.read_space p lb;
-                            Yojson.Safe.read_tuple_sep2 p std_tuple lb;
-                          done
-                        with Yojson.End_of_tuple -> ()
-                      );
-                      (x0, x1)
-                    with Yojson.End_of_tuple ->
-                      Atdgen_runtime.Oj_run.missing_tuple_fields p !len [ 0; 1 ]);
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Unknown x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -445,30 +372,7 @@ let string_of_tf_variant ?(len = 1024) x =
let read_tf_variant = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "a" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `A x
-            | "b" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `B x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -1064,30 +968,7 @@ let read_sf_adapted = (
Atdgen_runtime.Oj_run.read_with_adapter Atdgen_runtime.Json_adapter.One_field.normalize (
fun p lb ->
Yojson.Safe.read_space p lb;
-      match Yojson.Safe.start_any_variant p lb with
-        | `Edgy_bracket -> (
-            match Yojson.Safe.read_ident p lb with
-              | "a" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    Atdgen_runtime.Oj_run.read_bool
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `A x
-              | "b" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    Atdgen_runtime.Oj_run.read_int
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `B x
-              | x ->
-                Atdgen_runtime.Oj_run.invalid_variant_tag p x
-          )
+      match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -1140,20 +1021,7 @@ let string_of_sample_open_enum ?(len = 1024) x =
let read_sample_open_enum = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Alpha" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Alpha
-            | "Beta" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Beta
-            | x ->
-              `Other x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "Alpha" ->
@@ -1230,25 +1098,7 @@ let string_of__int_nullable_option ?(len = 1024) x =
let read__int_nullable_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__int_nullable
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1734,30 +1584,7 @@ let read_adapted_f = (
Atdgen_runtime.Oj_run.read_with_adapter (Atdgen_runtime.Json_adapter.normalize_type_field "type") (
fun p lb ->
Yojson.Safe.read_space p lb;
-      match Yojson.Safe.start_any_variant p lb with
-        | `Edgy_bracket -> (
-            match Yojson.Safe.read_ident p lb with
-              | "fa" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    read_a
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `FA x
-              | "fb" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    read_b
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `FB x
-              | x ->
-                Atdgen_runtime.Oj_run.invalid_variant_tag p x
-          )
+      match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -1820,30 +1647,7 @@ let read_adapted = (
Atdgen_runtime.Oj_run.read_with_adapter Atdgen_runtime.Json_adapter.Type_field.normalize (
fun p lb ->
Yojson.Safe.read_space p lb;
-      match Yojson.Safe.start_any_variant p lb with
-        | `Edgy_bracket -> (
-            match Yojson.Safe.read_ident p lb with
-              | "a" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    read_a
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `A x
-              | "b" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    read_b
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                `B x
-              | x ->
-                Atdgen_runtime.Oj_run.invalid_variant_tag p x
-          )
+      match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
File "atdgen/test/test_ambiguous_variant_j.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/test_ambiguous_variant_j.expected.ml _build/default/atdgen/test/test_ambiguous_variant_j.ml
diff --git a/_build/default/atdgen/test/test_ambiguous_variant_j.expected.ml b/_build/default/atdgen/test/test_ambiguous_variant_j.ml
index e5432e3..ed1a763 100644
--- a/_build/default/atdgen/test/test_ambiguous_variant_j.expected.ml
+++ b/_build/default/atdgen/test/test_ambiguous_variant_j.ml
@@ -37,30 +37,7 @@ let read_ambiguous' = (
Atdgen_runtime.Oj_run.read_with_adapter Json_adapters.Identity.normalize (
fun p lb ->
Yojson.Safe.read_space p lb;
-      match Yojson.Safe.start_any_variant p lb with
-        | `Edgy_bracket -> (
-            match Yojson.Safe.read_ident p lb with
-              | "Int" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    Atdgen_runtime.Oj_run.read_int
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                (Int x : ambiguous')
-              | "String" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    Atdgen_runtime.Oj_run.read_string
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                (String x : ambiguous')
-              | x ->
-                Atdgen_runtime.Oj_run.invalid_variant_tag p x
-          )
+      match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
@@ -123,30 +100,7 @@ let read_ambiguous = (
Atdgen_runtime.Oj_run.read_with_adapter Json_adapters.Identity.normalize (
fun p lb ->
Yojson.Safe.read_space p lb;
-      match Yojson.Safe.start_any_variant p lb with
-        | `Edgy_bracket -> (
-            match Yojson.Safe.read_ident p lb with
-              | "Int" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    Atdgen_runtime.Oj_run.read_int
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                (Int x : ambiguous)
-              | "String" ->
-                Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                let x = (
-                    Atdgen_runtime.Oj_run.read_string
-                  ) p lb
-                in
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_gt p lb;
-                (String x : ambiguous)
-              | x ->
-                Atdgen_runtime.Oj_run.invalid_variant_tag p x
-          )
+      match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
File "atdgen/test/test_classic_inline_record_j.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/test_classic_inline_record_j.expected.ml _build/default/atdgen/test/test_classic_inline_record_j.ml
diff --git a/_build/default/atdgen/test/test_classic_inline_record_j.expected.ml b/_build/default/atdgen/test/test_classic_inline_record_j.ml
index 81f9ccf..ad134fc 100644
--- a/_build/default/atdgen/test/test_classic_inline_record_j.expected.ml
+++ b/_build/default/atdgen/test/test_classic_inline_record_j.ml
@@ -40,129 +40,7 @@ let string_of_foo ?(len = 1024) x =
let read_foo = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Foo" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                Yojson.Safe.read_space p lb;
-                Yojson.Safe.read_lcurl p lb;
-                let field_x = ref (None) in
-                let field_y = ref (None) in
-                try
-                  Yojson.Safe.read_space p lb;
-                  Yojson.Safe.read_object_end lb;
-                  Yojson.Safe.read_space p lb;
-                  let f =
-                    fun s pos len ->
-                      if pos < 0 || len < 0 || pos + len > String.length s then
-                        invalid_arg (Printf.sprintf "out-of-bounds substring position or length: string = %S, requested position = %i, requested length = %i" s pos len);
-                      if len = 1 then (
-                        match String.unsafe_get s pos with
-                          | 'x' -> (
-                              0
-                            )
-                          | 'y' -> (
-                              1
-                            )
-                          | _ -> (
-                              -1
-                            )
-                      )
-                      else (
-                        -1
-                      )
-                  in
-                  let i = Yojson.Safe.map_ident p f lb in
-                  Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                  (
-                    match i with
-                      | 0 ->
-                        field_x := (
-                          Some (
-                            (
-                              Atdgen_runtime.Oj_run.read_int
-                            ) p lb
-                          )
-                        );
-                      | 1 ->
-                        field_y := (
-                          Some (
-                            (
-                              Atdgen_runtime.Oj_run.read_number
-                            ) p lb
-                          )
-                        );
-                      | _ -> (
-                          Yojson.Safe.skip_json p lb
-                        )
-                  );
-                  while true do
-                    Yojson.Safe.read_space p lb;
-                    Yojson.Safe.read_object_sep p lb;
-                    Yojson.Safe.read_space p lb;
-                    let f =
-                      fun s pos len ->
-                        if pos < 0 || len < 0 || pos + len > String.length s then
-                          invalid_arg (Printf.sprintf "out-of-bounds substring position or length: string = %S, requested position = %i, requested length = %i" s pos len);
-                        if len = 1 then (
-                          match String.unsafe_get s pos with
-                            | 'x' -> (
-                                0
-                              )
-                            | 'y' -> (
-                                1
-                              )
-                            | _ -> (
-                                -1
-                              )
-                        )
-                        else (
-                          -1
-                        )
-                    in
-                    let i = Yojson.Safe.map_ident p f lb in
-                    Atdgen_runtime.Oj_run.read_until_field_value p lb;
-                    (
-                      match i with
-                        | 0 ->
-                          field_x := (
-                            Some (
-                              (
-                                Atdgen_runtime.Oj_run.read_int
-                              ) p lb
-                            )
-                          );
-                        | 1 ->
-                          field_y := (
-                            Some (
-                              (
-                                Atdgen_runtime.Oj_run.read_number
-                              ) p lb
-                            )
-                          );
-                        | _ -> (
-                            Yojson.Safe.skip_json p lb
-                          )
-                    );
-                  done;
-                  assert false;
-                with Yojson.End_of_object -> (
-                    (Foo
-                      {
-                        x = (match !field_x with Some x -> x | None -> Atdgen_runtime.Oj_run.missing_field p "x");
-                        y = (match !field_y with Some x -> x | None -> Atdgen_runtime.Oj_run.missing_field p "y");
-                      }
-                     : foo)
-                  )
-              ) in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| x ->
File "atdgen/test/testjstd_j.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/testjstd_j.expected.ml _build/default/atdgen/test/testjstd_j.ml
diff --git a/_build/default/atdgen/test/testjstd_j.expected.ml b/_build/default/atdgen/test/testjstd_j.ml
index 21a5fc4..9c3659d 100644
--- a/_build/default/atdgen/test/testjstd_j.expected.ml
+++ b/_build/default/atdgen/test/testjstd_j.ml
@@ -197,34 +197,7 @@ and string_of_p' write__a ?(len = 1024) x =
let rec read_p' read__a = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (A : 'a p')
-            | "Bb" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_p' read__a
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Bb x : 'a p')
-            | "Ccccc" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__a
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Ccccc x : 'a p')
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -318,29 +291,7 @@ and string_of_r ?(len = 1024) x =
let rec read_p = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `A
-            | "B" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_r
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `B x
-            | "C" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `C
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -554,43 +505,7 @@ and _test_variant_list_of_string s =
and read_test_variant = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Case1" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case1
-            | "Case2" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case2 x
-            | "Case3" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case3 x
-            | "Case4" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__test_variant_list
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case4 x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "Case1" ->
@@ -663,34 +578,7 @@ and string_of__int_p ?(len = 1024) x =
let rec read__int_p = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (A : _ p')
-            | "Bb" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__int_p
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Bb x : _ p')
-            | "Ccccc" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Ccccc x : _ p')
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -768,25 +656,7 @@ and string_of_poly write__x write__y ?(len = 1024) x =
let rec read__a_b_poly_option read__a read__b = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_poly read__a read__b
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1098,25 +968,7 @@ let string_of__val1_option ?(len = 1024) x =
let read__val1_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_val1
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1482,25 +1334,7 @@ let string_of__string_option ?(len = 1024) x =
let read__string_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1555,25 +1389,7 @@ let string_of__int_option ?(len = 1024) x =
let read__int_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1612,25 +1428,7 @@ let string_of__float_option ?(len = 1024) x =
let read__float_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_number
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1669,25 +1467,7 @@ let string_of__bool_option ?(len = 1024) x =
let read__bool_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_bool
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -3628,25 +3408,7 @@ let string_of__x_bee1b88 ?(len = 1024) x =
let read__x_bee1b88 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -3933,25 +3695,7 @@ let string_of_hello ?(len = 1024) x =
let read_hello = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Hello" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Hello x
-            | "World" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `World
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "World" ->
File "atdgen/test/testj.expected.ml", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/atdgen/test/testj.expected.ml _build/default/atdgen/test/testj.ml
diff --git a/_build/default/atdgen/test/testj.expected.ml b/_build/default/atdgen/test/testj.ml
index a99920c..74ba600 100644
--- a/_build/default/atdgen/test/testj.expected.ml
+++ b/_build/default/atdgen/test/testj.ml
@@ -197,34 +197,7 @@ and string_of_p' write__a ?(len = 1024) x =
let rec read_p' read__a = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (A : 'a p')
-            | "Bb" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_p' read__a
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Bb x : 'a p')
-            | "Ccccc" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__a
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Ccccc x : 'a p')
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -318,29 +291,7 @@ and string_of_r ?(len = 1024) x =
let rec read_p = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `A
-            | "B" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_r
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `B x
-            | "C" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `C
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -558,43 +509,7 @@ and _test_variant_list_of_string s =
and read_test_variant = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Case1" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case1
-            | "Case2" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case2 x
-            | "Case3" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case3 x
-            | "Case4" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__test_variant_list
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Case4 x
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "Case1" ->
@@ -667,34 +582,7 @@ and string_of__int_p ?(len = 1024) x =
let rec read__int_p = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "A" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (A : _ p')
-            | "Bb" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read__int_p
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Bb x : _ p')
-            | "Ccccc" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Ccccc x : _ p')
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "A" ->
@@ -772,25 +660,7 @@ and string_of_poly write__x write__y ?(len = 1024) x =
let rec read__a_b_poly_option read__a read__b = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_poly read__a read__b
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1112,25 +982,7 @@ let string_of__val1_option ?(len = 1024) x =
let read__val1_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  read_val1
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1500,25 +1352,7 @@ let string_of__string_option ?(len = 1024) x =
let read__string_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1573,25 +1407,7 @@ let string_of__int_option ?(len = 1024) x =
let read__int_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1630,25 +1446,7 @@ let strig_of__float_option ?(len = 1024) x =
let read__float_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_number
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -1687,25 +1485,7 @@ let string_of__bool_option ?(len = 1024) x =
let read__bool_option = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_bool
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -3684,25 +3464,7 @@ let string_of__x_bee1b88 ?(len = 1024) x =
let read__x_bee1b88 = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "None" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (None : _ option)
-            | "Some" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_int
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              (Some x : _ option)
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "None" ->
@@ -3989,25 +3751,7 @@ let string_of_hello ?(len = 1024) x =
let read_hello = (
fun p lb ->
Yojson.Safe.read_space p lb;
-    match Yojson.Safe.start_any_variant p lb with
-      | `Edgy_bracket -> (
-          match Yojson.Safe.read_ident p lb with
-            | "Hello" ->
-              Atdgen_runtime.Oj_run.read_until_field_value p lb;
-              let x = (
-                  Atdgen_runtime.Oj_run.read_string
-                ) p lb
-              in
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `Hello x
-            | "World" ->
-              Yojson.Safe.read_space p lb;
-              Yojson.Safe.read_gt p lb;
-              `World
-            | x ->
-              Atdgen_runtime.Oj_run.invalid_variant_tag p x
-        )
+    match Atdgen_runtime.Yojson_extra.start_any_variant p lb with
| `Double_quote -> (
match Yojson.Safe.finish_string p lb with
| "World" ->
File "atdgen/test/melange/dune", lines 48-51, characters 0-85:
48 | (rule
49 |  (alias runtest)
50 |  (package atdgen)
51 |  (action (run ./melangespec_roundtrip.exe)))
(cd _build/default/atdgen/test/melange && ./melangespec_roundtrip.exe)
encode list open enum: Roundtrip failed.
Have:[ "Alpha", "other" ]
Decoded:exn: Yojson__Common.Json_error("Line 1, bytes 1-19:\nExpected '\"' or '[' but found '<\"Alpha\">,\"other\"]'")
backtrace:


encode adapted variant b: Roundtrip failed.
Have:[ "B", { "thing": 1 } ]
Decoded:exn: Yojson__Common.Json_error("Line 1, bytes 0-17:\nExpected '\"' or '[' but found '<\"B\":{\"thing\":1}>'")
backtrace:


encode adapted variant a: Roundtrip failed.
Have:[ "A", { "other_thing": false, "thing": "thing" } ]
Decoded:exn: Yojson__Common.Json_error("Line 1, bytes 0-34:\nExpected '\"' or '[' but found '<\"A\":{\"other_thing\":false,\"thing\"'")
backtrace:


encode 1 tuple: Roundtrip failed.
Have:[ "Single_tuple", [ 123 ] ]
Decoded:exn: Yojson__Common.Json_error("Line 1, bytes 0-22:\nExpected '\"' or '[' but found '<\"Single_tuple\":(123)>'")
backtrace:


encode variant: Roundtrip failed.
Have:[
[ "Foo", [ 123, 456 ] ], "Bar", [ "Foobar", null ], [ "Foo_id", "testing" ]
]
Decoded:exn: Yojson__Common.Json_error("Line 1, bytes 1-35:\nExpected '\"' or '[' but found '<\"Foo\":(123,456)>,<\"Bar\">,<\"Fooba'")
backtrace:


(cd _build/default/atdgen/test && ./test_atdgen_main.exe)
Testing `atdgen'.
This run has ID `XKVBYEUI'.


[OK]          atdgen          0   ocaml internals.
[OK]          atdgen          1   biniou missing record fields.
[OK]          atdgen          2   biniou missing tuple fields.
[OK]          atdgen          3   biniou read/write unit.
[OK]          atdgen          4   json missing record fields.
[OK]          atdgen          5   json missing tuple fields.
[OK]          atdgen          6   json extra field warning.
[OK]          atdgen          7   json association list.
[OK]          atdgen          8   json association array.
[OK]          atdgen          9   json ints derived from ocaml floats.
[OK]          atdgen         10   biniou correctness.
[OK]          atdgen         11   json correctness.
[OK]          atdgen         12   json space.
[OK]          atdgen         13   validators0.
[OK]          atdgen         14   validators1.
[OK]          atdgen         15   validators2.
[OK]          atdgen         16   validators3.
[OK]          atdgen         17   validators4.
[OK]          atdgen         18   json files.
[OK]          atdgen         19   json streams.
[OK]          atdgen         20   raw JSON.
[OK]          atdgen         21   ocaml wrapping - ints.
[OK]          atdgen         22   ocaml wrapping - double wrapping.
[OK]          atdgen         23   ocaml wrapping - with validation.
[OK]          atdgen         24   ocaml wrapping - wrap constructor without...
[OK]          atdgen         25   check length of floats serialized as floa...
[OK]          atdgen         26   print JSON floats with maximum number of ...
[OK]          atdgen         27   read json record with null fields meaning...
[OK]          atdgen         28   read and write a variant represented as a...
[OK]          atdgen         29   read and write a variant represented as a...
[OK]          atdgen         30   test variants represented with single-fie...
[OK]          atdgen         31   emulate the retired tag_field feature.
[OK]          atdgen         32   emulate the retired tag_field feature, wi...
[OK]          atdgen         33   test <json open_enum>.
[OK]          atdgen         34   test ambiguous record with json adapters.
[OK]          atdgen         35   test ambiguous classic variants with json...
[OK]          atdgen         36   test wrapping of polymorphic types.
[OK]          atdgen         37   json encoding int.
[OK]          atdgen         38   json encoding & decoding int.
[OK]          atdgen         39   json encoding int with string representat...
[OK]          atdgen         40   json encoding & decoding int with string ...
[OK]          atdgen         41   abstract types.
[OK]          atdgen         42   untyped json.
[OK]          atdgen         43   generic.
[OK]          atdgen         44   inline-records.


Full test results in `/src/_build/default/atdgen/test/_build/_tests/atdgen'.
Test Successful in 0.015s. 45 tests run.
"/usr/bin/env" "bash" "-c" "opam exec -- dune build @install @check @runtest && rm -rf _build" failed with exit status 1
2025-12-09 20:01.01: Job failed: Failed: Build failed