use serde::{Deserialize, Serialize};
use crate::residual::{CorrectionPacketRef, ResidualClass};
use super::section::PromptSectionId;
use super::stage::PromptStage;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CounterexampleRef {
pub artifact: String,
pub verifier: String,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct ContextRequest {
pub keys: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IssuePromptPlan {
pub rule_id: String,
pub stage: PromptStage,
pub issue: ResidualClass,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub witness: Option<CounterexampleRef>,
pub correction: CorrectionPacketRef,
pub sections: Vec<PromptSectionId>,
#[serde(default)]
pub context_request: ContextRequest,
}