ripr 0.8.0

Find static mutation-exposure gaps before expensive mutation testing
Documentation
use super::types::AgentReviewSummaryReport;

pub(crate) fn render_agent_review_summary_markdown(report: &AgentReviewSummaryReport) -> String {
    let mut rendered = String::new();
    rendered.push_str("# RIPR Agent Review Summary\n\n");
    rendered.push_str(&format!("Status: {}\n", report.status));
    match &report.target_seam {
        Some(seam) => rendered.push_str(&format!("Target seam: {}\n", seam.seam_id)),
        None => rendered.push_str("Target seam: unknown\n"),
    }
    rendered.push_str(&format!("Movement: {}\n", report.static_movement.state));
    if let Some(before) = &report.static_movement.before_class {
        let after = report
            .static_movement
            .after_class
            .as_deref()
            .unwrap_or("unknown");
        rendered.push_str(&format!("Static class: {before} -> {after}\n"));
    }
    if let Some(artifact) = &report.static_movement.evidence_artifact {
        rendered.push_str(&format!("Evidence artifact: {artifact}\n"));
    }
    rendered.push('\n');
    rendered.push_str("## Reviewer Focus\n\n");
    rendered.push_str(&format!("{}\n\n", report.reviewer_summary.headline));
    rendered.push_str(&format!(
        "What changed: {}\n",
        report.reviewer_summary.what_changed
    ));
    rendered.push_str(&format!("Evidence: {}\n", report.reviewer_summary.evidence));
    rendered.push_str(&format!(
        "Remaining: {}\n",
        report.reviewer_summary.remaining
    ));
    if !report.reviewer_summary.reviewer_should_inspect.is_empty() {
        rendered.push_str("\nInspect:\n");
        for item in &report.reviewer_summary.reviewer_should_inspect {
            rendered.push_str(&format!("- {item}\n"));
        }
    }
    if let Some(next_command) = &report.next_command {
        rendered.push_str("\nNext command:\n");
        rendered.push_str("```bash\n");
        rendered.push_str(&next_command.command);
        rendered.push_str("\n```\n");
    }
    rendered.push_str("\n## Limits\n\n");
    rendered.push_str("- Static artifact relationship only.\n");
    rendered.push_str("- No runtime mutation execution.\n");
    rendered.push_str("- No automatic source edits.\n");
    rendered.push_str("- No generated tests.\n");
    rendered
}