1use super::{
2 CanisterControlClassV1, DeploymentCommandResultV1, DeploymentExecutionStatusV1,
3 DeploymentObservationGapV1, RolePhaseResultV1, SafetyFindingV1, SafetyStatusV1,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
11pub struct AuthorityReceiptV1 {
12 pub schema_version: u32,
13 pub operation_id: String,
14 pub check_id: Option<String>,
15 pub reconciliation_plan_id: String,
16 pub authority_report_id: String,
17 pub inventory_id: String,
18 pub authority_profile_hash: Option<String>,
19 pub operation_status: DeploymentExecutionStatusV1,
20 pub started_at: String,
21 pub finished_at: Option<String>,
22 pub attempted_actions: Vec<AuthorityAttemptedActionV1>,
23 pub verified_controller_observations: Vec<AuthorityControllerObservationV1>,
24 pub hard_failures: Vec<SafetyFindingV1>,
25 pub unresolved_observation_gaps: Vec<DeploymentObservationGapV1>,
26 pub unresolved_external_actions: Vec<AuthorityExternalActionV1>,
27 pub command_result: DeploymentCommandResultV1,
28}
29
30#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
34pub struct AuthorityDryRunEvidenceV1 {
35 pub schema_version: u32,
36 pub evidence_id: String,
37 pub check_id: String,
38 pub generated_at: String,
39 pub reconciliation_plan: AuthorityReconciliationPlanV1,
40 pub authority_report: AuthorityReportV1,
41 pub authority_receipt: AuthorityReceiptV1,
42}
43
44#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
48pub struct AuthorityAttemptedActionV1 {
49 pub subject: String,
50 pub canister_id: Option<String>,
51 pub role: Option<String>,
52 pub action: AuthorityActionV1,
53 pub result: RolePhaseResultV1,
54 pub error: Option<String>,
55}
56
57#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
61pub struct AuthorityControllerObservationV1 {
62 pub subject: String,
63 pub canister_id: Option<String>,
64 pub role: Option<String>,
65 pub state: AuthorityReconciliationStateV1,
66 pub action: AuthorityActionV1,
67 pub observed_controllers: Vec<String>,
68 pub desired_controllers: Vec<String>,
69 pub controller_delta: AuthorityControllerDeltaV1,
70}
71
72#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
76pub struct AuthorityReconciliationPlanV1 {
77 pub schema_version: u32,
78 pub plan_id: String,
79 pub inventory_id: String,
80 pub authority_profile_hash: Option<String>,
81 pub canister_actions: Vec<CanisterAuthorityActionV1>,
82 pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
83 pub hard_failures: Vec<SafetyFindingV1>,
84 pub external_actions_required: Vec<AuthorityExternalActionV1>,
85}
86
87#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
91pub struct AuthorityAutomaticActionV1 {
92 pub subject: String,
93 pub canister_id: String,
94 pub role: Option<String>,
95 pub action: AuthorityActionV1,
96 pub observed_controllers: Vec<String>,
97 pub desired_controllers: Vec<String>,
98 pub controller_delta: AuthorityControllerDeltaV1,
99 pub reason: String,
100}
101
102#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
106pub struct AuthorityControllerDeltaV1 {
107 pub add_controllers: Vec<String>,
108 pub remove_controllers: Vec<String>,
109}
110
111#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
115pub struct AuthorityReportV1 {
116 pub schema_version: u32,
117 pub report_id: String,
118 pub check_id: Option<String>,
119 pub reconciliation_plan_id: String,
120 pub inventory_id: String,
121 pub authority_profile_hash: Option<String>,
122 pub status: SafetyStatusV1,
123 pub summary: String,
124 pub counts: AuthorityReportCountsV1,
125 pub apply_readiness: AuthorityApplyReadinessV1,
126 pub action_counts: Vec<AuthorityActionCountV1>,
127 pub control_class_counts: Vec<AuthorityControlClassCountV1>,
128 pub observation_gaps: Vec<DeploymentObservationGapV1>,
129 pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
130 pub hard_failures: Vec<SafetyFindingV1>,
131 pub external_actions_required: Vec<AuthorityExternalActionV1>,
132 pub next_actions: Vec<String>,
133}
134
135#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
139pub struct AuthorityApplyReadinessV1 {
140 pub can_apply_automatically: bool,
141 pub automatic_action_count: usize,
142 pub blockers: Vec<AuthorityApplyBlockerV1>,
143}
144
145#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
149pub enum AuthorityApplyBlockerV1 {
150 UnsafeBlocked,
151 HardFailures,
152 ObservationGaps,
153 ExternalActions,
154}
155
156#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
160pub struct AuthorityActionCountV1 {
161 pub action: AuthorityActionV1,
162 pub count: usize,
163}
164
165#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
169pub struct AuthorityControlClassCountV1 {
170 pub control_class: CanisterControlClassV1,
171 pub count: usize,
172}
173
174#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
178pub struct AuthorityReportCountsV1 {
179 pub already_correct: usize,
180 pub can_apply_automatically: usize,
181 pub requires_external_action: usize,
182 pub unsafe_blocked: usize,
183 pub unknown: usize,
184 pub hard_failures: usize,
185}
186
187#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
191pub struct CanisterAuthorityActionV1 {
192 pub canister_id: Option<String>,
193 pub role: Option<String>,
194 pub control_classification: CanisterControlClassV1,
195 pub observed_controllers: Vec<String>,
196 pub desired_controllers: Vec<String>,
197 pub controller_delta: AuthorityControllerDeltaV1,
198 pub action: AuthorityActionV1,
199 pub state: AuthorityReconciliationStateV1,
200 pub can_apply: bool,
201 pub reason: String,
202}
203
204#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
208pub struct AuthorityExternalActionV1 {
209 pub subject: String,
210 pub canister_id: Option<String>,
211 pub role: Option<String>,
212 pub control_classification: CanisterControlClassV1,
213 pub state: AuthorityReconciliationStateV1,
214 pub action: AuthorityActionV1,
215 pub observed_controllers: Vec<String>,
216 pub desired_controllers: Vec<String>,
217 pub controller_delta: AuthorityControllerDeltaV1,
218 pub reason: String,
219}
220
221#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
225pub enum AuthorityActionV1 {
226 None,
227 AddControllers,
228 RemoveControllers,
229 ReplaceControllerSet,
230 RequiresExternalController,
231 RequiresDestructiveImportConfirmation,
232 ObserveOnly,
233 AdoptPlanAvailable,
234 BlockedByPolicy,
235 UnknownObservation,
236}
237
238#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
242pub enum AuthorityReconciliationStateV1 {
243 AlreadyCorrect,
244 CanApplyAutomatically,
245 RequiresExternalAction,
246 UnsafeBlocked,
247 Unknown,
248}