mod candidate;
pub mod controllers;
mod decision;
mod pipeline;
pub use candidate::MemoryCandidate;
pub use controllers::contradiction::ContradictionGate;
pub use controllers::duplicate::{DuplicateAction, DuplicateDetector};
pub use controllers::rate_limiter::RateLimiter;
pub use controllers::surprise::SurpriseGate;
pub use controllers::token_budget::TokenBudgetGate;
pub use decision::{AdmissionDecision, ControllerVerdict};
pub use pipeline::{AdmissionPipeline, PipelineResult};
use hirn_core::HirnResult;
#[async_trait::async_trait]
pub trait AdmissionController: Send + Sync {
fn name(&self) -> &str;
async fn evaluate(&self, candidate: &MemoryCandidate) -> HirnResult<AdmissionDecision>;
}