//! C28 structural fitness: the node crates obey the ladder import direction. //! The compiler only rejects import cycles; an acyclic-but-outward dependency //! (e.g. `aura-std` -> `aura-market`) would compile silently. This test reads //! each node crate's `[dependencies]` table and asserts its intra-workspace edges //! stay within the inner set C28 permits for that layer. `[dev-dependencies]` are //! C28-exempt (tests may cross layers) and are deliberately not inspected. use std::path::PathBuf; fn workspace_root() -> PathBuf { // aura-vocabulary/ + /../.. = workspace root (the repo idiom for reaching it). PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("..").join("..") } /// The `aura-*` keys under `[dependencies]` (NOT `[dev-dependencies]`) of a crate. fn prod_intra_workspace_deps(crate_name: &str) -> Vec { let manifest = workspace_root() .join("crates") .join(crate_name) .join("Cargo.toml"); let text = std::fs::read_to_string(&manifest) .unwrap_or_else(|e| panic!("read {}: {e}", manifest.display())); let doc: toml::Value = toml::from_str(&text).expect("Cargo.toml parses as TOML"); match doc.get("dependencies").and_then(|d| d.as_table()) { Some(deps) => deps .keys() .filter(|k| k.starts_with("aura-")) .cloned() .collect(), None => Vec::new(), } } #[test] fn node_crates_obey_the_c28_import_direction() { // (crate, the intra-workspace [dependencies] C28 permits for its layer) let allowed: &[(&str, &[&str])] = &[ ("aura-analysis", &[]), // foundation: no aura-* deps ("aura-measurement", &["aura-core", "aura-analysis"]), ("aura-std", &["aura-core"]), ("aura-market", &["aura-core"]), ("aura-strategy", &["aura-core"]), ("aura-engine", &["aura-core", "aura-analysis"]), ("aura-backtest", &["aura-core", "aura-engine"]), ( "aura-vocabulary", &["aura-core", "aura-std", "aura-market", "aura-strategy", "aura-backtest"], ), ]; for (crate_name, permitted) in allowed { for dep in prod_intra_workspace_deps(crate_name) { assert!( permitted.contains(&dep.as_str()), "C28 import-direction violation: `{crate_name}` [dependencies] on `{dep}`, \ outside its permitted inner set {permitted:?}" ); } } }