using System.Text.Json.Serialization; namespace StellaOps.Policy.Determinization.Models; /// /// Guardrails policy configuration for uncertain observations. /// Defines monitoring/restrictions when evidence is incomplete. /// public sealed record GuardRails { /// /// Enable runtime monitoring. /// [JsonPropertyName("enable_monitoring")] public required bool EnableMonitoring { get; init; } /// /// Restrict deployment to non-production environments. /// [JsonPropertyName("restrict_to_non_prod")] public required bool RestrictToNonProd { get; init; } /// /// Require manual approval before deployment. /// [JsonPropertyName("require_approval")] public required bool RequireApproval { get; init; } /// /// Schedule automatic re-evaluation after this duration. /// [JsonPropertyName("reeval_after")] public TimeSpan? ReevalAfter { get; init; } /// /// Additional notes/rationale for guardrails. /// [JsonPropertyName("notes")] public string? Notes { get; init; } /// /// Default guardrails instance with safe settings. /// public static GuardRails Default { get; } = new() { EnableMonitoring = true, RestrictToNonProd = false, RequireApproval = false, ReevalAfter = TimeSpan.FromDays(7), Notes = null }; /// /// Creates GuardRails with default safe settings. /// public static GuardRails CreateDefault() => new() { EnableMonitoring = true, RestrictToNonProd = false, RequireApproval = false, ReevalAfter = TimeSpan.FromDays(7), Notes = null }; /// /// Creates GuardRails for high-uncertainty observations. /// public static GuardRails Strict() => new() { EnableMonitoring = true, RestrictToNonProd = true, RequireApproval = true, ReevalAfter = TimeSpan.FromDays(3), Notes = "High uncertainty - strict guardrails applied" }; /// /// Creates GuardRails with no restrictions (all evidence present). /// public static GuardRails None() => new() { EnableMonitoring = false, RestrictToNonProd = false, RequireApproval = false, ReevalAfter = null, Notes = null }; } /// /// Deployment environment classification. /// public enum DeploymentEnvironment { /// Development environment. Development = 0, /// Testing environment. Testing = 1, /// Staging/pre-production environment. Staging = 2, /// Production environment. Production = 3 } /// /// Asset criticality classification. /// public enum AssetCriticality { /// Low criticality - minimal impact if compromised. Low = 0, /// Medium criticality - moderate impact. Medium = 1, /// High criticality - significant impact. High = 2, /// Critical - severe impact if compromised. Critical = 3 }