//! Shared in-memory port adapters for Phase 5 trait integration tests.
//!
//! Each adapter is HashMap-backed and intentionally minimal — Sub-cycle B
//! exercises the engine wiring, not the substrate adapter logic itself.
//! Production substrates (KVRocks, Postgres, HTTP userinfo) live in
//! chat-auth / pas-external; their behavior is verified at those crates'
//! boundary, not here.
//!
//! Each adapter has two constructors:
//!
//! - `new()` — happy-path substrate: tracks state in memory.
//! - `failing()` — always returns `Transient`, lets engine integration
//! tests prove the fail-closed posture (substrate down → reject token,
//! not admit).
//!
//! Mutex poison recovery via `.unwrap_or_else(|p| p.into_inner())` keeps
//! the workspace lint (`clippy::unwrap_used` deny) clean — the lint
//! flags `Result::unwrap` only, not `unwrap_or_else`.
// each test file uses a subset
pub use MemoryEpochRevocation;
pub use ;
pub use MemoryReplayDefense;
pub use MemorySessionRevocation;