Skip to content

Latest commit

 

History

History
590 lines (496 loc) · 27.4 KB

CHANGELOG.adoc

File metadata and controls

590 lines (496 loc) · 27.4 KB

Changelog

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.

[Unreleased]

Added — structural cross-prover identity keys, 2026-10-22

  • src/rust/corpus/canonical.rs — normalises a declaration’s type into a nameless prefix term (variables renamed v0, v1, …, module qualifiers dropped, operator spellings and binder keywords canonicalised, sorts mapped to NAT/INT/TYPE/…, ascriptions unwrapped) and hashes it with SHA-256 under scheme dk-shape-v1. No dictionary and no per-prover naming convention is consulted.

  • DeclGraph gains cross_prover_identity_key, cross_prover_skeleton_key (binders and sorts erased — the tier-2 join for Isabelle and Why3), identity_scheme and canonical_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) and QueryResultEntry (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).

Changed — structural 256-dim Vector octad, 2026-10-22

  • The default embedder is now StructuralEmbedder: 1–3-grams of the canonical type atoms hashed into 256 buckets (L2-normalised, model echidna-corpus-structural-v2). corpus near canonicalises 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 as Corpus::compute_embeddings_legacy for GNN FEATURE_DIM parity and for replaying octads written before this change. The capnp embedder / embedder_dim fields 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.

Added — corpus adapters for the estate’s own TCB languages, 2026-10-22

  • src/rust/corpus/spark_ada.rs — Ada/SPARK adapter (*.ads / *.adb). Extracts packages, with/use clauses, subprograms with their Pre/Post/Contract_Cases/Global/Depends aspects, and the GNATprove escape hatches: pragma Assume (and the old --# assume form) is reported as a postulate, plus pragma Annotate proof disabling, pragma Suppress, Unchecked_Conversion, pragma Import and SPARK_Mode => Off. Recognises the sparklib Lemma_* + Ghost lemma convention as sparklib:lemma so 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 tags pearlite!, proof_assert!, snapshot!, unsafe, transmute and extern "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 — the hyperpolymath_estate profile: every repository’s src/abi Idris2 tree (a name = "*" 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 with repo:: name prefixes and repo: / layer: module tags. ECHIDNA_ESTATE_MANIFEST overrides the manifest path.

  • Corpus::reindex_links() — split out of reindex() 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.toml 8 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.rs and tlaps.rs to the top (separation logic for the Zig/Rust layers; temporal proofs for the Elixir/OTP and SNIF layers), alphaproof.rs and naproche.rs to the bottom (no published corpus or file format, and no estate vocabulary).

Added — verification vocabulary 2026-10-22

  • 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 as CrossProverDicts::verification_systems (Rust) and SaturationSynonyms.load_verification_systems (Julia).

  • _msc2020.toml 87 → 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/68V35 re-pointed to their current meanings).

  • Consumer wiring: corpus crossquery now searches the cross-prover dictionaries as well as the per-prover tables, so crossquery frame-rule, crossquery estate-snif or crossquery 68Q60 resolve; --provers-only restores the old scope. CrossProverDicts::tables()/len() and SynonymTable::merge_cross_prover_dicts() added. The Julia training launcher pre-loads all five dictionaries at launch.

  • idris2.toml 6 → 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, 18D05 and 14F08 corrected 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.

Added — arbitration 2026-10-14 (ECH-05)

  • Fidelity-levelled arbitration: ProverAttempt carries FidelityEvidence (KernelTranslation / DeclaredCorrespondence / None) and ArbitratedVerdict gains level (belief / epi / sound), retracted and warranted_term. sound needs every fused attempt to be a kernel-checked translation to one exchange-layer term (exchange::term_hash); a synonym collision stays belief however many backends agree. ResultArbiter::retract marks a backend unsound and lowers every verdict that rested on it. Numeric fusion is unchanged: tests/arbitration_regression_test.rs replays the pre-change numbers. Dispatch attaches no evidence yet, so dispatched verdicts are belief.

  • EchidnaABI.Arbitration (Idris2): the three-level verdict as a closed sum whose Sound constructor carries the hash-equality proofs, with the classifier and its properties; tests/abi/{accept,reject} fixtures checked by scripts/abi-fixtures.sh in idris2-abi-ci.yml.

