Skip to content

Development

Local setup for building, verifying, and documenting the plugin.

devenv

devenv shell

Provides Go 1.25, Goose tools, opam from nixpkgs (Rocq/OCaml via project opam switch), and Docker or Podman for testcontainers.

Command Purpose
make build-linux-amd64 Build plugin binary
make goose Translate provable Go packages to Coq
ch-proof-setup One-time opam switch + Perennial + Rocq (in shell)
make proof-setup Same as ch-proof-setup (works outside shell too)
ch-proof or make proof Compile Perennial Iris proofs
make ci goose + proof
make test-integration testcontainers integration tests
make ci-integration ci + integration tests
make docs API + MkDocs site

Shell scripts: ch-build, ch-proof-setup, ch-proof, ch-ci, …

Environment

GMP and libc headers come from nix (env.PKG_CONFIG_PATH, env.CPATH in devenv). Run ch-proof-setup once inside devenv shell.

First run is slow: after Rocq installs, opam compiles rocq-iris (Iris) from pinned git sources. That step often takes 5-10 minutes with minimal terminal output while make/rocq runs in the background. High CPU usage means it is working, not hung.

Containers

Integration tests need Docker or Podman. devenv detects /var/run/docker.sock; otherwise it starts a Podman API socket (devenv up).

Docs

make docs-serve

See Correctness guide for Goose + Perennial verification.