use serde::{Deserialize, Serialize};
use crate::feature::FeatureId;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VerificationCommand {
pub command: String,
pub exit_code: i32,
#[serde(default)]
pub observation: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct InteractiveCheck {
pub action: String,
#[serde(default)]
pub observed: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TestCase {
pub name: String,
#[serde(default)]
pub verifies: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TestAdded {
pub file: String,
#[serde(default)]
pub cases: Vec<TestCase>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct HandoffTests {
#[serde(default)]
pub added: Vec<TestAdded>,
#[serde(default)]
pub updated: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coverage: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IssueSeverity {
Blocking,
NonBlocking,
Suggestion,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DiscoveredIssue {
pub severity: IssueSeverity,
pub description: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_fix: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Deviation {
pub step: String,
pub reason: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SkillFeedback {
#[serde(default)]
pub followed_procedure: bool,
#[serde(default)]
pub deviations: Vec<Deviation>,
#[serde(default)]
pub suggested_changes: Vec<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct HandoffVerification {
#[serde(default)]
pub commands: Vec<VerificationCommand>,
#[serde(default)]
pub interactive: Vec<InteractiveCheck>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Handoff {
pub feature_id: FeatureId,
pub agent_id: String,
#[serde(default)]
pub salient_summary: String,
#[serde(default)]
pub what_was_implemented_md: String,
#[serde(default)]
pub what_was_left_undone_md: String,
#[serde(default)]
pub verification: HandoffVerification,
#[serde(default)]
pub tests: HandoffTests,
#[serde(default)]
pub discovered_issues: Vec<DiscoveredIssue>,
#[serde(default)]
pub skill_feedback: SkillFeedback,
}