Expand description
Builder for explainable evidence chains.
An EvidenceChain is an ordered list of EvidenceLinks — each link
records one verifiable observation, an optional metric, and whether that
observation met its threshold. Calling EvidenceChain::finalize computes
an aggregate EvidenceStrength (pass ratio) across all links.
The design is domain-agnostic: the same types work for fraud detection, trading signals, compliance checks, on-chain analysis, or any system where decisions must be auditable and explainable.
§Quick start
use evidence_chain::{EvidenceChain, EvidenceLink, EvidenceCategory};
let mut chain = EvidenceChain::new("fraud-detector", "1.0.0");
chain.add_link(
EvidenceLink::new(EvidenceCategory::Value, "Transaction above limit", "tx:8f3a")
.with_metric(15_000.0, "USD")
.with_threshold(10_000.0, true),
);
chain.add_link(
EvidenceLink::new(EvidenceCategory::Behavioral, "New device fingerprint", "device:c91b")
.with_threshold(1.0, true),
);
chain.add_link(
EvidenceLink::new(EvidenceCategory::Temporal, "Outside normal hours", "2024-03-15T03:42Z")
.with_threshold(1.0, false), // did not meet threshold
);
chain.finalize();
assert_eq!(chain.strength.total_checks, 3);
assert_eq!(chain.strength.passed_checks, 2);
assert!((chain.strength.ratio - 2.0 / 3.0).abs() < 1e-9);§Serialization
All types implement serde::Serialize and serde::Deserialize, so chains
can be stored as JSON, embedded in database columns, or sent over the wire.
use evidence_chain::{EvidenceChain, EvidenceLink, EvidenceCategory};
let mut chain = EvidenceChain::new("signal-v1", "2.0.0");
chain.add_link(EvidenceLink::new(EvidenceCategory::Structural, "Pattern matched", "ref:001"));
chain.finalize();
let json = serde_json::to_string(&chain).unwrap();
let decoded: EvidenceChain = serde_json::from_str(&json).unwrap();
assert_eq!(decoded.rule_id, "signal-v1");Structs§
- Evidence
Chain - An ordered chain of evidence links for a single decision.
- Evidence
Link - A single verifiable observation in an
EvidenceChain. - Evidence
Strength - Aggregate pass/fail ratio across all links in an
EvidenceChain.
Enums§
- Evidence
Category - Broad category of an evidence observation.