duende_policy/lib.rs
1// Iron Lotus: Allow unwrap/expect in tests for clear failure messages
2#![cfg_attr(test, allow(clippy::unwrap_used, clippy::expect_used, clippy::panic))]
3
4//! # duende-policy
5//!
6//! Policy enforcement for the Duende daemon framework.
7//!
8//! This crate provides:
9//! - **Quality gates**: PMAT-based code quality enforcement
10//! - **Circuit breakers**: 3-state failure protection
11//! - **Resource limiters**: cgroups/setrlimit enforcement
12//! - **Jidoka automation**: Stop-on-error with recommendations
13//!
14//! ## Iron Lotus Framework
15//!
16//! - **Jidoka** (自働化): Automatic stop on quality violations
17//! - **Poka-Yoke** (ポカヨケ): Mistake-proofing via policy enforcement
18//! - **Standardized Work**: Consistent policy application
19//!
20//! ## Example
21//!
22//! ```rust,ignore
23//! use duende_policy::{CircuitBreaker, CircuitState};
24//!
25//! let mut breaker = CircuitBreaker::new(5, Duration::from_secs(30));
26//!
27//! if breaker.allow() {
28//! match do_work().await {
29//! Ok(_) => breaker.record_success(),
30//! Err(_) => breaker.record_failure(),
31//! }
32//! }
33//! ```
34
35#![deny(unsafe_code)]
36#![warn(missing_docs)]
37
38pub mod circuit_breaker;
39pub mod error;
40pub mod gate;
41pub mod jidoka;
42pub mod limiter;
43
44pub use circuit_breaker::{CircuitBreaker, CircuitState};
45pub use error::{PolicyError, Result};
46pub use gate::{GateConfig, GateResult, QualityAnalysis, QualityGate, QualityViolation};
47pub use jidoka::{
48 CheckItem, Evidence, JidokaCheck, JidokaGate, JidokaResult, JidokaViolation, ViolationKind,
49};
50pub use limiter::{ResourceLimiter, ResourceLimits};