rocq-elpi-json, rocq-elpi-xml: bound dune < 3.24 on the 5 released rows - #3826
Merged
gares merged 1 commit intoAug 12, 2026
Merged
Conversation
dune 3.24 deleted the `coq` dune-language extension, so a dune-project containing `(using coq X.Y)` no longer parses whatever its own `(lang dune ...)` says. opam solves one dune version per switch, so an uncapped recipe in a closure can select dune >= 3.24 for everything in it. rocq-elpi-json and rocq-elpi-xml are built out of the same coq-elpi release tarballs as rocq-elpi -- apps/json/ and apps/xml/ of that tree -- so they are hit by exactly the same defect, and they were missed by every cap so far because they are missed by name: 34f82e5 capped rocq-elpi.3.5.0, rocq-prover#3806 capped rocq-elpi.dev, and rocq-prover#3819 capped the remaining 16 released rocq-elpi/coq-elpi rows, leaving 18 capped rows at master and these 5 uncapped. The dune-project files were read out of the three release tarballs these 5 rows name in their own `url { src: }` -- v3.3.1, v3.4.0, v3.5.0 -- not guessed from opam metadata. All three read `(lang dune 3.13)` on line 1 and `(using coq 0.8)` on line 2. The cap is satisfiable: rocq-elpi, which every one of these rows depends on, already asks for `dune {>= "3.13" & < "3.24"}`, and rocq-core.dev / rocq-runtime.dev ask `dune {>= "3.21"}`, so 3.21-3.23.x satisfies the whole closure. Not touched, deliberately: the coq-elpi rows at 2.5.0 and above are metapackages that depend on rocq-elpi and have no dune dependency and no build, and the coq-elpi rows below 2.2.0 have no dune dependency either. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
gares
approved these changes
Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
dune 3.24 deleted the
coqdune-language extension, so adune-projectcontaining
(using coq X.Y)no longer parses whatever its own(lang dune ...)says. opam solves one dune version per switch, so an uncapped recipe in a
closure can select dune >= 3.24 for everything in it.
rocq-elpi-jsonandrocq-elpi-xmlare built out of the same coq-elpi releasetarballs as
rocq-elpi—apps/json/andapps/xml/of that tree — so thedefect reaches them identically. They were missed by every cap so far because
they are missed by name:
rocq-elpi.3.5.0rocq-elpi.devrocq-elpi/coq-elpirowsThat leaves 18 capped rows at master and these 5 uncapped.
Evidence
The
dune-projectfiles were read out of the three release tarballs these 5rows name in their own
url { src: }—v3.3.1,v3.4.0,v3.5.0— ratherthan guessed from opam metadata. All three:
Satisfiability
rocq-elpi, which all 5 rows depend on, already asks fordune {>= "3.13" & < "3.24"}, androcq-core.dev/rocq-runtime.devaskdune {>= "3.21"}, so 3.21–3.23.x satisfies the whole closure.opam lintpasses on all 5 files.
Deliberately not touched
The
coq-elpirows at 2.5.0 and above are metapackages depending onrocq-elpi, with no dune dependency and no build; thecoq-elpirows below2.2.0 have no dune dependency either.
The two
extra-devrowsrocq-elpi-json.devandrocq-elpi-xml.devcarry thesame uncapped
dune {>= "3.13"}, but they exist only on #3812 and not atmaster, so they are not in scope here and should be capped there.