namespace StellaOps.Policy.Explainability;
///
/// Renders verdict rationales in multiple formats.
///
public interface IVerdictRationaleRenderer
{
///
/// Renders a complete verdict rationale from verdict components.
///
VerdictRationale Render(VerdictRationaleInput input);
///
/// Renders rationale as plain text (4-line format).
///
string RenderPlainText(VerdictRationale rationale);
///
/// Renders rationale as Markdown.
///
string RenderMarkdown(VerdictRationale rationale);
///
/// Renders rationale as canonical JSON (RFC 8785).
///
string RenderJson(VerdictRationale rationale);
}
///
/// Input for verdict rationale rendering.
///
public sealed record VerdictRationaleInput
{
public required VerdictReference VerdictRef { get; init; }
public required string Cve { get; init; }
public required ComponentIdentity Component { get; init; }
public ReachabilityDetail? Reachability { get; init; }
public required string PolicyClauseId { get; init; }
public required string PolicyRuleDescription { get; init; }
public required IReadOnlyList PolicyConditions { get; init; }
public AttestationReference? PathWitness { get; init; }
public IReadOnlyList? VexStatements { get; init; }
public AttestationReference? Provenance { get; init; }
public required string Verdict { get; init; }
public double? Score { get; init; }
public required string Recommendation { get; init; }
public MitigationGuidance? Mitigation { get; init; }
public required DateTimeOffset GeneratedAt { get; init; }
public required string VerdictDigest { get; init; }
public string? PolicyDigest { get; init; }
public string? EvidenceDigest { get; init; }
}