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.
-
src/rust/corpus/canonical.rs— normalises a declaration’s type into a nameless prefix term (variables renamedv0, v1, …, module qualifiers dropped, operator spellings and binder keywords canonicalised, sorts mapped toNAT/INT/TYPE/…, ascriptions unwrapped) and hashes it with SHA-256 under schemedk-shape-v1. No dictionary and no per-prover naming convention is consulted. -
DeclGraphgainscross_prover_identity_key,cross_prover_skeleton_key(binders and sorts erased — the tier-2 join for Isabelle and Why3),identity_schemeandcanonical_type. All are#[serde(default)], so existing octad files still load;cross_prover_id(the name-tail hash) is still emitted for compatibility. -
GraphPayload(VeriSim bridge) andQueryResultEntry(VCL-UT) carry the structural key through to consumers. -
echidna corpus identity <pattern>— groups declarations by structural key, with--skeleton(print the tier-2 key) and--cross-only(only groups spanning several adapters).
-
The default embedder is now
StructuralEmbedder: 1–3-grams of the canonical type atoms hashed into 256 buckets (L2-normalised, modelechidna-corpus-structural-v2).corpus nearcanonicalises the query first, so a query written in one prover’s syntax retrieves entries written in another’s. -
HashEmbedder(32-dim,echidna-corpus-hash-v1) remains available asCorpus::compute_embeddings_legacyfor GNNFEATURE_DIMparity and for replaying octads written before this change. The capnpembedder/embedder_dimfields carry both, and consumers must compare them before comparing vectors. -
Supersedes the embedder half of D6 in
docs/decisions/2026-04-28-corpus-and-design-search.adoc; the decision record is annotated in place.
-
src/rust/corpus/spark_ada.rs— Ada/SPARK adapter (*.ads/*.adb). Extracts packages,with/useclauses, subprograms with theirPre/Post/Contract_Cases/Global/Dependsaspects, and the GNATprove escape hatches:pragma Assume(and the old--# assumeform) is reported as a postulate, pluspragma Annotateproof disabling,pragma Suppress,Unchecked_Conversion,pragma ImportandSPARK_Mode => Off. Recognises the sparklibLemma_*+Ghostlemma convention assparklib:lemmaso reusable lemmas are separable from executable subprograms. Spec and body are paired across files into one entry (unambiguous pairs only). -
src/rust/corpus/creusot.rs— Rust/Creusot adapter (*.rs). Folds#[requires],#[ensures],#[invariant],#[variant],#[logic],#[predicate]and#[cfg(creusot)]into the entry’s statement, and tagspearlite!,proof_assert!,snapshot!,unsafe,transmuteandextern "C".#[trusted]is reported as a postulate, because Creusot accepts the contract and skips the body.#[test]/#[cfg(test)]items are excluded: a corpus of proofs should not be dominated by test functions. -
src/rust/corpus/profile.rs+data/corpus-profiles/hyperpolymath-estate.toml— thehyperpolymath_estateprofile: every repository’ssrc/abiIdris2 tree (aname = "*"rule, so new repos are picked up without a manifest change) plus the five Agda type libraries (echo-types,epistemic-types,secret-types,tropical-types,choreographic-types). Sub-trees are indexed by their own adapters, then merged withrepo::name prefixes andrepo:/layer:module tags.ECHIDNA_ESTATE_MANIFESToverrides the manifest path. -
Corpus::reindex_links()— split out ofreindex()so a merge can rebuild the lookup maps without re-running discipline detection under the merging adapter’s name. -
crates/echidna-core-creusot/src/estate_layers.rs— Creusot-annotated layer classification (PO-L1..L5): totality, partition, and the checkable form of "every ABI is Idris2". Stated, not proved, like the rest of that crate; the stable-Rust tests mirror every obligation. -
_verification_systems.toml8 rows for the syntax the new adapters detect (`+pragma_assume, `contract_cases,spark_mode,ghost_lemma,trusted_attribute,pearlite,proof_assert,variant_clause), so the semantic layer can resolve what the indexer reports. -
Corpus adapters: 17 → 20. Open backlog re-ordered:
iris.rsandtlaps.rsto the top (separation logic for the Zig/Rust layers; temporal proofs for the Elixir/OTP and SNIF layers),alphaproof.rsandnaproche.rsto the bottom (no published corpus or file format, and no estate vocabulary).
-
data/synonyms/_verification_systems.toml(665 rows): the first cross-prover dictionary aimed at program verification rather than undergraduate pure mathematics. Sections: bitvectors and machine integers, memory layout and ABI, ownership and slicing, separation logic and region framing, contracts and proof obligations, termination measures, refinement and semantics, resource algebras (dioid / tropical / antichain / fixpoint), information flow and epistemic vocabulary, concurrency, and the estate layer boundaries. Loaded asCrossProverDicts::verification_systems(Rust) andSaturationSynonyms.load_verification_systems(Julia). -
_msc2020.toml87 → 181 codes. 68Qxx (26 codes) and 68Nxx (10 codes) are now complete; 03B/03C/03D/03F cover logic, computability and proof theory; 68M/68P/68T/68V/68W and 06B35 cover the systems and proof assistant ring. Nineteen pre-existing rows had MSC2010 or transferred wording and are repaired in place, with a note naming the MSC2020 code (03B15→ 03B16/03B38,68T15→ 68V15,68V05/68V25/68V30/68V35re-pointed to their current meanings). -
Consumer wiring:
corpus crossquerynow searches the cross-prover dictionaries as well as the per-prover tables, socrossquery frame-rule,crossquery estate-sniforcrossquery 68Q60resolve;--provers-onlyrestores the old scope.CrossProverDicts::tables()/len()andSynonymTable::merge_cross_prover_dicts()added. The Julia training launcher pre-loads all five dictionaries at launch. -
idris2.toml6 → 26 rows:Fin,Bits8/16/32/64,Int8..64,Vect,So,LTE,Dec,cast, totality annotations,%foreign,export,Prim__,Ptr,IO,Ref, multiplicities and erasure — the vocabulary the Idris2 ABI layer is written in. -
More MSC repairs:
18N40,18G80,18D05and14F08corrected against zbMATH (18N40 is model categories, not HoTT; 18G80 is derived categories, not infinity-categories; 18D05 is MSC2010-only and moved to 18N10). Added 18G35, 18M05, 18N45 and 18N60; MSC total 181. -
Doc mirrors: the wiki pages named a
SynonymTable::with_msc2020()API that never existed; they now use the real loader. Wiki/architecture pages updated to the five-dictionary reality. -
Estate language policy recorded in
data/synonyms/README.adoc: ABIs in Idris2, APIs and FFIs in Zig, BEAM native boundaries as SNIFs (not bare NIFs), Rust/Creusot for the Rust layer, Julia and Chapel for their layers, and no Python anywhere in the tree.
-
Fidelity-levelled arbitration:
ProverAttemptcarriesFidelityEvidence(KernelTranslation/DeclaredCorrespondence/None) andArbitratedVerdictgainslevel(belief/epi/sound),retractedandwarranted_term.soundneeds every fused attempt to be a kernel-checked translation to one exchange-layer term (exchange::term_hash); a synonym collision staysbeliefhowever many backends agree.ResultArbiter::retractmarks a backend unsound and lowers every verdict that rested on it. Numeric fusion is unchanged:tests/arbitration_regression_test.rsreplays the pre-change numbers. Dispatch attaches no evidence yet, so dispatched verdicts arebelief. -
EchidnaABI.Arbitration(Idris2): the three-level verdict as a closed sum whoseSoundconstructor carries the hash-equality proofs, with the classifier and its properties;tests/abi/{accept,reject}fixtures checked byscripts/abi-fixtures.shinidris2-abi-ci.yml.
-
echidna prove --output json: prints exactly oneechidna.prove.result/1object (JCS-canonical I-JSON) on stdout, logs to stderr. Statusesverified/failed/error/timeout/unknown, mapped fromProverOutcome;trust.confidenceisnullunless receipt-backed. Human output stays the default. Seedocs/PROVE-RESULT-CONTRACT.adoc. -
echidna-core0.2.0 is consumable by clients (echidnabot, proof-burrower): addsProverKind(moved fromechidna::provers, re-exported there, no source change for ECHIDNA), theechidna.prove.result/1type with a strict parser, and the trust kernel asechidna_core::trust. Git-dependency recipe and stability policy incrates/echidna-core/README.adoc. -
ffi/zigbuilds and is tested in CI (zig-ffi-ci.yml, Zig 0.15.2): it previously compiled on no Zig release. Pure Zig (page allocator, no libc); the estate unified-api-adapter purity check (hyperpolymath/cicd-suite) runs on every PR.
-
ci(chapel): build the Zig FFI with
-Dcpu=baseline; the artifact runs on a different runner, and native-CPU code crashed there with SIGILL in "Rust Build with Chapel Feature". -
ci(rust): check, clippy and test now run with
--workspace; before, only the root package was tested, soechidna-coreand the trust kernel tests never ran in CI. -
abi:
EchidnaABI.GnnandEchidnaABI.TacticRecordnow declare%default total(both already type-check total). -
docs(creusot):
CREUSOT-SETUP.adocno longer claims the Creusot job is a hard gate or that milestones 8c-M1..M3 are done; it records why Creusot does not run in CI.
-
echidna_chora.deedat the repo root: the first deed under the estate one-deed-per-repo doctrine (standards#837), translated fromCLADE.a2ml(family 1) andECOSYSTEM.a2ml(family 2) per the standards1-formats/deed/mappings/frame, following theproof-burrower_chora.deedprecedent; clade names verbatim from the gv-clade-index taxonomy seed; passes the normativedeed.abnfvalidator. The.a2mldescriptiles stay until their consumers move; identity/status edits touch both surfaces until then (noted in the deed header).
-
0-AI-MANIFEST.a2ml:full-versionwas frozen at a stale 1.x value; it now tracksCargo.toml. The UI runtime line reads Bun (Deno was banned estate-wide 2026-09-22; JS-RUNTIME-POLICY), and the deed is listed under[canonical-locations]. -
.machine_readable/descriptiles/STATE.a2ml: refreshed past the 2026-10-05 integrations wave and recorded the deed baseline (session protocol).
-
Licence:
AGPL-3.0-or-later→MPL-2.0for code and the specification surface,CC-BY-SA-4.0for documentation (owner ruling D262, 2026-10-01).echidna-playground/stays MPL-2.0, untouched.LICENSEis now the verbatim Mozilla text; NOTICE,.reuse/dep5, the crate manifests,build/guix.scm, README, CLAUDE.md, the wiki anddocs/DEBT.adocrecord the re-ruling. The.a2mlmanifests keep their AGPL headers until their.deedconversion, soLICENSES/AGPL-3.0-or-later.txtstays until then.
-
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.adoc.
-
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.adoc. -
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.adoc(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.adoc
docs/architecture/JULIA-SATURATION-HOOKS.adoc(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.adoc. -
Handover lane doc at
docs/handover/PROVER-CORPUS-SATURATION-LANE.adoc(collision-avoidance contract withwave3/161-162-bench-telemetry-corpus). -
Corpus adapter index at
docs/CORPUS-ADAPTERS.adoc. -
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.adoc / SECURITY.md / AUTHORS.adoc.
-
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.adoc. 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.adoc - 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