code-system-graph 1.0.2

CLI, MCP, and HTTP delivery for local multi-repository code intelligence.
Documentation
//! Acceptance coverage for configurable native discovery exclusions.

use code_system_graph::scan_workspace;
use code_system_graph_core::encode_native_path;
use code_system_graph_store_sqlite::SqliteStore;

#[test]
fn scan_should_apply_excludes_reopen_defaults_and_keep_explicit_artifacts() -> anyhow::Result<()> {
    let temporary = tempfile::tempdir()?;
    let repository = temporary.path().join("repo");
    for directory in [
        "src",
        "coverage",
        "generated/output",
        "vendor/internal-sdk/src",
        "vendor/external/src",
        "vendor/contracts",
    ] {
        std::fs::create_dir_all(repository.join(directory))?;
    }
    for source in [
        "src/lib.rs",
        "coverage/missed.rs",
        "generated/output/hidden.rs",
        "vendor/internal-sdk/src/lib.rs",
        "vendor/external/src/lib.rs",
    ] {
        std::fs::write(repository.join(source), "pub fn observed() {}\n")?;
    }
    std::fs::write(
        repository.join("vendor/contracts/openapi.yaml"),
        "openapi: 3.1.0\ninfo:\n  title: Explicit\n  version: 1\npaths: {}\n",
    )?;
    let manifest = temporary.path().join("code-system-graph.yaml");
    std::fs::write(
        &manifest,
        "version: 1\nname: ignored\nrepos:\n  app:\n    path: repo\n    openapi: vendor/contracts/openapi.yaml\n    excludes:\n      - ./coverage//./**\n      - generated/*\n    includeDefaults:\n      - ./vendor//internal-sdk/./**\n",
    )?;
    let database = temporary.path().join("graph.db");

    scan_workspace(&manifest, &database)?;
    let paths = SqliteStore::open_read_only(&database)?
        .load_current_artifact_fingerprints("ignored")?
        .into_iter()
        .map(|fingerprint| fingerprint.path)
        .collect::<Vec<_>>();
    let native_path =
        |relative: &str| encode_native_path(&relative.split('/').collect::<std::path::PathBuf>());

    assert_eq!(
        (
            paths.contains(&native_path("src/lib.rs")),
            paths.contains(&native_path("coverage/missed.rs")),
            paths.contains(&native_path("generated/output/hidden.rs")),
            paths.contains(&native_path("vendor/internal-sdk/src/lib.rs")),
            paths.contains(&native_path("vendor/external/src/lib.rs")),
            paths.contains(&native_path("vendor/contracts/openapi.yaml")),
        ),
        (true, false, false, true, false, true)
    );
    Ok(())
}

#[test]
fn scan_should_invalidate_incremental_state_when_policy_changes() -> anyhow::Result<()> {
    let temporary = tempfile::tempdir()?;
    let repository = temporary.path().join("repo/src");
    std::fs::create_dir_all(&repository)?;
    std::fs::write(repository.join("lib.rs"), "pub fn observed() {}\n")?;
    let manifest = temporary.path().join("code-system-graph.yaml");
    std::fs::write(
        &manifest,
        "version: 1\nname: fingerprint\nrepos:\n  app:\n    path: repo\n",
    )?;
    let database = temporary.path().join("graph.db");
    let before = scan_workspace(&manifest, &database)?;
    std::fs::write(
        &manifest,
        "version: 1\nname: fingerprint\nrepos:\n  app:\n    path: repo\n    excludes:\n      - src/**\n",
    )?;

    let after = scan_workspace(&manifest, &database)?;

    assert!(!before.reused_snapshot);
    assert!(!after.reused_snapshot);
    assert!(after.discovered_input_count < before.discovered_input_count);
    Ok(())
}