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
}