1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use stack_ids::{
4 ApplicabilityContextId, AssuranceCaseId, AuthorityLeaseId, CompiledObligationSetId,
5 CompositionConflictSetId, ContinuityExceptionId, DeploymentProfileId, EffectIntentId,
6 EffectWindowId, EffectiveConstitutionId, ErrorBudgetLedgerId, IncidentCaseId,
7 PolicyImpactDiffId, ProfileSetId, RecoveryPlanId, ReleaseReadinessDecisionId,
8};
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
11pub struct EffectRuntimeViewV1 {
12 pub schema_version: String,
13 pub effect_intent_id: EffectIntentId,
14 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub effect_window_id: Option<EffectWindowId>,
16 pub reversibility_class: String,
17 pub run_mode: String,
18 pub publication_status: String,
19 #[serde(default)]
20 pub degradation_markers: Vec<String>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
24pub struct DelegationRuntimeViewV1 {
25 pub schema_version: String,
26 pub authority_lease_id: AuthorityLeaseId,
27 pub validity_state: String,
28 pub advisory_only: bool,
29 #[serde(default)]
30 pub revocation_refs: Vec<String>,
31 #[serde(default)]
32 pub missing_backpointers: Vec<String>,
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
36pub struct DeployabilityRuntimeViewV1 {
37 pub schema_version: String,
38 pub deployment_profile_id: DeploymentProfileId,
39 pub assurance_case_id: AssuranceCaseId,
40 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub release_readiness_decision_id: Option<ReleaseReadinessDecisionId>,
42 pub readiness_state: String,
43 pub advisory_only: bool,
44 #[serde(default)]
45 pub open_gaps: Vec<String>,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
49pub struct ContinuityRuntimeViewV1 {
50 pub schema_version: String,
51 pub incident_case_id: IncidentCaseId,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub recovery_plan_id: Option<RecoveryPlanId>,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub continuity_exception_id: Option<ContinuityExceptionId>,
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub error_budget_ledger_id: Option<ErrorBudgetLedgerId>,
58 pub replay_completeness: String,
59 #[serde(default)]
60 pub degradation_markers: Vec<String>,
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
64pub struct EffectiveConstitutionViewV1 {
65 pub schema_version: String,
66 pub effective_constitution_id: EffectiveConstitutionId,
67 pub applicability_context_id: ApplicabilityContextId,
68 pub profile_set_id: ProfileSetId,
69 pub mode_classification: String,
70 pub blocking: bool,
71 #[serde(default)]
72 pub approval_requirements: Vec<String>,
73 #[serde(default)]
74 pub hard_block_summary: Vec<String>,
75 #[serde(default)]
76 pub active_warning_summary: Vec<String>,
77 pub valid_as_of: String,
78 pub recorded_as_of: String,
79}
80
81#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
82pub struct CompiledObligationRuntimeViewV1 {
83 pub schema_version: String,
84 pub compiled_obligation_set_id: CompiledObligationSetId,
85 pub effective_constitution_id: EffectiveConstitutionId,
86 #[serde(default)]
87 pub required_approvals: Vec<String>,
88 #[serde(default)]
89 pub required_checks: Vec<String>,
90 #[serde(default)]
91 pub required_monitors: Vec<String>,
92 #[serde(default)]
93 pub required_disclosure_obligations: Vec<String>,
94 #[serde(default)]
95 pub required_post_hoc_review_obligations: Vec<String>,
96 #[serde(default)]
97 pub unresolved_dependency_refs: Vec<String>,
98 pub effect_eligibility_summary: String,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
102pub struct CompositionConflictRuntimeViewV1 {
103 pub schema_version: String,
104 pub composition_conflict_set_id: CompositionConflictSetId,
105 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub effective_constitution_id: Option<EffectiveConstitutionId>,
107 pub blocking: bool,
108 #[serde(default)]
109 pub conflict_keys: Vec<String>,
110 #[serde(default)]
111 pub review_paths: Vec<String>,
112 #[serde(default)]
113 pub admissible_exception_classes: Vec<String>,
114}
115
116#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
117pub struct PolicyImpactDiffRuntimeViewV1 {
118 pub schema_version: String,
119 pub policy_impact_diff_id: PolicyImpactDiffId,
120 pub from_effective_constitution_id: EffectiveConstitutionId,
121 pub to_effective_constitution_id: EffectiveConstitutionId,
122 #[serde(default)]
123 pub changed_obligation_families: Vec<String>,
124 #[serde(default)]
125 pub newly_blocked_paths: Vec<String>,
126 #[serde(default)]
127 pub newly_admitted_paths: Vec<String>,
128 #[serde(default)]
129 pub migration_consequences: Vec<String>,
130 pub simulation_only: bool,
131}