All notable changes to ECHIDNA will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
-
ci(chapel): pin runs-on to ubuntu-22.04 for Chapel 2.8.0 libclang-cpp.so.14 ABI compatibility (#183). Chapel 2.8.0’s debian package is built against LLVM-14 / Ubuntu 22.04; on Ubuntu 24.04 (
ubuntu-latest) apt resolves the unmet dependency with libclang-cpp-18, leavingchplunable to load. Also switched install toapt-get install -y /tmp/chapel.debso libclang-cpp14 / libllvm14 are resolved declaratively in one pass.
Branch prover-corpus-saturation (commits f73ee00..cb8caff).
Owner-directed marginal-benefit push across corpus, vocabulary,
arbitration, exchange, and wire-schema surfaces. See
docs/decisions/2026-06-01-saturation-campaign.md.
-
13 new corpus adapters under
src/rust/corpus/(isabelle,metamath,mizar,hol_light,hol4,dafny,why3,fstar,acl2_books,tptp,smtlib,proofnet,minif2f). Total corpus adapter coverage: 4 → 17 (4.25×). Seedocs/CORPUS-ADAPTERS.md. -
9 new per-prover synonym TOMLs (
isabelle_afp,metamath,mizar,hol_light,hol4,dafny,why3,fstar,acl2). Total: 5 → 14 per-prover tables. -
3 cross-prover taxonomic dictionaries (underscore-prefix):
_msc2020.toml(87 codes),_wordnet_math.toml(~80 lemmas),_conceptnet_seed.toml(~55 edges, offline-resilient). -
3 new arbitration mechanisms under
src/rust/verification/:bayesian_arbiter(log-odds posterior),dempster_shafer(HighConflict trip at k > 0.95),pareto_arbiter(4-axis Pareto frontier). -
4 new exchange bridges under
src/rust/exchange/:tptp,smtlib,smtcoq(stub bridge),lambdapi. -
Formal VeriSim E-R schema at
docs/architecture/VERISIM-ER-SCHEMA.md(12 entities + 7 relationships, crosswalk Rust↔Cap’n Proto↔ClickHouse) + Cap’n Proto wire schemacrates/echidna-wire/schemas/verisim_er.capnp(@0xe4dc7b1f01a06001). -
Chapel + Julia integration hooks at
docs/architecture/CHAPEL-SATURATION-HOOKS.md
docs/architecture/JULIA-SATURATION-HOOKS.md(specifications only — wave3 chapel + GNN-training-trigger files deliberately untouched). -
New Julia helper modules
src/julia/corpus_loader.jl
src/julia/saturation_synonyms.jl(bridge Rust corpus JSON
saturation synonym TOMLs into the GNN training pipeline). -
Saturation campaign ADR at
docs/decisions/2026-06-01-saturation-campaign.md. -
Handover lane doc at
docs/handover/PROVER-CORPUS-SATURATION-LANE.md(collision-avoidance contract withwave3/161-162-bench-telemetry-corpus). -
Corpus adapter index at
docs/CORPUS-ADAPTERS.md. -
Justfile recipes:
corpus-ingest-saturation,corpus-stats-all,synonym-load-test,test-saturation,arbiter-smoke,er-schema-drift-check. -
139 new unit tests across the saturation modules (1 ignored heuristic-limit).
-
src/rust/suggest/synonyms.rs:load_allextended to 14 provers; newCrossProverDicts+load_cross_prover_dicts()
SynonymTable::merge_external(). -
src/rust/corpus/mod.rs,verification/mod.rs,exchange/mod.rs: register new modules (additive). -
Module-level doc comments on
corpus/mod.rs,verification/mod.rs,verisim_bridge.rscite the new schemas
arbiters.
-
Wiki updated (Home, Architecture, Getting-Started, Guides, FAQ, Troubleshooting) to reflect the new surface.
-
README.adoc + EXPLAINME.adoc updated with new headline counts
per-module references. -
Machine-readable metadata under
.machine_readable/6a2/(STATE / META / ECOSYSTEM / NEUROSYM) updated additively. -
9 RSR-template substitution gaps closed in CODE_OF_CONDUCT.md / SECURITY.md / AUTHORS.md.
-
cargo check --libclean (~24s). -
cargo test --lib -- corpus:: verification::{bayesian,dempster_shafer,pareto}_arbiter exchange::{tptp,smtlib,smtcoq,lambdapi}: 139 passed, 0 failed, 1 ignored (corpus::dafny::tests::detects_datatype_and_extern — heuristic body-less-extern-method limitation). -
Zero collisions with
wave3/161-162-bench-telemetry-corpus.
-
105 ProverKind variants (exhaustive HP type-checker ecosystem).
-
Updated
ProverKindInjectivity.idrto prove injectivity for all 105 variants. -
Expanded Isabelle synthetic proof corpus (105 entries).
-
Resolved security alerts: Binary-Artifacts (#13), rand (#11, #10), rustls-webpki (#13, #12).
-
Atomic repush consolidating corpus expansion and security hardening.
-
VQL → VCL + verisimdb → verisim rename (ecosystem-wide, 2026-04-05). Internal code, docs, module names, and machine-readable manifests adopt the new ecosystem terminology.
verisim_bridge.rs(wasverisimdb_bridge.rs),vcl_ut.rsandvcl_ut.zig(werevql_ut.*),verisim.a2mlintegration manifest (wasverisimdb.a2ml). GitHub URLhyperpolymath/verisimdbpreserved.
-
F corpus* (
proofs/fstar/): 5 arithmetic lemmas (AddComm, AddAssoc, MulZero, NonNeg, Refl) discharged by F*’s SMT backend. -
TPTP corpus (
proofs/tptp/): 8 first-order problems for Vampire
E Prover, with known SZS statuses. -
DIMACS corpus (
proofs/dimacs/): 5 SAT/UNSAT problems for CaDiCaL + Kissat. -
Metamath seeds (
proofs/metamath/tiny.mm,broken.mm): smallest valid + deliberate-fail for therun_metamathrunner. -
Agda witness (
proofs/agda/IdentityLaws.agda): known-good natural-number identity proofs against agda-stdlib v2.3. -
BasicTotality.idr: small totality proofs that pass
idris2 --checkwith no external dependencies.
-
Three broken Idris2 proofs repaired (5/5 now type-check):
-
AxiomCompleteness.idr: 23×prf = impossible(invalid RHS) rewritten toRefl impossible. -
DispatchOrdering.idr: rewritten as a minimal working proof (6-stage dispatch pipeline with LT witnesses for adjacent stages). Original had invalid constructor signatures with named args in return-type position. -
ProverKindInjectivity.idr: replaced 48×lteSuccRight $ ... $ LTEReflchains (unification failed) with directLTESucc (...)constructor nesting. Type signature switched frommaxDiscriminantalias to literal48so Idris2 can unfoldS ?right. Addedimport Data.Nat.
-
-
Agda scoping bugs in
Basic.agda,List.agda,Nat.agda,Propositional.agda: files defined datatypes insidewhereclauses, putting them out of scope for outer signatures. All four rewritten as clean agda-stdlib-backed proofs (5/6.agdafiles now compile). -
TPTP precedence in
proofs/tptp/transitivity.p: added explicit parens around(lt(X,Y) & lt(Y,Z))before=>so E Prover parses it. Now Theorem-certified by both Vampire and E Prover. -
/api/verifyfalse-positive guard: server-level check inprove_handlerandverify_handlernow returnsvalid: falsewhenparse_stringproduces an emptyProofState(no goals, theorems, definitions, axioms, or variables) on non-empty input. Partial fix for the parse+export round-trip bug documented inTEST-NEEDS.md. Verified live: garbage to Coq/Lean now returnsvalid: false(wastrue); real proofs unaffected. -
Isabelle prover backend de-stubbed (
src/rust/provers/isabelle.rs).parse_stringpreviously discarded itscontentargument and always emitted a singleTerm::Const("True")goal, whichverify_proofthen short-circuited toOk(true)— Isabelle was never actually invoked. It now extracts the theory name and top-leveltheorem|lemma|corollarydeclarations with nested-comment-aware scanning, stashes the raw.thycontent inProofState.metadata["raw_thy_content"], andverify_proofwrites that content to a unique per-invocation temp directory under the correct filename (Isabelle requires<theory_name>.thy) before invokingisabelle process -l Main -e 'use_thys ["<path>"]'. -
Stale scaffolded temp-file path in Isabelle’s fallback verification path: previously wrote
echidna_verify.thycontainingtheory GeneratedProof, causing filename/theory-name mismatch rejection byisabelle build. Now writesGeneratedProof.thyin a unique temp dir.
-
strip_isabelle_commentshelper for the Isabelle backend (handles nested(* ... *)blocks). -
9 new unit tests for the Isabelle theory-header parsers (
test_strip_*,test_extract_theory_name_*,test_extract_lemma_names_*) and theparse_stringcontract (metadata populated, goals non-trivial, context theorems enumerated, empty-theory fallback goal). -
Parser verified against a real 788-line
Tropical.thy(tropical semiring formalisation): extracts theory name and all 55 theorems/lemmas.
-
Deployment of this fix to
echidna-nesyon Fly.io requires rebuilding the container with theisabellebinary on$PATH. Without it,verify_proofreturnsOk(false)with a"Failed to run Isabelle process"context error. -
Audit of all 50 prover backends confirmed Isabelle was the only truly stubbed one.
metamath.rsandtyped_wasm.rsare intentionally pure-Rust in-process verifiers (no subprocess needed by design). The remaining 47 external-solver backends all spawn real solver subprocesses viaCommand::new.
1.6.1 - 2026-03-23
-
Fixed
tamarin.rsDefinition type (added missing struct fields) -
Fixed non-exhaustive match arms in
main.rs -
Removed unused imports across codebase
-
Fixed
rustfmt.tomlfor stable Rust (removed unstable options) -
Fixed
resolvers.rssyntax error -
Applied
cargo fmtacross entire codebase
1.6.0 - 2026-03-08
-
libechidna_ffi.so— Core prover management (init, shutdown, status, verify) -
libechidna_overlay.so— Overlay networks (Tor, IPFS, Ethereum) -
libechidna_boj.so— BoJ cartridge protocol -
libechidna_typell.so— TypeLL type-level operations -
All functions use dual
pub export fnfor both Zig@importand C linker access -
Bidirectional callbacks: init/prover-change/error/verify-complete (core), status/error/progress/circuit/pin (overlay)
-
EchidnaABI.Types— 30 ProverKind, FfiStatus, TrustLevel, Handle with So non-null proof -
EchidnaABI.Layout— DivisibleBy proof witnesses for 6 struct memory layouts (FfiStringSlice, FfiOwnedString, FfiSerializedTerm, FfiProverConfig, FfiTactic, FfiTacticResult) -
EchidnaABI.Foreign— Core FFI function declarations -
Overlay,Overlay.Foreign— Overlay network types and FFI -
Boj.Foreign,TypeLL.Foreign— BoJ and TypeLL FFI declarations -
All 7 modules type-check with idris2 v0.8.0
-
echidna_ffi.h— 23 functions, 5 enums, 2 structs, 4 callback types -
echidna_overlay.h,echidna_boj.h,echidna_typell.h
-
Core adapter (ports 8100-8102: REST, gRPC, GraphQL)
-
Overlay adapter (port 8103)
-
BoJ adapter (port 7700)
-
TypeLL adapter (port 7800)
-
Tentacles adapter (port 8300)
-
TentaclesForeign.idr— Idris2 ABI definitions for 7-Tentacles agents with dependent type proofs -
tentacles.zig→libechidna_tentacles.so— Zig FFI with 7 agent management, OODA loop dispatch, and event callbacks -
echidna_tentacles.h— Generated C header for tentacles agent interface -
tentacles.v— zig REST adapter on port 8300 exposing agent management and OODA endpoints
-
30+ native Zig tests (
test-core-native,test-overlay-native) -
VerifiedLayout record bundling fields + totalSize + structAlign
erased proof -
Round-trip enum proofs (OverlayKind, CidVersion, etc.)
-
Platform pointer size proofs (ptrSize64, ptrSizeWASM)
-
ABI-FFI-README.md with ECHIDNA-specific architecture documentation
-
Idris2 Types.idr: Replaced
DecEq ProverKind(30-constructor catch-all) withEqvia ordinal comparison -
Idris2 Types.idr: Rewrote Handle to use
choose (not (ptr == 0))pattern -
Idris2 Layout.idr: Complete rewrite —
So-based proofs replaced withDivisibleBywitnesses (Idris2 v0.8 limitation: So proofs don’t reduce through named definitions) -
Idris2 Overlay.idr: Trailing
|||doc comment changed to--comments
1.5.0 - 2026-02-12
Complete implementation of 13-component trust-hardening system: - ✅ Solver binary integrity (SHAKE3-512 + BLAKE3 checksums) - ✅ SMT portfolio solving with cross-checking - ✅ Proof certificate validation (Alethe, DRAT/LRAT, TSTP) - ✅ Axiom usage tracking (4 danger levels: Safe, Noted, Warning, Reject) - ✅ Solver sandboxing (Podman, bubblewrap, none) - ✅ 5-level trust hierarchy for confidence scoring - ✅ Mutation testing for specifications - ✅ Unified prover dispatch pipeline - ✅ Cross-prover proof exchange (OpenTheory, Dedukti) - ✅ Pareto frontier for multi-objective proof search - ✅ Statistical confidence tracking with Bayesian timeout estimation
-
✅ Integrated with gitbot-fleet orchestration system
-
✅ Registered as Tier 1 Verifier bot
-
✅ 5 finding rule types (ECHIDNA-VERIFY-001 through 005)
-
✅ Shared context layer for cross-bot coordination
-
✅ Findings flow to Hypatia learning engine
-
✅ Full test coverage (4 integration tests)
-
✅ Documentation: echidnabot/FLEET-INTEGRATION.md
Prover Backends (30 total): - All backends fully implemented with substantial code - Tier 1: Agda, Coq/Rocq, Lean 4, Isabelle/HOL, Z3, CVC5 - Tier 2: Metamath, HOL Light, Mizar - Tier 3: PVS, ACL2, HOL4, Idris2, F*, Dafny, Why3, TLAPS, Twelf, Nuprl, Minlog, Imandra - ATPs: Vampire, E Prover, SPASS, Alt-Ergo - Constraint Solvers: GLPK, SCIP, MiniZinc, Chuffed, OR-Tools
API Interfaces: - GraphQL API (async-graphql, port 8081) - gRPC API (tonic, port 50051) - REST API (axum + OpenAPI, port 8000)
Documentation: - PERFORMANCE.md - Prover creation benchmarks (avg 2.5µs) - SECURITY-SCAN-FINAL.md - Security audit results - ROADMAP-v2.0.md - v2.0 feature roadmap - ECOSYSTEM-INTEGRATION.md - Ecosystem service integration - echidnabot/FLEET-INTEGRATION.md - Fleet integration guide
Configuration: - .echidnabot.toml - Self-verification configuration
Security (39% reduction in weak points): - Documented all 24 unsafe blocks in src/rust/ffi/mod.rs (FFI interop) - Documented all 7 unsafe blocks in src/rust/proof_search.rs (Chapel FFI) - Converted HTTP URLs to HTTPS in echidna-owned code (32 fixes) - Verified bash variable quoting (11 scripts checked) - Cleaned up TODO/FIXME technical debt markers (5 files) - Final scan: 50 weak points (down from 82)
Prover Creation Benchmarks: - Fastest: MiniZinc (116ns) - Slowest: Isabelle (15.5µs) - Average: ~2.5µs