repopilot 0.16.0

Local-first CLI for reviewing Git changes, security boundaries, and blast radius before merge.
Documentation
use crate::review::model::ReviewReport;
use serde::Serialize;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "kebab-case")]
pub enum ReviewSignalGatePolicy {
    None,
    Definitely,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ReviewSignalGateResult {
    pub policy: ReviewSignalGatePolicy,
    pub failed_signals: usize,
}

impl ReviewSignalGateResult {
    pub fn evaluate(report: &ReviewReport, policy: ReviewSignalGatePolicy) -> Self {
        let failed_signals = match policy {
            ReviewSignalGatePolicy::None => 0,
            ReviewSignalGatePolicy::Definitely => {
                report.tiered_signals.gate_eligible_definitely_count()
            }
        };
        Self {
            policy,
            failed_signals,
        }
    }

    pub fn passed(&self) -> bool {
        self.failed_signals == 0
    }

    pub fn label(&self) -> &'static str {
        match self.policy {
            ReviewSignalGatePolicy::None => "none",
            ReviewSignalGatePolicy::Definitely => "definitely",
        }
    }
}