Added — integrations 2026-10-05

  • echidna prove --output json: prints exactly one echidna.prove.result/1 object (JCS-canonical I-JSON) on stdout, logs to stderr. Statuses verified / failed / error / timeout / unknown, mapped from ProverOutcome; trust.confidence is null unless receipt-backed. Human output stays the default. See docs/PROVE-RESULT-CONTRACT.adoc.

  • echidna-core 0.2.0 is consumable by clients (echidnabot, proof-burrower): adds ProverKind (moved from echidna::provers, re-exported there, no source change for ECHIDNA), the echidna.prove.result/1 type with a strict parser, and the trust kernel as echidna_core::trust. Git-dependency recipe and stability policy in crates/echidna-core/README.adoc.

  • ffi/zig builds 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.

Fixed — integrations 2026-10-05

  • 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, so echidna-core and the trust kernel tests never ran in CI.

  • abi: EchidnaABI.Gnn and EchidnaABI.TacticRecord now declare %default total (both already type-check total).

  • docs(creusot): CREUSOT-SETUP.adoc no 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.

Added — governance 2026-10-09

  • echidna_chora.deed at the repo root: the first deed under the estate one-deed-per-repo doctrine (standards#837), translated from CLADE.a2ml (family 1) and ECOSYSTEM.a2ml (family 2) per the standards 1-formats/deed/mappings/ frame, following the proof-burrower_chora.deed precedent; clade names verbatim from the gv-clade-index taxonomy seed; passes the normative deed.abnf validator. The .a2ml descriptiles stay until their consumers move; identity/status edits touch both surfaces until then (noted in the deed header).

Fixed — governance 2026-10-09

  • 0-AI-MANIFEST.a2ml: full-version was frozen at a stale 1.x value; it now tracks Cargo.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).

Changed

  • Licence: AGPL-3.0-or-later → MPL-2.0 for code and the specification surface, CC-BY-SA-4.0 for documentation (owner ruling D262, 2026-10-01). echidna-playground/ stays MPL-2.0, untouched. LICENSE is now the verbatim Mozilla text; NOTICE, .reuse/dep5, the crate manifests, build/guix.scm, README, CLAUDE.md, the wiki and docs/DEBT.adoc record the re-ruling. The .a2ml manifests keep their AGPL headers until their .deed conversion, so LICENSES/AGPL-3.0-or-later.txt stays until then.

Fixed

  • 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, leaving chpl unable to load. Also switched install to apt-get install -y /tmp/chapel.deb so libclang-cpp14 / libllvm14 are resolved declaratively in one pass.

Added — Saturation campaign 2026-06-01

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×). See docs/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 schema crates/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 with wave3/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).

Changed

  • src/rust/suggest/synonyms.rs: load_all extended to 14 provers; new CrossProverDicts + 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.rs cite the new schemas
    arbiters.

Documentation

  • 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.

