Skip to content

Add rocq-sail-stdpp.dev - #3800

Merged
JasonGross merged 3 commits into
rocq-prover:masterfrom
JasonGross:rocq-sail-stdpp-dev
Aug 6, 2026
Merged

Add rocq-sail-stdpp.dev#3800
JasonGross merged 3 commits into
rocq-prover:masterfrom
JasonGross:rocq-sail-stdpp-dev

Conversation

@JasonGross

@JasonGross JasonGross commented Jul 30, 2026

Copy link
Copy Markdown
Member

Adds rocq-sail-stdpp.dev, tracking the main branch of
rems-project/coq-sail (main is that
repository's default branch).

Provenance. The recipe is upstream's own dune-generated rocq-sail-stdpp.opam
with exactly two lines dropped — dune's "this file is generated" header and
version: "0.20.2" — and a url block appended. Nothing else was edited.

No constraints were relaxed. Upstream's in-tree opam file carries no upper
bounds at all; the < "9.3~" and < "1.14.0~" caps that the released versions in
this archive have were added here at publish time rather than coming from
upstream. So rocq-core {>= "9.0"} and rocq-stdpp-bitvector {>= "1.13.0"} are
upstream's own bounds, unmodified. (Worth noting for the second one: opam orders
"1.13.0" < "dev", so a < "1.14.0~" cap would have excluded the
dev.2026-… versions that rocq-stdpp-bitvector publishes in the iris-dev
repository.)

Verification. dune build -p rocq-sail-stdpp -j 8 @install against a switch
tracking Rocq master (9.4+alpha) exits 0, with only deprecation warnings
(implicit-create-rewrite-hint-db and non-boolean-if, in src-stdpp/State_lemmas.v
and src-stdpp/Hoare.v). opam lint passes under the opam 2.1.2 that
.gitlab-ci.yml pins. I did not exercise the opam install path locally, so CI
here is the first test of that.

One thing worth a maintainer's eye: conflicts: ["sail" {!= version}] is
inherited verbatim from upstream. Since no sail.dev exists in opam-repository,
on a .dev package this reads as "cannot be co-installed with any released
sail". I kept it to stay faithful to upstream, and there is precedent for the
pattern in extra-dev (menhirLib.dev, menhirCST.dev, menhirGLR.dev,
menhirSdk.dev, coq-hammer-tactics.dev, rocq-mathcomp-finmap.dev,
rocq-mathcomp-bigenough.dev), but I am happy to drop or loosen it if you would
rather the dev package not carry it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b


CI note. Rebased onto master. Two successive opam-build:4.09.0 failures here were both archive-side metadata problems in this package's dependency closure, not in rocq-sail-stdpp.dev itself:

  1. rocq-runtime.9.3.dev claimed to support OCaml 4.09 while its own configure requires 4.14 — fixed in master by rocq-runtime.9.3: require OCaml >= 4.14.0, as upstream does #3803.
  2. With that gone, the solver fell back to rocq-core.9.0.dev (the only rocq-runtime left that allows 4.09) and then built stdlib master against a 9.0 parser, dying at Logic/EqdepFacts.v:144: Syntax error: illegal begin of vernac. Fixed by rocq-stdlib.dev: require rocq-core >= 9.2, as upstream does #3808, which gives rocq-stdlib.dev the rocq-core >= 9.2 bound upstream already declares.

With #3808 in, no rocq-core is installable on 4.09, so this package is correctly skipped there rather than mis-built.

JasonGross and others added 2 commits July 31, 2026 19:22
Tracks the `main` branch of rems-project/coq-sail, which is the default
branch of that repository.

The file is upstream's own dune-generated `rocq-sail-stdpp.opam` with
exactly two lines dropped (dune's "this file is generated" header and
`version: "0.20.2"`) and a `url` block appended.  No constraint is
relaxed: upstream's in-tree opam file carries no upper bounds, and the
`< "9.3~"` / `< "1.14.0~"` caps on the released versions in this archive
were added here at publish time rather than coming from upstream.

Verified with `dune build -p rocq-sail-stdpp -j 8 @install` on a switch
tracking Rocq master (9.4+alpha), which exits 0 with only deprecation
warnings.  `opam lint` passes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
Removed conflict with 'sail' version in opam file.
The extra-dev recipe tracks coq-sail's git main and is meant to be built
against the development prover, but it inherited `rocq-core {>= "9.0"}`
from upstream's dune-project via generate_opam_files.

On the opam-build:4.09.0 job that bound is satisfiable in a way it is not
on the other compilers: rocq-runtime.9.0.dev allows ocaml >= 4.09.0 while
9.2.dev/9.3.dev/dev all require >= 4.14.0, so 4.09.0 is the only job that
can select rocq-core.9.0.dev.  The solver then paired it with
rocq-stdlib.dev, which fails to compile at ./Logic/EqdepFacts.v line 144.

The 4.14.2 and 5.3.0 jobs already resolve to rocq-core.dev, so this only
pins down what those jobs do anyway; 4.09.0 becomes "not installable with
the current compiler" and is skipped, as it is for other dev-only
packages.  `rocq-core {= "dev"}` is the prevailing idiom for extra-dev
recipes (coq-dpdgraph, rocq-bignums, coq-hott, rocq-metarocq-utils,
rocq-lean-import, vsrocq-language-server).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
JasonGross added a commit that referenced this pull request Jul 31, 2026
`rocq-stdlib.dev` tracks coq/stdlib#master, whose own in-tree
`rocq-stdlib.opam` declares `"rocq-core" {>= "9.2"}`.  The recipe here still
said `{>= "9.0" | = "dev"}`, which admits `rocq-core.9.0.dev`.

That is not hypothetical.  `rocq-runtime.9.0.dev` is the only rocq-runtime that
still allows OCaml 4.09, so on the `opam-build:4.09.0` job the solver picks

  - install rocq-runtime 9.0.dev [required by rocq-core]
  - install rocq-core    9.0.dev [required by rocq-sail-stdpp]
  - install rocq-stdlib  dev     [required by rocq-stdpp]

and the build then dies compiling master's stdlib against a 9.0 parser:

  ROCQ compile ./Logic/EqdepFacts.v
  File "./Logic/EqdepFacts.v", line 144, characters 0-12:
  Error: Syntax error: illegal begin of vernac

With this bound, no rocq-core is installable on 4.09 (9.1.dev and later all
require OCaml >= 4.14), so packages in this closure are correctly reported as
"not compatible with the current compiler" and skipped rather than mis-built.
That is currently failing opam-build:4.09.0 on #3800.

I kept the `| = "dev"` disjunct that was already there rather than writing bare
`{>= "9.2"}` as upstream does; opam orders `dev` above numeric versions, so the
two are equivalent, but the explicit form matches the surrounding recipes.

The stricter alternative would be `"rocq-core" {= version}`, which is what
rocq-core.dev, coq-core.dev and coq-stdlib.dev use for their own core
dependencies.  I did not do that here because `rocq-stdlib.dev` is the only
stdlib available to `rocq-core.9.3.dev` (released has only rocq-stdlib.9.2.0),
so pinning it to `rocq-core.dev` would make that combination unsatisfiable.
Happy to switch if you would rather have the tighter constraint.

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


Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@JasonGross
JasonGross merged commit 20b14ad into rocq-prover:master Aug 6, 2026
3 checks passed
@JasonGross
JasonGross deleted the rocq-sail-stdpp-dev branch August 6, 2026 04:07
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