repopilot 0.13.0

Local-first CLI for repository audit, architecture risk detection, baseline tracking, and CI-friendly code review.
Documentation
#[test]
fn top_recommendations_include_medium_clusters_when_no_high_findings() {
    let findings = vec![
        make_finding(
            "architecture.large-file",
            "Large file detected",
            Severity::Medium,
            FindingCategory::Architecture,
            "src/a.rs",
            1,
        ),
        make_finding(
            "architecture.large-file",
            "Large file detected",
            Severity::Medium,
            FindingCategory::Architecture,
            "src/b.rs",
            1,
        ),
    ];
    let summary = make_summary(findings);
    let output = render(&summary, &AiContextRenderOptions::default());
    assert!(output.contains("## Top Recommendations"));
    assert!(output.contains("MEDIUM 2 finding(s)"));
}


#[test]
fn top_recommendations_shown_for_high_findings() {
    let findings = vec![make_finding(
        "security.secret",
        "Hardcoded secret",
        Severity::High,
        FindingCategory::Security,
        "src/a.rs",
        5,
    )];
    let summary = make_summary(findings);
    let output = render(&summary, &AiContextRenderOptions::default());
    assert!(output.contains("## Top Recommendations"));
}


#[test]
fn ai_context_includes_context_risk_graph_sections() {
    let mut summary = make_summary(vec![]);
    summary.context_graph_summary = Some(context_graph_summary());

    let output = render(&summary, &AiContextRenderOptions::default());

    assert!(output.contains("## Context Risk Graph"));
    assert!(output.contains("### Edit Order"));
    assert!(output.contains("### Blast Radius"));
    assert!(output.contains("### High-Context Files"));
    assert!(output.contains("### Verification Focus"));
    assert!(output.contains("src/core.rs"));
}


#[test]
fn empty_scan_renders_without_panic() {
    let summary = make_summary(vec![]);
    let output = render(&summary, &AiContextRenderOptions::default());
    assert!(output.contains("RepoPilot AI Context"));
    assert!(output.contains("0 findings"));
}


#[test]
fn ai_context_category_from_str() {
    assert_eq!("security".parse(), Ok(AiFocusCategory::Security));
    assert_eq!("arch".parse(), Ok(AiFocusCategory::Architecture));
    assert_eq!("quality".parse(), Ok(AiFocusCategory::Quality));
    assert_eq!("framework".parse(), Ok(AiFocusCategory::Framework));
    assert_eq!("all".parse(), Ok(AiFocusCategory::All));
    assert_eq!("unknown".parse::<AiFocusCategory>(), Err(()));
}