repositories / smith
smith
There are many coding harnesses - but this one is fast
owned by admin
smith-cli/tests/architecture.rs
Raw//! Workspace architecture law, expressed as source-level tests
//! (`SMH-SPEC-SPEC0001`, acceptance: quality, architecture, documentation
//! gates).
//!
//! Mirrors the manifest gate in xtask and adds what manifests cannot see:
//! source dependency graphs and engine-ownership boundaries.
use archunit::{assert_passes, project_files};
macro_rules! boundary {
($name:ident, $from:expr, $to:expr) => {
#[test]
fn $name() {
let rule = project_files()
.in_path(concat!($from, "/src/**"))
.should_not()
.depend_on_files()
.in_path(concat!($to, "/src/**"));
assert_passes!(rule);
}
};
}
boundary!(smith_is_foundational, "smith", "smith-core");
boundary!(smith_never_ai, "smith", "smith-ai");
boundary!(smith_never_ui, "smith", "smith-ui");
boundary!(smith_never_tui, "smith", "smith-tui");
boundary!(smith_never_rpc, "smith", "smith-rpc");
boundary!(smith_never_harness, "smith", "smith-harness");
boundary!(smith_never_cli, "smith", "smith-cli");
boundary!(core_never_ai, "smith-core", "smith-ai");
boundary!(core_never_ui, "smith-core", "smith-ui");
boundary!(core_never_tui, "smith-core", "smith-tui");
boundary!(core_never_rpc, "smith-core", "smith-rpc");
boundary!(core_never_harness, "smith-core", "smith-harness");
boundary!(core_never_cli, "smith-core", "smith-cli");
boundary!(ai_never_core, "smith-ai", "smith-core");
boundary!(ai_never_ui, "smith-ai", "smith-ui");
boundary!(ai_never_tui, "smith-ai", "smith-tui");
boundary!(ai_never_rpc, "smith-ai", "smith-rpc");
boundary!(ai_never_harness, "smith-ai", "smith-harness");
boundary!(ai_never_cli, "smith-ai", "smith-cli");
boundary!(ui_never_core, "smith-ui", "smith-core");
boundary!(ui_never_ai, "smith-ui", "smith-ai");
boundary!(ui_never_tui, "smith-ui", "smith-tui");
boundary!(ui_never_rpc, "smith-ui", "smith-rpc");
boundary!(ui_never_harness, "smith-ui", "smith-harness");
boundary!(ui_never_cli, "smith-ui", "smith-cli");
boundary!(tui_never_core, "smith-tui", "smith-core");
boundary!(tui_never_ai, "smith-tui", "smith-ai");
boundary!(tui_never_rpc, "smith-tui", "smith-rpc");
boundary!(tui_never_harness, "smith-tui", "smith-harness");
boundary!(tui_never_cli, "smith-tui", "smith-cli");
boundary!(rpc_never_ai, "smith-rpc", "smith-ai");
boundary!(rpc_never_ui, "smith-rpc", "smith-ui");
boundary!(rpc_never_tui, "smith-rpc", "smith-tui");
boundary!(rpc_never_harness, "smith-rpc", "smith-harness");
boundary!(rpc_never_cli, "smith-rpc", "smith-cli");
#[test]
fn wasmtime_lives_only_in_harness() {
let rule = project_files()
.in_path("smith-core/src/**")
.should_not()
.depend_on_external_modules()
.matching("wasmtime");
assert_passes!(rule);
}