Where we are now, in relation to the forward vision. Complements
ECHIDNA-TODO.md (actionable backlog) and the full continuation
prompts at verification-ecosystem/echidna/docs/handover/.
Last updated: 2026-04-26.
Take Echidna from “48 / 105 backends trait-wired with mock-only CI” to “production-level live subprocess CI across ~38 backends, Cap’n Proto IPC end-to-end, Chapel as first-class parallel execution layer.” Three phases, deliberately sequenced L3 → L1 → L2: live-prover CI first because it surfaces real bugs mocks hide, Cap’n Proto next so Chapel can consume its schemas, Chapel last because its sub-waves are the largest piece. Guix is the sole authoritative package manager throughout (guix fallback removed 2026-06-01 per estate-wide guix-deprecation directive). GitHub is the single source of truth; no other forges pushed directly.
| # | Decision | Rationale |
|---|---|---|
D1 |
Serialization = Cap’n Proto |
Chosen over Bebop3 for dependability + maturity (Cloudflare Workers use at scale), zero-copy reads, strong schema-evolution. Tradeoff: heavier codegen; shim Julia/Chapel via C-ABI (fits existing Idris2-ABI + Zig-FFI). |
D2 |
Chapel = first-class, maximal |
420-LoC POC promoted to
|
D3 |
Guix sole primary |
Per project CLAUDE.md. |
D4 |
Execution order = L3 → L1 → L2 |
Live-prover CI first: highest-leverage gap, surfaces real bugs mocks hide. Cap’n Proto next, since Chapel consumes those schemas. |
D5 |
Live-prover CI cadence tiered |
T1 every PR, T2 nightly, T3 weekly, T4 quarterly allow-fail. |
D6 |
No JSON emit on hot path |
Per |
Four waves. First two done, third and fourth scaffolded only.
| Wave | Scope | Status | Commits |
|---|---|---|---|
Wave-1 |
Tier-1 apt-installable (9 backends) every PR: Z3, CVC5, Vampire, EProver, SPASS, Alt-Ergo, GLPK, MiniZinc, Chuffed |
DONE 2026-04-19 |
|
Wave-2 |
Tier-2 build-from-source (10 backends) nightly: coq/agda/why3 (apt), idris2 (source bootstrap), lean4 (elan), isabelle (Isabelle2024 tarball), dafny (dotnet tool), fstar (release tarball), tlaps (installer). hol-light deferred to Wave-3. |
DONE 2026-04-19 locally; CI-unverified |
|
Wave-3 |
Tier-3 weekly, 9 backends (Tamarin, ProVerif, Imandra, SCIP, OR-Tools, HOL4, ACL2, Twelf, Metamath). Needs per-backend Containerfiles (Podman). |
SCAFFOLD ONLY — handover hints in STATE.a2ml |
— |
Wave-4 |
Tier-4 quarterly, 19 backends. Retained as mock-only unless a maintainer volunteers. |
SCAFFOLD ONLY |
— |
Local verification of Wave-1 + Wave-2: 18/18 live tests pass (13 real versions returned, 5 auto-skipped for missing binaries: GLPK/SPASS/MiniZinc/TLAPS/Chuffed).
Dafny flagged as shallow (165 LoC subprocess wrapper). Live version-check passes but the wiring is stub-ish — needs L3-phase deepening before mocks retire.
Blockers: L3 Tier-1 green on main for ≥ 7 days. Current IPC: - Rust ↔
Julia: HTTP + JSON (src/rust/gnn/client.rs:1-195 →
src/julia/api_server.jl:8090) — violates no_json_emit. - Rust ↔
Chapel: Stub (Zig bridge self-links but not in dispatch path). - Rust
↔ gRPC: schema-only; dispatch.rs uses in-process traits.
-
420-LoC POC at
chapel_poc/parallel_proof_search.chpl+ Chapelexportfunctions atchapel_poc/chapel_ffi_exports.chpl. -
Zig FFI bridge at
src/zig_ffi/chapel_bridge.zig— now self-links against bundled stubs (commit53ab9b8, 2026-04-19).cargo build --features chapelworks standalone; 6/6proof_searchtests pass. -
Nothing in dispatch path yet. No
src/chapel/directory. All 7 sub-waves pending.
-
Deep (persistent process + structured protocol parsing): Z3, CVC5, Coq (SerAPI), Lean 4, Idris2.
-
Medium (subprocess + output parse, no streaming): Agda, Vampire.
-
Stub-ish / thin: Dafny (165 LoC) — flagged for hardening during L3.
Also corrected 2026-04-19 (were mis-listed as “planned”): - Tamarin
— fully wired (provers/tamarin.rs, 592 LoC, registered in
ProverFactory, 4 unit tests). - ProVerif — fully wired
(provers/proverif.rs, 799 LoC, registered). - No TODO/FIXME in
src/rust/ — 0 matches; standing property.
66,674 proofs across 16 prover systems (COMPLETE_CORPUS_SUMMARY.md).
179,933 tactics, 10,599 unique tactic signatures, 300 indexed premises.
Untouched this session.
-
.github/workflows/rust-ci.yml— mock-only tests on every PR. Baseline smoke. -
.github/workflows/chapel-ci.yml— compiles Chapel POC and the Zig FFI bridge. Does not feed into dispatch and does not link real Chapel; tests run against bundled stubs only. -
.github/workflows/live-provers.yml— tiered workflow (T1 PR, T2 nightly, T3 weekly, T4 quarterly). T1 + T2 matrices filled with real provisioning; T3 + T4 placeholder jobs. -
.github/workflows/agda-meta-checker.yml— formally-verified trust-pipeline properties.
-
Idris2 ABI for formal proofs; zero
believe_me. -
Zig FFI for C-ABI bridges to polyglot consumers.
-
Justfile primary build system; not Make.
-
Containerfile + Podman; not Dockerfile / Docker.
-
State files in
.machine_readable/descriptiles/only; never root. -
All interfaces under
src/interfaces/; never extract to separate repos. -
When adding provers: update all 3 layers (Rust backend, Julia ML, Chapel).
-
Original name: “Cognitive Hybrid” not “Computational Heuristic”.
-
MPL-2.0 throughout.
-
No Python — Julia for ML, Rust for systems, AffineScript for apps.
-
Primary: Rust (48 / 105 prover backends, trust pipeline, CLI, REPL, API servers).
-
Secondary: Julia (ML inference, port 8090), AffineScript + Deno (UI, 33 files, zero TypeScript).
-
Optional: Chapel (parallel proof dispatch).
-
ABI: Idris2 (7+ modules, zero
believe_me). -
FFI: Zig (4 shared libraries).
-
Interfaces: GraphQL (8081), gRPC (50051), REST (8000). All three interface crates build clean as of 2026-04-26.
-
Build: Justfile primary, Cargo workspace.
-
Container: Podman + Containerfile.
-
Solver binary integrity (SHAKE3-512 + BLAKE3).
-
SMT portfolio solving / cross-checking.
-
Proof certificate checking (Alethe, DRAT/LRAT, TSTP).
-
Axiom usage tracking (4 danger levels).
-
Solver sandboxing (Podman, bubblewrap).
-
5-level trust hierarchy for confidence scoring.
-
Mutation testing for specifications.
-
Prover dispatch pipeline.
-
Cross-prover proof exchange (OpenTheory, Dedukti).
-
Pareto frontier (multi-objective proof search).
-
Bayesian timeout estimation.
-
v2.1 (landed): GNN proof graph construction (7 node kinds, 8 edge kinds); 32-dim local term embeddings + GNN inference client; GNN-guided proof search (hybrid GNN + symbolic scoring); Julia
/gnn/rankendpoint with cosine fallback; Idris2 formal proofs (7 GNN properties, 0believe_me); 28 new tests. -
v2.2: Train GNN/Transformer on larger corpus (Flux.jl); Chapel → Rust C FFI bridge (the Zig layer is done; dispatch-path integration is the L2 work above); Tamarin/ProVerif bridge (already landed — stale in the roadmap).
| File | Role |
|---|---|
|
Master plan |
|
L1 Cap’n Proto continuation prompt |
|
L2 Chapel continuation prompt |
|
L3 live-prover continuation prompt (marked Wave-2 DONE, pointing to Wave-3) |
|
Session ledger incl. |
|
Index |
-
echidna-graphql build fixed (
5aec9d5) — ProverKind enum expanded from 30 → 113 variants (exhaustive, no catch-all) across schema.rs
resolvers.rs + ffi_wrapper.rs; FfiProverBackend trait wired (config/set_config/search_theorems); FFI pointer casts corrected.cargo build -p echidna-graphqlnow clean. -
FFI boundary audit (
b4d682b) —audits/audit-ffi-boundary.adoc(4-section per-module safety review)
audits/assail-classifications.a2ml(7 classifications suppressing legitimate UnsafeCode at all three interface ffi_wrapper.rs files + core ffi/ + proof_search.rs). panic-attack findings drop from active to classified. -
bounded_read_config helper —
src/rust/integrity/io.rsships sync 1 MiB-capped read helper;solver_integrity.rsmigrated. Remaining UnboundedAllocation finding resolved. -
F5 deferred —
boj-serverechidna-llm-mcpcartridge real invocation is the one remaining open item. BoJ currently operates in skeleton mode for this cartridge; echidna REST layer is fully wired to its boundary.
-
Chapel FFI self-link fix (
53ab9b8) —-Dstubs=truedefault insrc/zig_ffi/build.zig;-fno-sanitize=undefinedflag;use anyhow::Context;inproof_search.rs.cargo build --features chapelnow links standalone. -
Stale-gap corrections — Tamarin + ProVerif marked fully wired; zero TODO/FIXME standing property; Chapel FFI “not yet wired” was actually a link-time gap, fixed.
-
L3 Wave-2 installers — idris2 source bootstrap against Chez Scheme; isabelle Isabelle2024 tarball; dafny
dotnet tool install; fstar release tarball (binaryfstar.exeeven on Linux); tlaps self-extracting installer (tlapm). hol-light deferred to Wave-3. -
Tests extended —
live_fstar_version+live_tlaps_versionadded;kind_labelgained FStar / TLAPS;ProverConfigliteral gained missinglibrary_pathsfield (pre-existing compile error fixed). -
Docs +
.gitignore—QUICKSTART-DEV.adocchapel-feature build instructions;chapel_poc/README.md“Add FFI bindings to call from Rust” marked DONE;.gitignoreaddsmodels/e*/,/models_e*/,src/zig_ffi/zig-out/,.zig-cache/. -
Mirrored — all 4 Desktop handover docs now in-repo at
docs/handover/(commitb6d437c).