//! `semantic_analyzer` — Tier 2 primitive graph + ROI CNN. //! //! Real implementation lands in: //! - AZ-669 `semantic_analyzer_primitive_graph` //! - AZ-670 `semantic_analyzer_roi_cnn` //! - AZ-671 `semantic_analyzer_action_policy` use shared::error::{AutopilotError, Result}; use shared::health::ComponentHealth; use shared::models::tier2::Tier2Evidence; const NAME: &str = "semantic_analyzer"; pub struct SemanticAnalyzer; impl SemanticAnalyzer { pub fn new() -> Self { Self } pub fn handle(&self) -> SemanticAnalyzerHandle { SemanticAnalyzerHandle } } impl Default for SemanticAnalyzer { fn default() -> Self { Self::new() } } #[derive(Clone, Copy)] pub struct SemanticAnalyzerHandle; impl SemanticAnalyzerHandle { pub async fn analyze(&self, _roi: Vec) -> Result { Err(AutopilotError::NotImplemented( "semantic_analyzer::analyze (AZ-669)", )) } pub fn health(&self) -> ComponentHealth { ComponentHealth::disabled(NAME) } } #[cfg(test)] mod tests { use super::*; #[test] fn it_compiles() { let h = SemanticAnalyzer::new().handle(); assert_eq!(h.health().level, shared::health::HealthLevel::Disabled); } }