//! Contract Evaluator - LLM-based evaluation of completed contracts against directive.
//!
//! This module will be reimplemented as part of the directive verification engine.
//! See the orchestration module for the new evaluation system.
//!
//! The new evaluation system will provide:
//! - Tiered verification (programmatic verifiers first, then LLM evaluation)
//! - Composite confidence scoring (weighted combination of results)
//! - Pluggable verifier interface (test runner, linter, build, type checker)
//! - Proper integration with the directive chain steps
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use uuid::Uuid;
// use crate::db::models::{Contract, DirectiveAcceptanceCriterion, DirectiveRequirement};
/// Result of contract evaluation
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContractEvaluationResult {
/// Whether the contract passed evaluation
pub passed: bool,
/// Overall score from 0.0 to 1.0
pub overall_score: f64,
/// Results for each acceptance criterion
pub criteria_results: Vec<EvaluationCriterionResultLegacy>,
/// Summary feedback from the evaluator
pub summary_feedback: String,
/// Instructions for rework if failed
pub rework_instructions: Option<String>,
}
/// Per-criterion evaluation result (legacy - kept for compatibility)
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EvaluationCriterionResultLegacy {
pub criterion_id: String,
pub criterion_text: String,
pub passed: bool,
/// Score (0.0-1.0)
pub score: f64,
pub feedback: String,
/// Evidence supporting the evaluation
pub evidence: Vec<String>,
}
/// File content for evaluation context
#[derive(Debug, Clone)]
pub struct FileContent {
pub path: String,
pub content: String,
}
/// Contract evaluator for LLM-based assessment.
///
/// NOTE: This is a stub implementation. The full evaluation system will be
/// implemented as part of the orchestration/verifier module.
pub struct ContractEvaluator {
_pool: PgPool,
}
impl ContractEvaluator {
/// Create a new contract evaluator.
pub fn new(pool: PgPool) -> Self {
Self { _pool: pool }
}
/// Evaluate a contract - stub implementation.
///
/// This will be reimplemented in the orchestration module with:
/// - Programmatic verification (tests, lint, build)
/// - LLM evaluation
/// - Composite scoring
pub async fn evaluate_contract(
&self,
_contract_id: Uuid,
) -> Result<ContractEvaluationResult, ContractEvaluatorError> {
// TODO: Implement using the new directive evaluation system
Err(ContractEvaluatorError::NotImplemented(
"Contract evaluator will be reimplemented with directive system".to_string(),
))
}
}
/// Error types for contract evaluation.
#[derive(Debug, thiserror::Error)]
pub enum ContractEvaluatorError {
#[error("Database error: {0}")]
Database(#[from] sqlx::Error),
#[error("LLM error: {0}")]
Llm(String),
#[error("Not implemented: {0}")]
NotImplemented(String),
}