Echidnabot is a Tier 1 (Verifier) bot in the gitbot-fleet ecosystem. It acts as the bridge between the ECHIDNA neurosymbolic theorem proving platform and the gitbot-fleet orchestration layer. It receives webhook events, dispatches verification requests to ECHIDNA, and reports findings back to the fleet.
Current state: ~65-70% actual completion (claims 75%). Core infrastructure complete (Axum server, webhooks, database, GraphQL, ECHIDNA HTTP client). Critical gaps: container isolation is EMPTY, bot modes not wired into handlers, retry logic not integrated, ZERO automated tests.
File: src/executor/container.rs
This file is EMPTY. Proofs currently run without any isolation — a malicious proof could execute arbitrary code on the host.
pub struct PodmanExecutor {
image: String,
timeout: Duration,
memory_limit: String,
network: bool, // should be false for proof checking
}-
Run proof-checking in Podman containers (rootless)
-
No network access (
--network=none) -
Memory limit (
--memory=512mdefault, configurable) -
CPU limit (
--cpus=2default, configurable) -
Timeout with SIGKILL (
--timeout) -
Read-only filesystem except
/tmpfor proof artifacts -
Drop ALL capabilities (
--cap-drop=ALL) -
No new privileges (
--security-opt=no-new-privileges)
-
Mount proof files as read-only volume
-
Capture stdout/stderr for proof results
-
Parse exit code: 0 = verified, non-zero = failed/timeout
-
Clean up containers after completion
-
Check if Podman is available at startup
-
If not: log warning, use
bubblewrap(bwrap) as lighter alternative -
If neither: refuse to run proofs (fail-safe, not fail-open)
Files: src/webhook/ handlers, src/bot/modes.rs or equivalent
Bot modes are defined (Verifier, Advisor, Consultant, Regulator) but NOT connected to the webhook handlers.
-
Read bot mode from
.bot_directives/echidnabot.scmin the target repo -
Default to
Verifiermode if no directive found -
Mode determines:
-
Verifier: Full proof checking, block PR on failure
-
Advisor: Check proofs, comment results, don’t block
-
Consultant: Only analyze when explicitly requested (@echidnabot check)
-
Regulator: Enforce minimum proof coverage thresholds
-
-
On PR open/update: determine mode → dispatch appropriate action
-
Verifier/Advisor: automatically trigger proof checking
-
Consultant: only respond to explicit mentions
-
Regulator: check proof coverage metrics
-
On push to main: determine mode → dispatch appropriate action
-
All modes: update proof status dashboard
Files: src/scheduler/ or src/executor/
Retry logic is defined somewhere in the codebase but NOT integrated into the actual execution pipeline.
-
Locate the retry/backoff implementation
-
Wire it into the proof execution pipeline:
-
Container startup failure → retry with backoff
-
ECHIDNA API timeout → retry up to 3 times
-
Transient network errors → retry with exponential backoff
-
Proof timeout → do NOT retry (intentional, resource-saving)
-
-
If ECHIDNA API fails 5 consecutive times → circuit breaker opens
-
Log error, notify fleet coordinator
-
Auto-reset after 5 minutes
The repo has ZERO tests despite importing test libraries.
-
Test: HTTP client constructs correct API requests
-
Test: response parsing handles success case
-
Test: response parsing handles error case
-
Test: timeout handling
-
Test: valid HMAC-SHA256 signature passes
-
Test: invalid signature is rejected
-
Test: missing signature header is rejected
-
Test: query resolves proof status
-
Test: mutation triggers proof check
-
Test: authentication required for mutations
-
Test: proof result CRUD operations
-
Test: concurrent access handling
-
Test: full webhook → dispatch → (mock) ECHIDNA → finding → fleet context flow
-
Use mock ECHIDNA server (axum test server)
-
License: must be
MPL-2.0(not AGPL) -
Author: must be
"Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>"
-
Every
.rsfile needs:// SPDX-License-Identifier: CC-BY-SA-4.0 // SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell
-
Update completion to actual percentage
-
Fix tech-stack if inaccurate
-
Add session history entry
Connect echidnabot to echidna’s trust verification mechanisms.
-
When ECHIDNA returns a proof result, include the confidence level in the Finding:
-
Level 5: Cross-checked by 2+ independent small-kernel systems
-
Level 4: Checked by small-kernel system (Lean4, Coq, Isabelle) with certificate
-
Level 3: Single prover with proof certificate (Alethe, DRAT/LRAT)
-
Level 2: Single prover result without certificate
-
Level 1: Large-TCB system or unchecked result
-
-
Map confidence to Finding severity and metadata
-
Before dispatching to ECHIDNA, verify that the solver binaries haven’t been tampered with
-
Check SHA256 manifest (see echidna SONNET-TASKS.md Task 2)
-
Report integrity status in Finding metadata
-
Parse ECHIDNA proof results for axiom usage
-
Flag proofs using
sorry,Admitted,postulate,choice,--type-in-type -
Report axiom reliance as separate Finding with Warning severity