quant_governor/lib.rs
1//! # quant-governor
2//!
3//! Governance policy routing for governed compression.
4//!
5//! This crate provides policy-driven routing for codec selection based on
6//! content type, size, and accuracy requirements.
7//!
8//! ## Core Concepts
9//!
10//! - **GovernancePolicy**: Declares codec profiles and admissibility classes
11//! - **CodecDecision**: Output of policy evaluation with selected codec and metadata
12//! - **ExactFallbackReceipt**: Tracks fallback from compressed back to raw
13//! - **DegradationReceipt**: Tracks quality degradation from higher to lower fidelity
14//!
15//! ## Codec Profiles
16//!
17//! | Profile | Description | Use Case |
18//! |---------|-------------|----------|
19//! | `raw` | Uncompressed | Critical accuracy |
20//! | `q8` | 8-bit quantization | Balanced |
21//! | `q4` | 4-bit quantization | Storage constrained |
22//! | `turbo` | Turbo-quant accelerated | Low latency |
23//! | `fib` | Fibonacci-weighted | Precision sensitive |
24//!
25//! ## Usage
26//!
27//! ```rust
28//! use quant_governor::{GovernancePolicy, CodecDecision, GovernanceRequest, evaluate};
29//!
30//! let policy = GovernancePolicy::default();
31//! let request = GovernanceRequest::default();
32//! let decision = evaluate(request, &policy);
33//! ```
34
35#![forbid(unsafe_code)]
36#![deny(missing_docs)]
37#![deny(rustdoc::broken_intra_doc_links)]
38
39pub mod decision;
40pub mod degradation;
41pub mod error;
42pub mod policy;
43pub mod receipt;
44
45pub use decision::{CodecDecision, CodecProfile};
46pub use degradation::DegradationReceipt;
47pub use error::GovernorError;
48pub use policy::{AdmissibilityClass, ContentType, GovernancePolicy, GovernanceRequest};
49pub use receipt::ExactFallbackReceipt;
50
51/// Policy-driven codec evaluation.
52///
53/// Given a governance request and policy, produces a codec decision
54/// with selected profile and metadata.
55pub fn evaluate(
56 request: GovernanceRequest,
57 policy: &GovernancePolicy,
58) -> Result<CodecDecision, GovernorError> {
59 policy.evaluate(request)
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65
66 #[test]
67 fn default_policy_selects_raw_for_critical() {
68 let policy = GovernancePolicy::default();
69 let request = GovernanceRequest::default();
70
71 let result = evaluate(request.clone(), &policy);
72 assert!(result.is_ok());
73
74 let decision = result.unwrap();
75 assert_eq!(decision.codec, CodecProfile::Raw);
76 }
77
78 #[test]
79 fn small_text_bypasses_compression() {
80 let policy = GovernancePolicy::default();
81 let request = GovernanceRequest {
82 content_type: ContentType::Text,
83 size_bytes: 100,
84 ..Default::default()
85 };
86
87 let result = evaluate(request, &policy);
88 assert!(result.is_ok());
89 // Small text may bypass or use raw
90 }
91}