53 lines
1.9 KiB
C#
53 lines
1.9 KiB
C#
namespace StellaOps.Policy.Explainability;
|
|
|
|
/// <summary>
|
|
/// Renders verdict rationales in multiple formats.
|
|
/// </summary>
|
|
public interface IVerdictRationaleRenderer
|
|
{
|
|
/// <summary>
|
|
/// Renders a complete verdict rationale from verdict components.
|
|
/// </summary>
|
|
VerdictRationale Render(VerdictRationaleInput input);
|
|
|
|
/// <summary>
|
|
/// Renders rationale as plain text (4-line format).
|
|
/// </summary>
|
|
string RenderPlainText(VerdictRationale rationale);
|
|
|
|
/// <summary>
|
|
/// Renders rationale as Markdown.
|
|
/// </summary>
|
|
string RenderMarkdown(VerdictRationale rationale);
|
|
|
|
/// <summary>
|
|
/// Renders rationale as canonical JSON (RFC 8785).
|
|
/// </summary>
|
|
string RenderJson(VerdictRationale rationale);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Input for verdict rationale rendering.
|
|
/// </summary>
|
|
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<string> PolicyConditions { get; init; }
|
|
public AttestationReference? PathWitness { get; init; }
|
|
public IReadOnlyList<AttestationReference>? 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; }
|
|
}
|