namespace StellaOps.AdvisoryAI.Explanation;
///
/// Citation linking an explanation claim to evidence.
///
public sealed record ExplanationCitation
{
///
/// Claim text from the explanation.
///
public required string ClaimText { get; init; }
///
/// Evidence node ID supporting this claim.
///
public required string EvidenceId { get; init; }
///
/// Type of evidence (sbom, reachability, runtime, vex, patch).
///
public required string EvidenceType { get; init; }
///
/// Whether the citation was verified against the evidence.
///
public required bool Verified { get; init; }
///
/// Excerpt from the evidence supporting the claim.
///
public string? EvidenceExcerpt { get; init; }
}
///
/// Authority level of the explanation.
///
public enum ExplanationAuthority
{
///
/// All claims are evidence-backed (≥80% citation rate, all verified).
///
EvidenceBacked,
///
/// AI suggestion requiring human review.
///
Suggestion
}
///
/// Result of explanation generation.
/// Sprint: SPRINT_20251226_015_AI_zastava_companion
/// Task: ZASTAVA-07
///
public sealed record ExplanationResult
{
///
/// Unique ID for this explanation.
///
public required string ExplanationId { get; init; }
///
/// The explanation content (markdown supported).
///
public required string Content { get; init; }
///
/// 3-line summary for compact display.
///
public required ExplanationSummary Summary { get; init; }
///
/// Citations linking claims to evidence.
///
public required IReadOnlyList Citations { get; init; }
///
/// Overall confidence score (0.0-1.0).
///
public required double ConfidenceScore { get; init; }
///
/// Citation rate (verified citations / total claims).
///
public required double CitationRate { get; init; }
///
/// Authority classification.
///
public required ExplanationAuthority Authority { get; init; }
///
/// Evidence node IDs used in this explanation.
///
public required IReadOnlyList EvidenceRefs { get; init; }
///
/// Model ID used for generation.
///
public required string ModelId { get; init; }
///
/// Prompt template version.
///
public required string PromptTemplateVersion { get; init; }
///
/// Input hashes for replay.
///
public required IReadOnlyList InputHashes { get; init; }
///
/// Generation timestamp (UTC ISO-8601).
///
public required string GeneratedAt { get; init; }
///
/// Output hash for verification.
///
public required string OutputHash { get; init; }
}
///
/// 3-line summary following the AI UX pattern.
///
public sealed record ExplanationSummary
{
///
/// Line 1: What changed/what is it.
///
public required string Line1 { get; init; }
///
/// Line 2: Why it matters.
///
public required string Line2 { get; init; }
///
/// Line 3: Next action.
///
public required string Line3 { get; init; }
}