repopilot 0.16.0

Local-first CLI for reviewing Git changes, security boundaries, and blast radius before merge.
Documentation
use crate::rules::{RuleLifecycle, SignalSource};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct FindingProvenance {
    pub detector: String,
    pub signal_source: SignalSource,
    pub rule_lifecycle: RuleLifecycle,
    pub analysis_scope: AnalysisScope,
}

#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum AnalysisScope {
    #[default]
    File,
    Repository,
    Workspace,
    GitDiff,
    FrameworkProject,
}

impl Default for FindingProvenance {
    fn default() -> Self {
        Self {
            detector: "unknown".to_string(),
            signal_source: SignalSource::Mixed,
            rule_lifecycle: RuleLifecycle::Preview,
            analysis_scope: AnalysisScope::File,
        }
    }
}

impl AnalysisScope {
    pub fn for_signal_source(signal_source: SignalSource) -> Self {
        match signal_source {
            SignalSource::ConfigFile
            | SignalSource::DependencyManifest
            | SignalSource::ImportGraph => Self::Repository,
            SignalSource::FrameworkDetector => Self::FrameworkProject,
            SignalSource::GitDiff => Self::GitDiff,
            SignalSource::TextHeuristic | SignalSource::Ast | SignalSource::Mixed => Self::File,
        }
    }
}