Verification

  • cargo check --lib clean (~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.


[2.3.0] - 2026-06-01

Added

  • 105 ProverKind variants (exhaustive HP type-checker ecosystem).

  • Updated ProverKindInjectivity.idr to 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.

[2.2.0] - 2026-04-05

Changed

  • 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 (was verisimdb_bridge.rs), vcl_ut.rs and vcl_ut.zig (were vql_ut.*), verisim.a2ml integration manifest (was verisimdb.a2ml). GitHub URL hyperpolymath/verisimdb preserved.

Added

  • 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 the run_metamath runner.

  • 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 --check with no external dependencies.

Fixed

  • Three broken Idris2 proofs repaired (5/5 now type-check):

    • AxiomCompleteness.idr: 23× prf = impossible (invalid RHS) rewritten to Refl 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 $ ... $ LTERefl chains (unification failed) with direct LTESucc (...) constructor nesting. Type signature switched from maxDiscriminant alias to literal 48 so Idris2 can unfold S ?right. Added import Data.Nat.

  • Agda scoping bugs in Basic.agda, List.agda, Nat.agda, Propositional.agda: files defined datatypes inside where clauses, putting them out of scope for outer signatures. All four rewritten as clean agda-stdlib-backed proofs (5/6 .agda files 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/verify false-positive guard: server-level check in prove_handler and verify_handler now returns valid: false when parse_string produces an empty ProofState (no goals, theorems, definitions, axioms, or variables) on non-empty input. Partial fix for the parse+export round-trip bug documented in TEST-NEEDS.adoc. Verified live: garbage to Coq/Lean now returns valid: false (was true); real proofs unaffected.

  • Isabelle prover backend de-stubbed (src/rust/provers/isabelle.rs). parse_string previously discarded its content argument and always emitted a single Term::Const("True") goal, which verify_proof then short-circuited to Ok(true) — Isabelle was never actually invoked. It now extracts the theory name and top-level theorem|lemma|corollary declarations with nested-comment-aware scanning, stashes the raw .thy content in ProofState.metadata["raw_thy_content"], and verify_proof writes that content to a unique per-invocation temp directory under the correct filename (Isabelle requires <theory_name>.thy) before invoking isabelle process -l Main -e 'use_thys ["<path>"]'.

  • Stale scaffolded temp-file path in Isabelle’s fallback verification path: previously wrote echidna_verify.thy containing theory GeneratedProof, causing filename/theory-name mismatch rejection by isabelle build. Now writes GeneratedProof.thy in a unique temp dir.

Added

  • strip_isabelle_comments helper 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 the parse_string contract (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.

Notes

  • Deployment of this fix to echidna-nesy on Fly.io requires rebuilding the container with the isabelle binary on $PATH. Without it, verify_proof returns Ok(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.rs and typed_wasm.rs are intentionally pure-Rust in-process verifiers (no subprocess needed by design). The remaining 47 external-solver backends all spawn real solver subprocesses via Command::new.


1.6.1 - 2026-03-23

Fixed

  • Fixed tamarin.rs Definition type (added missing struct fields)

  • Fixed non-exhaustive match arms in main.rs

  • Removed unused imports across codebase

  • Fixed rustfmt.toml for stable Rust (removed unstable options)

  • Fixed resolvers.rs syntax error

  • Applied cargo fmt across entire codebase

Changed

  • 389 tests passing (up from 306+)

  • Project now compiles cleanly on stable Rust toolchain


1.6.0 - 2026-03-08

Major Features

Zig FFI Layer (4 Shared Libraries)
  • 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 fn for both Zig @import and C linker access

  • Bidirectional callbacks: init/prover-change/error/verify-complete (core), status/error/progress/circuit/pin (overlay)

Idris2 ABI Formal Proofs (7 Modules, Zero believe_me)
  • 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

Generated C Headers
  • echidna_ffi.h — 23 functions, 5 enums, 2 structs, 4 callback types

  • echidna_overlay.h, echidna_boj.h, echidna_typell.h

zig REST Adapters
  • Core adapter (ports 8100-8102: REST, gRPC, GraphQL)

  • Overlay adapter (port 8103)

  • BoJ adapter (port 7700)

  • TypeLL adapter (port 7800)

  • Tentacles adapter (port 8300)

Tentacles FFI/ABI Layer (7-Tentacles Agent System)
  • 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

Added

  • 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

Fixed

  • Idris2 Types.idr: Replaced DecEq ProverKind (30-constructor catch-all) with Eq via ordinal comparison

  • Idris2 Types.idr: Rewrote Handle to use choose (not (ptr == 0)) pattern

  • Idris2 Layout.idr: Complete rewrite — So-based proofs replaced with DivisibleBy witnesses (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

Major Features

Trust & Safety Pipeline

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

Gitbot-Fleet Integration
  • ✅ 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

Added

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

Fixed

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)

Performance

Prover Creation Benchmarks: - Fastest: MiniZinc (116ns) - Slowest: Isabelle (15.5µs) - Average: ~2.5µs

Testing

  • 306+ tests (all passing)

  • Fleet integration: 4 tests

  • Trust pipeline: Integration tests for all components

1.0.0 - 2025-12-01

Initial Release

  • 30 prover backend stubs

  • Basic trust pipeline

  • GraphQL/gRPC/REST APIs

  • Julia ML scaffolding