Skip to content

Bound dune < 3.24 for rocq-elpi.dev and rocq-micromega-plugin.dev - #3806

Merged
JasonGross merged 1 commit into
rocq-prover:masterfrom
JasonGross:dune-324-elpi-micromega
Jul 31, 2026
Merged

Bound dune < 3.24 for rocq-elpi.dev and rocq-micromega-plugin.dev#3806
JasonGross merged 1 commit into
rocq-prover:masterfrom
JasonGross:dune-324-elpi-micromega

Conversation

@JasonGross

Copy link
Copy Markdown
Member

Follow-up to #3802, which bounded 38 extra-dev recipes but not these two.

dune 3.24 deleted the coq extension:

File "dune-project", line 2, characters 0-15:
2 | (using coq 0.8)
Error: Extension coq was deleted in the 3.24 version of the dune language
Hint: The Coq Build Language has been replaced by the Rocq Build Language.
Use (using rocq ) instead.

Both upstreams still ship it at the ref their url names:
LPCIC/coq-elpi master is (lang dune 3.13) + (using coq 0.8), and
rocq-community/micromega-plugin master is (lang dune 3.8) + (using coq 0.8).
The extension is rejected regardless of the project's own (lang dune ...)
version, so the build dies at dune subst before anything is compiled.

Because both are common dependencies, this is currently failing CI on unrelated
pull requests: #3693 (coq-wasm.dev) and #3790 (coq-mathcomp-dioid.dev) both die
with The compilation of rocq-elpi.dev failed at "dune subst".

opam lint passes on both files under the opam 2.1.2 that .gitlab-ci.yml pins.
🤖 Generated with Claude Code

https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b

Follow-up to rocq-prover#3802, which bounded 38 extra-dev recipes but not these two.

dune 3.24 deleted the `coq` extension:

  File "dune-project", line 2, characters 0-15:
  2 | (using coq 0.8)
  Error: Extension coq was deleted in the 3.24 version of the dune language
  Hint: The Coq Build Language has been replaced by the Rocq Build Language.
  Use (using rocq <version>) instead.

Both upstreams still ship it at the ref their `url` names:
LPCIC/coq-elpi master is `(lang dune 3.13)` + `(using coq 0.8)`, and
rocq-community/micromega-plugin master is `(lang dune 3.8)` + `(using coq 0.8)`.
The extension is rejected regardless of the project's own `(lang dune ...)`
version, so the build dies at `dune subst` before anything is compiled.

Because both are common dependencies, this is currently failing CI on unrelated
pull requests: rocq-prover#3693 (coq-wasm.dev) and rocq-prover#3790 (coq-mathcomp-dioid.dev) both die
with `The compilation of rocq-elpi.dev failed at "dune subst"`.

`opam lint` passes on both files under the opam 2.1.2 that .gitlab-ci.yml pins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
@JasonGross
JasonGross merged commit ca01bfb into rocq-prover:master Jul 31, 2026
3 checks passed
@JasonGross
JasonGross deleted the dune-324-elpi-micromega branch July 31, 2026 19:44
gares pushed a commit that referenced this pull request Aug 6, 2026
…ing the deleted (using coq) extension

dune 3.24 removed the `coq` dune-language extension, so any dune-project
containing `(using coq X.Y)` now fails to parse regardless of its own
`(lang dune ...)` version. opam solves one dune version per switch, so a
single uncapped recipe in a closure selects dune >= 3.24 for everything
in it and breaks packages that never touch elpi.

This is the tail of a cap that keeps being escaped: #3806 capped
rocq-elpi.dev, after which the solver chose rocq-elpi 3.5.0; #3795 capped
3.5.0, after which it chose 3.4.0. 3.4.0 is uncapped, as is every
released rocq-elpi below it, and it is currently failing in the archive's
own CI with

  Error: Extension coq was deleted in the 3.24 version of the dune language

taking the mathcomp stack down with it. Capping only the newest version
each time leaves the next one down to be selected, so this closes the
remaining released versions.

The affected dune-project files were read out of all 16 release tarballs
-- the url { src: } target in each opam file, i.e. the tree opam actually
builds -- rather than guessed from the opam metadata. All 16 read
`(lang dune 3.13)` / `(using coq 0.8)`.

rocq-elpi.3.5.0 is deliberately untouched; #3795 already capped it, and
its depends: line was the byte-for-byte spelling control here. coq-elpi
2.5.0 and later need no change either: they are metapackages depending
only on coq-core and rocq-elpi {= version}, so they inherit the cap.

Nothing becomes unsatisfiable -- no recipe in released/, core-dev/ or
extra-dev/ requires dune >= 3.24 -- and 83 recipes on master already
carry this same upper bound. This is not an archive-wide sweep: other
affected packages remain uncapped and are not addressed here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
JasonGross added a commit to JasonGross/opam-coq-archive that referenced this pull request Aug 11, 2026
dune 3.24 deleted the `coq` dune-language extension, so a `dune-project`
containing `(using coq X.Y)` no longer parses regardless of its own
`(lang dune ...)`. Both rows are built from `apps/json/` and `apps/xml/`
of the coq-elpi tree, whose `dune-project` carries `(using coq 0.8)`.
opam solves one dune version per switch, so an uncapped recipe in a
closure can select dune >= 3.24 for everything in it.

Same spelling as the caps already merged for the released rows
(rocq-prover#3806, rocq-prover#3819). Satisfiable: `rocq-elpi`, which both rows depend on,
already asks `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. `opam lint` passes on both files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
gares pushed a commit that referenced this pull request Aug 12, 2026
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, #3806 capped rocq-elpi.dev, and #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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant