Skip to main content

batuta/stack/
mod.rs

1//! PAIML Stack Dependency Orchestration
2//!
3//! This module provides dependency management and coordinated release capabilities
4//! for the PAIML (Pragmatic AI Labs) Rust ecosystem.
5//!
6//! ## Commands
7//!
8//! - `batuta stack check` - Dependency health analysis
9//! - `batuta stack release` - Coordinated multi-crate release
10//! - `batuta stack status` - Stack dashboard
11//! - `batuta stack sync` - Dependency synchronization
12//!
13//! ## Toyota Way Principles
14//!
15//! - **Jidoka**: Pre-flight checks stop broken releases
16//! - **Just-in-Time**: Pull-based release ordering
17//! - **Heijunka**: Version alignment across stack
18//! - **Genchi Genbutsu**: Real-time crates.io verification
19
20#![allow(unused_imports)] // Public API re-exports
21
22pub mod checker;
23pub mod crates_io;
24pub mod diagnostics;
25pub mod diagnostics_ml;
26pub mod drift;
27pub mod graph;
28pub mod hero_image;
29pub mod publish_status;
30pub mod quality;
31pub mod quality_checker;
32pub mod quality_format;
33pub mod releaser;
34pub mod releaser_preflight;
35pub mod releaser_types;
36pub mod tree;
37pub mod tui;
38pub mod types;
39
40pub use checker::StackChecker;
41pub use crates_io::CratesIoClient;
42pub use diagnostics::{
43    render_dashboard, AndonStatus, Anomaly, AnomalyCategory, ComponentMetrics, ComponentNode,
44    GraphMetrics, HealthStatus, HealthSummary, StackDiagnostics,
45};
46pub use diagnostics_ml::{ErrorForecaster, ForecastMetrics, IsolationForest};
47pub use drift::{format_drift_errors, format_drift_json, DriftChecker, DriftReport, DriftSeverity};
48pub use graph::DependencyGraph;
49pub use hero_image::{HeroImageResult, ImageFormat};
50pub use publish_status::{
51    format_report_json as format_publish_status_json,
52    format_report_text as format_publish_status_text, CrateStatus, PublishAction,
53    PublishStatusCache, PublishStatusReport, PublishStatusScanner,
54};
55pub use quality::{
56    ComponentQuality, QualityGrade, QualityIssue, QualitySummary, Score, StackLayer,
57    StackQualityReport,
58};
59pub use quality_checker::QualityChecker;
60pub use quality_format::{
61    format_report_json as format_quality_report_json,
62    format_report_text as format_quality_report_text,
63};
64pub use releaser_types::{format_plan_text, BumpType, ReleaseConfig, ReleaseResult, ReleasedCrate};
65pub use types::*;
66
67/// PAIML stack crate names for identification
68pub const PAIML_CRATES: &[&str] = &[
69    // Core compute layer
70    "trueno",
71    "trueno-viz",
72    "trueno-db",
73    "trueno-graph",
74    "trueno-rag",
75    "trueno-rag-cli",
76    "trueno-zram-core",
77    "trueno-ublk",
78    "trueno-cupti",
79    "cbtop",
80    // ML layer
81    "aprender",
82    "aprender-shell",
83    "aprender-tsp",
84    "realizar",
85    "alimentar",
86    "entrenar",
87    // Infrastructure layer
88    "renacer",
89    "repartir",
90    "pacha",
91    "duende",
92    "ttop",
93    "pzsh",
94    "forjar",
95    // Simulation & games
96    "simular",
97    "jugar",
98    "jugar-probar",
99    // Hardware integration
100    "manzana",
101    "pepita",
102    "wos",
103    // Speech & inference
104    "whisper-apr",
105    // Quality/Tooling
106    "certeza",
107    "provable-contracts",
108    "tiny-model-ground-truth",
109    "batuta",
110    "presentar",
111    "presentar-cli",
112    "presentar-core",
113    "ruchy",
114    "decy",
115    "depyler",
116    "pmat",
117    // Transpilers
118    "bashrs",
119    "bashrs-runtime",
120    "bashrs-oracle",
121    // Intelligence
122    "organizational-intelligence-plugin",
123    // Documentation
124    "sovereign-ai-stack-book",
125    "apr-cookbook",
126    "alm-cookbook",
127    "pres-cookbook",
128    "batuta-cookbook",
129    // Canary benchmarks
130    "qwen-train-canary",
131    "qwen-coder-deploy",
132];
133
134/// Check if a crate name is part of the PAIML stack
135pub fn is_paiml_crate(name: &str) -> bool {
136    PAIML_CRATES.contains(&name)
137}
138
139#[cfg(test)]
140mod tests {
141    use super::*;
142
143    #[test]
144    fn test_paiml_crate_detection() {
145        assert!(is_paiml_crate("trueno"));
146        assert!(is_paiml_crate("aprender"));
147        assert!(is_paiml_crate("batuta"));
148        assert!(!is_paiml_crate("serde"));
149        assert!(!is_paiml_crate("tokio"));
150        assert!(!is_paiml_crate("arrow"));
151    }
152
153    #[test]
154    fn test_cookbook_detection() {
155        assert!(is_paiml_crate("apr-cookbook"));
156        assert!(is_paiml_crate("alm-cookbook"));
157        assert!(is_paiml_crate("pres-cookbook"));
158        assert!(is_paiml_crate("pmat"));
159    }
160
161    #[test]
162    fn test_new_stack_crates() {
163        // Infrastructure
164        assert!(is_paiml_crate("duende"));
165        assert!(is_paiml_crate("ttop"));
166        assert!(is_paiml_crate("forjar"));
167        // Simulation & games
168        assert!(is_paiml_crate("simular"));
169        assert!(is_paiml_crate("jugar"));
170        assert!(is_paiml_crate("jugar-probar"));
171        // Hardware
172        assert!(is_paiml_crate("manzana"));
173        // Compression
174        assert!(is_paiml_crate("trueno-zram-core"));
175        assert!(is_paiml_crate("trueno-ublk"));
176        // GPU monitoring
177        assert!(is_paiml_crate("trueno-cupti"));
178        assert!(is_paiml_crate("cbtop"));
179        // Quality
180        assert!(is_paiml_crate("provable-contracts"));
181        assert!(is_paiml_crate("tiny-model-ground-truth"));
182    }
183
184    #[test]
185    fn test_paiml_crates_count() {
186        // Stack now has 47 crates (added qwen-train-canary, qwen-coder-deploy)
187        assert!(PAIML_CRATES.len() >= 47);
188    }
189}