namespace StellaOps.AuditPack.Services; public sealed partial class VerdictReplayPredicate { private static DivergenceCategory MapDriftTypeToCategory(DriftType driftType) { return driftType switch { DriftType.Decision => DivergenceCategory.Decision, DriftType.VerdictDigest => DivergenceCategory.VerdictHash, DriftType.VerdictField => DivergenceCategory.VerdictField, DriftType.InputDigest => DivergenceCategory.Input, _ => DivergenceCategory.Other }; } private static string GenerateDivergenceSummary(List divergences) { if (divergences.Count == 0) { return "Replay matched original verdict exactly."; } var hasDecisionChange = divergences.Any(d => d.Category == DivergenceCategory.Decision); var hasVerdictChange = divergences.Any(d => d.Category == DivergenceCategory.VerdictHash); var hasInputChange = divergences.Any(d => d.Category == DivergenceCategory.Input); if (hasDecisionChange) { return "Replay produced a different policy decision."; } if (hasVerdictChange) { return "Replay verdict differs in content but decision is the same."; } if (hasInputChange) { return "Input digests differ but verdict is unchanged."; } return $"Replay detected {divergences.Count} divergence(s)."; } }