//! Constraint policies for separation of duty, cardinality, prerequisites and
//! time windows, plus the store and validator that enforce them.
//!
//! Constraint checking is a fail-closed gate: `ConstraintValidator` turns a
//! violation or a store error into an `Err`, and a caller on a security path must
//! treat that as a denial. The opposite convention also holds: absence of a stored
//! policy means "no restriction", so seeding the `ConstraintStore` is a
//! security-critical precondition and an empty store permits everything.
/// Constraint policy types: SSD/DSD separation-of-duty, cardinality, prerequisite
/// and temporal windows. Inert data plus pure predicates, with no store access.
/// `ConstraintStore` trait and the process-local `InMemoryConstraintStore`.
/// Store reads are the gate's only data source; read errors must not be
/// swallowed into an empty list, which would turn the gate into a no-op.
/// `ConstraintValidator`, the fail-closed entry point for assignment-time checks.
/// Re-exports the separation-of-duty and cardinality/prerequisite/temporal types.
pub use ;
/// Re-exports the constraint store trait and its in-memory implementation.
pub use ;
/// Re-exports the validator that applies the stored constraints.
pub use ConstraintValidator;