#[test] fn daemon_does_not_depend_on_business_crates() { let manifest = std::fs::read_to_string(concat!(env!("CARGO_MANIFEST_DIR"), "/Cargo.toml")) .expect("read ias-daemon Cargo.toml"); // 解析 [dependencies] 表而不是字符串匹配,避免注释/路径里的同名子串误报, // 也能阻止以其他形式(如 build-dependencies)绕过业务 crate 依赖边界。 let parsed: toml::Value = toml::from_str(&manifest).expect("parse ias-daemon Cargo.toml"); let deps = parsed .get("dependencies") .and_then(|value| value.as_table()) .expect("ias-daemon Cargo.toml 缺少 [dependencies] 表"); for forbidden in ["ias-ai", "ias-context", "ias-wechat", "ias-mail"] { assert!( !deps.contains_key(forbidden), "ias-daemon 不得依赖业务 crate: {forbidden}" ); } }