barycenters (Rust)
Govern any agent, and see what /admit would have blocked. Ships in shadow mode. Zero dependencies — the HTTP transport is injected via the Transport trait, so you wire your own client (reqwest, ureq, std) and the crate pulls in nothing.
use ;
let mut c = new; // shadow by default
let d = c.admit?;
// shadow: admit never returns a refusal error; d.would_block tells you what enforce would do.
println!;
// → "2 of 17 action(s) would have been blocked by /admit"
Implement Transport once with the HTTP client of your choice:
; // e.g. wrapping ureq or reqwest::blocking
When you're ready: enforce
Flipping to Mode::Enforce is a deliberate human decision (authority_effect 0 → 1). A refusal returns AdmitError::Refused; an unreachable endpoint fails closed. Retries (default 3, transport failures only) carry one idempotency key → the service admits at-most-once; a decision is terminal and never retried.
Honest by default
No endpoint wired → the decision is AWAITING; it never fabricates a pass or a block it cannot prove. Authority enters at exactly one point, and it is a human's — this crate only asks.