Luigit
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);
}