//! Predicate IR — a small, serializable expression language for prerequisites.
//!
//! See `docs/superpowers/specs/2026-04-29-gated-trait-design.md` for the
//! design rationale. The engine evaluator and the load-time validator both
//! operate on [`Predicate`]; plugin authors generally write a higher-level
//! DSL (the `gate!` proc-macro) that lowers to this IR.

pub mod eval;
pub mod explain;
pub mod types;

pub use eval::EvalContext;
pub use explain::{ExplainNode, ResolvedSet, ResolvedValue};
pub use types::{
    EntityRef, EntitySet, MetricKind, Op, PoolMode, Predicate, SettingKey, SourceKey, Value,
};

#[cfg(test)]
mod tests;
