Skip to main content

canic_host/deployment_truth/
model.rs

1use serde::{Deserialize, Serialize};
2
3///
4/// DeploymentPlanV1
5///
6#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
7pub struct DeploymentPlanV1 {
8    pub schema_version: u32,
9    pub plan_id: String,
10    pub deployment_identity: DeploymentIdentityV1,
11    pub trust_domain: TrustDomainV1,
12    pub fleet_template: String,
13    pub runtime_variant: String,
14    pub authority_profile: AuthorityProfileV1,
15    pub role_artifacts: Vec<RoleArtifactV1>,
16    pub expected_canisters: Vec<ExpectedCanisterV1>,
17    pub expected_pool: Vec<ExpectedPoolCanisterV1>,
18    pub expected_verifier_readiness: VerifierReadinessExpectationV1,
19    pub unresolved_assumptions: Vec<DeploymentAssumptionV1>,
20}
21
22///
23/// DeploymentInventoryV1
24///
25#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
26pub struct DeploymentInventoryV1 {
27    pub schema_version: u32,
28    pub inventory_id: String,
29    pub observed_at: String,
30    pub observed_identity: Option<DeploymentIdentityV1>,
31    pub local_config: LocalDeploymentConfigV1,
32    pub observed_canisters: Vec<ObservedCanisterV1>,
33    pub observed_pool: Vec<ObservedPoolCanisterV1>,
34    pub observed_artifacts: Vec<ObservedArtifactV1>,
35    pub observed_verifier_readiness: VerifierReadinessObservationV1,
36    pub unresolved_observations: Vec<DeploymentObservationGapV1>,
37}
38
39///
40/// DeploymentReceiptV1
41///
42#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
43pub struct DeploymentReceiptV1 {
44    pub schema_version: u32,
45    pub operation_id: String,
46    pub plan_id: String,
47    pub execution_context: Option<DeploymentExecutionContextV1>,
48    pub operation_status: DeploymentExecutionStatusV1,
49    pub started_at: String,
50    pub finished_at: Option<String>,
51    pub operator_principal: Option<String>,
52    pub root_principal: Option<String>,
53    pub previous_observed_deployment_epoch: Option<u64>,
54    pub phase_receipts: Vec<PhaseReceiptV1>,
55    pub role_phase_receipts: Vec<RolePhaseReceiptV1>,
56    pub final_inventory_id: Option<String>,
57    pub command_result: DeploymentCommandResultV1,
58}
59
60///
61/// DeploymentExecutionContextV1
62///
63#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
64pub struct DeploymentExecutionContextV1 {
65    pub workspace_root: Option<String>,
66    pub icp_root: Option<String>,
67    pub artifact_roots: Vec<String>,
68    pub backend: DeploymentExecutorBackendV1,
69    pub backend_capabilities: Vec<DeploymentExecutorCapabilityV1>,
70}
71
72///
73/// DeploymentExecutionPreflightV1
74///
75#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
76pub struct DeploymentExecutionPreflightV1 {
77    pub schema_version: u32,
78    pub plan_id: String,
79    pub safety_report_id: String,
80    pub authority_plan_id: String,
81    pub backend: DeploymentExecutorBackendV1,
82    pub status: DeploymentExecutionPreflightStatusV1,
83    pub planned_phases: Vec<String>,
84    pub required_capabilities: Vec<DeploymentExecutorCapabilityV1>,
85    pub missing_capabilities: Vec<DeploymentExecutorCapabilityV1>,
86    pub blockers: Vec<SafetyFindingV1>,
87}
88
89///
90/// DeploymentExecutionPreflightStatusV1
91///
92#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
93pub enum DeploymentExecutionPreflightStatusV1 {
94    Ready,
95    Blocked,
96}
97
98///
99/// DeploymentExecutorBackendV1
100///
101#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
102pub enum DeploymentExecutorBackendV1 {
103    CurrentCli,
104    PocketIc,
105    DirectAgent,
106    Other { name: String },
107}
108
109///
110/// DeploymentExecutorCapabilityV1
111///
112#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
113pub enum DeploymentExecutorCapabilityV1 {
114    CreateCanister,
115    CanisterStatus,
116    UpdateSettings,
117    InstallCode,
118    Call,
119    Query,
120    StageArtifact,
121}
122
123///
124/// ArtifactTransportV1
125///
126#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
127pub enum ArtifactTransportV1 {
128    LocalCli,
129    WasmStore,
130    DirectAgent,
131}
132
133///
134/// StagingReceiptV1
135///
136#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
137pub struct StagingReceiptV1 {
138    pub schema_version: u32,
139    pub role: String,
140    pub artifact_identity: String,
141    pub transport: ArtifactTransportV1,
142    pub wasm_store_locator: Option<String>,
143    pub prepared_chunk_hashes: Vec<String>,
144    pub published_chunk_count: usize,
145    pub verified_postcondition: VerifiedPostconditionV1,
146}
147
148///
149/// RoleArtifactSourceV1
150///
151#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
152pub struct RoleArtifactSourceV1 {
153    pub role: String,
154    pub kind: RoleArtifactSourceKindV1,
155    pub locator: Option<String>,
156    pub previous_receipt_kind: Option<PreviousArtifactReceiptKindV1>,
157    pub expected_wasm_sha256: Option<String>,
158    pub expected_wasm_gz_sha256: Option<String>,
159    pub expected_candid_sha256: Option<String>,
160    pub expected_canonical_embedded_config_sha256: Option<String>,
161}
162
163///
164/// RolePromotionInputV1
165///
166#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
167pub struct RolePromotionInputV1 {
168    pub role: String,
169    pub promotion_level: PromotionArtifactLevelV1,
170    pub source: RoleArtifactSourceV1,
171    pub require_byte_identical_wasm: bool,
172    pub require_target_embedded_config: bool,
173    pub target_store_has_artifact: Option<bool>,
174}
175
176///
177/// PromotionArtifactLevelV1
178///
179#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
180pub enum PromotionArtifactLevelV1 {
181    SealedWasm,
182    SourceBuild,
183}
184
185///
186/// PromotionArtifactIdentityReportV1
187///
188#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
189pub struct PromotionArtifactIdentityReportV1 {
190    pub schema_version: u32,
191    pub report_id: String,
192    pub status: PromotionReadinessStatusV1,
193    pub roles: Vec<RolePromotionArtifactIdentityV1>,
194    pub identity_groups: Vec<PromotionArtifactIdentityGroupV1>,
195    pub blockers: Vec<SafetyFindingV1>,
196}
197
198///
199/// PromotionArtifactIdentityGroupV1
200///
201#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
202pub struct PromotionArtifactIdentityGroupV1 {
203    pub identity_key: String,
204    pub identity_kind: PromotionArtifactIdentityKindV1,
205    pub roles: Vec<String>,
206    pub source_kinds: Vec<RoleArtifactSourceKindV1>,
207    pub source_locators: Vec<String>,
208    pub digest_pinned: bool,
209    pub wasm_sha256: Option<String>,
210    pub wasm_gz_sha256: Option<String>,
211    pub candid_sha256: Option<String>,
212    pub canonical_embedded_config_sha256: Option<String>,
213}
214
215///
216/// RolePromotionArtifactIdentityV1
217///
218#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
219pub struct RolePromotionArtifactIdentityV1 {
220    pub role: String,
221    pub promotion_level: PromotionArtifactLevelV1,
222    pub source_kind: RoleArtifactSourceKindV1,
223    pub source_locator: Option<String>,
224    pub identity_kind: PromotionArtifactIdentityKindV1,
225    pub digest_pinned: bool,
226    pub wasm_sha256: Option<String>,
227    pub wasm_gz_sha256: Option<String>,
228    pub candid_sha256: Option<String>,
229    pub canonical_embedded_config_sha256: Option<String>,
230}
231
232///
233/// PromotionArtifactIdentityKindV1
234///
235#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
236pub enum PromotionArtifactIdentityKindV1 {
237    SealedWasm,
238    SealedCompressedWasm,
239    SealedWasmAndCompressedWasm,
240    SourceBuild,
241    Deferred,
242}
243
244///
245/// PromotionReadinessV1
246///
247#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
248pub struct PromotionReadinessV1 {
249    pub schema_version: u32,
250    pub readiness_id: String,
251    pub target_plan_id: String,
252    pub status: PromotionReadinessStatusV1,
253    pub roles: Vec<RolePromotionReadinessV1>,
254    pub blockers: Vec<SafetyFindingV1>,
255    pub warnings: Vec<SafetyFindingV1>,
256}
257
258///
259/// PromotionPlanTransformV1
260///
261#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
262pub struct PromotionPlanTransformV1 {
263    pub schema_version: u32,
264    pub transform_id: String,
265    pub target_plan_id: String,
266    pub promoted_plan_id: String,
267    pub promoted_plan: DeploymentPlanV1,
268    pub roles: Vec<RolePromotionPlanTransformV1>,
269}
270
271///
272/// PromotionPlanTransformEvidenceV1
273///
274#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
275pub struct PromotionPlanTransformEvidenceV1 {
276    pub schema_version: u32,
277    pub evidence_id: String,
278    pub generated_at: String,
279    pub transform: PromotionPlanTransformV1,
280}
281
282///
283/// RolePromotionPlanTransformV1
284///
285#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
286pub struct RolePromotionPlanTransformV1 {
287    pub role: String,
288    pub promotion_level: PromotionArtifactLevelV1,
289    pub source_kind: RoleArtifactSourceKindV1,
290    pub source_locator: Option<String>,
291    pub artifact_source_before: ArtifactSourceV1,
292    pub artifact_source_after: ArtifactSourceV1,
293    pub wasm_sha256_before: Option<String>,
294    pub wasm_sha256_after: Option<String>,
295    pub wasm_gz_sha256_before: Option<String>,
296    pub wasm_gz_sha256_after: Option<String>,
297    pub candid_sha256_before: Option<String>,
298    pub candid_sha256_after: Option<String>,
299    pub canonical_embedded_config_sha256_before: Option<String>,
300    pub canonical_embedded_config_sha256_after: Option<String>,
301    pub artifact_identity_changed: bool,
302    pub embedded_config_changed: bool,
303    pub target_materialization_preserved: bool,
304}
305
306///
307/// PromotionReadinessStatusV1
308///
309#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
310pub enum PromotionReadinessStatusV1 {
311    Ready,
312    Blocked,
313}
314
315///
316/// RolePromotionReadinessV1
317///
318#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
319pub struct RolePromotionReadinessV1 {
320    pub role: String,
321    pub promotion_level: PromotionArtifactLevelV1,
322    pub source_kind: RoleArtifactSourceKindV1,
323    pub source_locator: Option<String>,
324    pub source_wasm_sha256: Option<String>,
325    pub source_wasm_gz_sha256: Option<String>,
326    pub target_wasm_sha256: Option<String>,
327    pub target_wasm_gz_sha256: Option<String>,
328    pub source_canonical_embedded_config_sha256: Option<String>,
329    pub target_canonical_embedded_config_sha256: Option<String>,
330    pub byte_identical_wasm: Option<bool>,
331    pub embedded_config_identical: Option<bool>,
332    pub target_store_has_artifact: Option<bool>,
333    pub restage_required: bool,
334}
335
336///
337/// RoleArtifactSourceKindV1
338///
339#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
340pub enum RoleArtifactSourceKindV1 {
341    WorkspacePackage,
342    PublishedPackage,
343    LocalWasm,
344    LocalWasmGz,
345    PreviousReceiptArtifact,
346    CanonicalWasmStoreDefault,
347}
348
349///
350/// PreviousArtifactReceiptKindV1
351///
352#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
353pub enum PreviousArtifactReceiptKindV1 {
354    DeploymentReceipt,
355    StagingReceipt,
356}
357
358///
359/// AuthorityReceiptV1
360///
361#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
362pub struct AuthorityReceiptV1 {
363    pub schema_version: u32,
364    pub operation_id: String,
365    pub check_id: Option<String>,
366    pub reconciliation_plan_id: String,
367    pub authority_report_id: String,
368    pub inventory_id: String,
369    pub authority_profile_hash: Option<String>,
370    pub operation_status: DeploymentExecutionStatusV1,
371    pub started_at: String,
372    pub finished_at: Option<String>,
373    pub attempted_actions: Vec<AuthorityAttemptedActionV1>,
374    pub verified_controller_observations: Vec<AuthorityControllerObservationV1>,
375    pub hard_failures: Vec<SafetyFindingV1>,
376    pub unresolved_observation_gaps: Vec<DeploymentObservationGapV1>,
377    pub unresolved_external_actions: Vec<AuthorityExternalActionV1>,
378    pub command_result: DeploymentCommandResultV1,
379}
380
381///
382/// AuthorityDryRunEvidenceV1
383///
384#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
385pub struct AuthorityDryRunEvidenceV1 {
386    pub schema_version: u32,
387    pub evidence_id: String,
388    pub check_id: String,
389    pub generated_at: String,
390    pub reconciliation_plan: AuthorityReconciliationPlanV1,
391    pub authority_report: AuthorityReportV1,
392    pub authority_receipt: AuthorityReceiptV1,
393}
394
395///
396/// AuthorityAttemptedActionV1
397///
398#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
399pub struct AuthorityAttemptedActionV1 {
400    pub subject: String,
401    pub canister_id: Option<String>,
402    pub role: Option<String>,
403    pub action: AuthorityActionV1,
404    pub result: RolePhaseResultV1,
405    pub error: Option<String>,
406}
407
408///
409/// AuthorityControllerObservationV1
410///
411#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
412pub struct AuthorityControllerObservationV1 {
413    pub subject: String,
414    pub canister_id: Option<String>,
415    pub role: Option<String>,
416    pub state: AuthorityReconciliationStateV1,
417    pub action: AuthorityActionV1,
418    pub observed_controllers: Vec<String>,
419    pub desired_controllers: Vec<String>,
420    pub controller_delta: AuthorityControllerDeltaV1,
421}
422
423///
424/// RoleArtifactManifestV1
425///
426#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
427pub struct RoleArtifactManifestV1 {
428    pub schema_version: u32,
429    pub manifest_id: String,
430    pub network: String,
431    pub artifact_root: Option<String>,
432    pub role_artifacts: Vec<RoleArtifactV1>,
433    pub unresolved_artifacts: Vec<DeploymentObservationGapV1>,
434}
435
436///
437/// DeploymentDiffV1
438///
439#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
440pub struct DeploymentDiffV1 {
441    pub schema_version: u32,
442    pub plan_identity: DeploymentIdentityV1,
443    pub observed_identity: Option<DeploymentIdentityV1>,
444    pub artifact_diff: Vec<DiffItemV1>,
445    pub controller_diff: Vec<DiffItemV1>,
446    pub pool_diff: Vec<DiffItemV1>,
447    pub embedded_config_diff: Vec<DiffItemV1>,
448    pub module_hash_diff: Vec<DiffItemV1>,
449    pub verifier_readiness_diff: Vec<DiffItemV1>,
450    pub resume_safety: ResumeSafetyV1,
451    pub hard_failures: Vec<SafetyFindingV1>,
452    pub warnings: Vec<SafetyFindingV1>,
453    pub resumable_phases: Vec<String>,
454}
455
456///
457/// SafetyReportV1
458///
459#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
460pub struct SafetyReportV1 {
461    pub schema_version: u32,
462    pub report_id: String,
463    pub diff_id: Option<String>,
464    pub status: SafetyStatusV1,
465    pub summary: String,
466    pub hard_failures: Vec<SafetyFindingV1>,
467    pub warnings: Vec<SafetyFindingV1>,
468    pub next_actions: Vec<String>,
469}
470
471///
472/// DeploymentCheckV1
473///
474#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
475pub struct DeploymentCheckV1 {
476    pub schema_version: u32,
477    pub check_id: String,
478    pub plan: DeploymentPlanV1,
479    pub inventory: DeploymentInventoryV1,
480    pub diff: DeploymentDiffV1,
481    pub report: SafetyReportV1,
482}
483
484///
485/// AuthorityReconciliationPlanV1
486///
487#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
488pub struct AuthorityReconciliationPlanV1 {
489    pub schema_version: u32,
490    pub plan_id: String,
491    pub inventory_id: String,
492    pub authority_profile_hash: Option<String>,
493    pub canister_actions: Vec<CanisterAuthorityActionV1>,
494    pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
495    pub hard_failures: Vec<SafetyFindingV1>,
496    pub external_actions_required: Vec<AuthorityExternalActionV1>,
497}
498
499///
500/// AuthorityAutomaticActionV1
501///
502#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
503pub struct AuthorityAutomaticActionV1 {
504    pub subject: String,
505    pub canister_id: String,
506    pub role: Option<String>,
507    pub action: AuthorityActionV1,
508    pub observed_controllers: Vec<String>,
509    pub desired_controllers: Vec<String>,
510    pub controller_delta: AuthorityControllerDeltaV1,
511    pub reason: String,
512}
513
514///
515/// AuthorityControllerDeltaV1
516///
517#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
518pub struct AuthorityControllerDeltaV1 {
519    pub add_controllers: Vec<String>,
520    pub remove_controllers: Vec<String>,
521}
522
523///
524/// AuthorityReportV1
525///
526#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
527pub struct AuthorityReportV1 {
528    pub schema_version: u32,
529    pub report_id: String,
530    pub check_id: Option<String>,
531    pub reconciliation_plan_id: String,
532    pub inventory_id: String,
533    pub authority_profile_hash: Option<String>,
534    pub status: SafetyStatusV1,
535    pub summary: String,
536    pub counts: AuthorityReportCountsV1,
537    pub apply_readiness: AuthorityApplyReadinessV1,
538    pub action_counts: Vec<AuthorityActionCountV1>,
539    pub control_class_counts: Vec<AuthorityControlClassCountV1>,
540    pub observation_gaps: Vec<DeploymentObservationGapV1>,
541    pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
542    pub hard_failures: Vec<SafetyFindingV1>,
543    pub external_actions_required: Vec<AuthorityExternalActionV1>,
544    pub next_actions: Vec<String>,
545}
546
547///
548/// AuthorityApplyReadinessV1
549///
550#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
551pub struct AuthorityApplyReadinessV1 {
552    pub can_apply_automatically: bool,
553    pub automatic_action_count: usize,
554    pub blockers: Vec<AuthorityApplyBlockerV1>,
555}
556
557///
558/// AuthorityApplyBlockerV1
559///
560#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
561pub enum AuthorityApplyBlockerV1 {
562    UnsafeBlocked,
563    HardFailures,
564    ObservationGaps,
565    ExternalActions,
566}
567
568///
569/// AuthorityActionCountV1
570///
571#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
572pub struct AuthorityActionCountV1 {
573    pub action: AuthorityActionV1,
574    pub count: usize,
575}
576
577///
578/// AuthorityControlClassCountV1
579///
580#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
581pub struct AuthorityControlClassCountV1 {
582    pub control_class: CanisterControlClassV1,
583    pub count: usize,
584}
585
586///
587/// AuthorityReportCountsV1
588///
589#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
590pub struct AuthorityReportCountsV1 {
591    pub already_correct: usize,
592    pub can_apply_automatically: usize,
593    pub requires_external_action: usize,
594    pub unsafe_blocked: usize,
595    pub unknown: usize,
596    pub hard_failures: usize,
597}
598
599///
600/// CanisterAuthorityActionV1
601///
602#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
603pub struct CanisterAuthorityActionV1 {
604    pub canister_id: Option<String>,
605    pub role: Option<String>,
606    pub control_classification: CanisterControlClassV1,
607    pub observed_controllers: Vec<String>,
608    pub desired_controllers: Vec<String>,
609    pub controller_delta: AuthorityControllerDeltaV1,
610    pub action: AuthorityActionV1,
611    pub state: AuthorityReconciliationStateV1,
612    pub can_apply: bool,
613    pub reason: String,
614}
615
616///
617/// AuthorityExternalActionV1
618///
619#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
620pub struct AuthorityExternalActionV1 {
621    pub subject: String,
622    pub canister_id: Option<String>,
623    pub role: Option<String>,
624    pub control_classification: CanisterControlClassV1,
625    pub state: AuthorityReconciliationStateV1,
626    pub action: AuthorityActionV1,
627    pub observed_controllers: Vec<String>,
628    pub desired_controllers: Vec<String>,
629    pub controller_delta: AuthorityControllerDeltaV1,
630    pub reason: String,
631}
632
633///
634/// AuthorityActionV1
635///
636#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
637pub enum AuthorityActionV1 {
638    None,
639    AddControllers,
640    RemoveControllers,
641    ReplaceControllerSet,
642    RequiresExternalController,
643    RequiresDestructiveImportConfirmation,
644    ObserveOnly,
645    AdoptPlanAvailable,
646    BlockedByPolicy,
647    UnknownObservation,
648}
649
650///
651/// AuthorityReconciliationStateV1
652///
653#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
654pub enum AuthorityReconciliationStateV1 {
655    AlreadyCorrect,
656    CanApplyAutomatically,
657    RequiresExternalAction,
658    UnsafeBlocked,
659    Unknown,
660}
661
662///
663/// DeploymentIdentityV1
664///
665#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
666pub struct DeploymentIdentityV1 {
667    pub deployment_name: String,
668    pub network: String,
669    pub root_principal: Option<String>,
670    pub authority_profile_hash: Option<String>,
671    pub role_topology_hash: Option<String>,
672    pub deployment_manifest_digest: Option<String>,
673    pub canonical_runtime_config_digest: Option<String>,
674    pub role_embedded_config_set_digest: Option<String>,
675    pub artifact_set_digest: Option<String>,
676    pub pool_identity_set_digest: Option<String>,
677    pub canic_version: Option<String>,
678    pub ic_memory_version: Option<String>,
679}
680
681///
682/// TrustDomainV1
683///
684#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
685pub struct TrustDomainV1 {
686    pub root_trust_anchor: Option<String>,
687    pub migration_from: Option<String>,
688}
689
690///
691/// AuthorityProfileV1
692///
693#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
694pub struct AuthorityProfileV1 {
695    pub profile_id: String,
696    pub expected_controllers: Vec<String>,
697    pub staging_controllers: Vec<String>,
698    pub emergency_controllers: Vec<String>,
699}
700
701///
702/// RoleArtifactV1
703///
704#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
705pub struct RoleArtifactV1 {
706    pub role: String,
707    pub source: ArtifactSourceV1,
708    pub build_profile: String,
709    pub wasm_path: Option<String>,
710    pub wasm_gz_path: Option<String>,
711    pub wasm_gz_size_bytes: Option<u64>,
712    pub wasm_sha256: Option<String>,
713    pub wasm_gz_sha256: Option<String>,
714    pub wasm_gz_sha256_source: Option<ArtifactDigestSourceV1>,
715    pub observed_wasm_gz_file_sha256: Option<String>,
716    pub observed_wasm_gz_file_sha256_source: Option<ArtifactDigestSourceV1>,
717    pub installed_module_hash: Option<String>,
718    pub candid_path: Option<String>,
719    pub candid_sha256: Option<String>,
720    pub raw_config_sha256: Option<String>,
721    pub canonical_embedded_config_sha256: Option<String>,
722    pub embedded_topology_sha256: Option<String>,
723    pub builder_version: Option<String>,
724    pub rust_toolchain: Option<String>,
725    pub package_version: Option<String>,
726}
727
728///
729/// ArtifactDigestSourceV1
730///
731#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
732pub enum ArtifactDigestSourceV1 {
733    ReleaseSetManifest,
734    ObservedFileDigest,
735    InstalledModuleHash,
736}
737
738///
739/// ArtifactSourceV1
740///
741#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
742pub enum ArtifactSourceV1 {
743    LocalBuild,
744    ReleaseSet,
745    WasmStore,
746    External,
747    Unknown,
748}
749
750///
751/// ExpectedCanisterV1
752///
753#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
754pub struct ExpectedCanisterV1 {
755    pub role: String,
756    pub canister_id: Option<String>,
757    pub control_class: CanisterControlClassV1,
758}
759
760///
761/// ObservedCanisterV1
762///
763#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
764pub struct ObservedCanisterV1 {
765    pub canister_id: String,
766    pub role: Option<String>,
767    pub control_class: CanisterControlClassV1,
768    pub controllers: Vec<String>,
769    pub module_hash: Option<String>,
770    pub status: Option<String>,
771    pub root_trust_anchor: Option<String>,
772    pub canonical_embedded_config_digest: Option<String>,
773    pub role_assignment_source: Option<String>,
774}
775
776///
777/// CanisterControlClassV1
778///
779#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
780pub enum CanisterControlClassV1 {
781    DeploymentControlled,
782    CanicManagedPool,
783    ExternallyImported,
784    JointlyControlled,
785    UserControlled,
786    UnknownUnsafe,
787}
788
789///
790/// ExpectedPoolCanisterV1
791///
792#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
793pub struct ExpectedPoolCanisterV1 {
794    pub pool: String,
795    pub canister_id: Option<String>,
796    pub role: Option<String>,
797}
798
799///
800/// ObservedPoolCanisterV1
801///
802#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
803pub struct ObservedPoolCanisterV1 {
804    pub pool: String,
805    pub canister_id: String,
806    pub role: Option<String>,
807    pub control_class: CanisterControlClassV1,
808}
809
810///
811/// LocalDeploymentConfigV1
812///
813#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
814pub struct LocalDeploymentConfigV1 {
815    pub config_path: Option<String>,
816    pub raw_config_sha256: Option<String>,
817    pub canonical_embedded_config_sha256: Option<String>,
818}
819
820///
821/// ObservedArtifactV1
822///
823#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
824pub struct ObservedArtifactV1 {
825    pub role: String,
826    pub artifact_path: String,
827    pub file_sha256: Option<String>,
828    pub file_sha256_source: Option<ArtifactDigestSourceV1>,
829    pub payload_sha256: Option<String>,
830    pub payload_size_bytes: Option<u64>,
831    pub source: ArtifactSourceV1,
832}
833
834///
835/// VerifierReadinessExpectationV1
836///
837#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
838pub struct VerifierReadinessExpectationV1 {
839    pub required: bool,
840    pub expected_role_epochs: Vec<RoleEpochExpectationV1>,
841}
842
843///
844/// VerifierReadinessObservationV1
845///
846#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
847pub struct VerifierReadinessObservationV1 {
848    pub status: ObservationStatusV1,
849    pub role_epochs: Vec<RoleEpochObservationV1>,
850}
851
852///
853/// RoleEpochExpectationV1
854///
855#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
856pub struct RoleEpochExpectationV1 {
857    pub role: String,
858    pub minimum_epoch: u64,
859}
860
861///
862/// RoleEpochObservationV1
863///
864#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
865pub struct RoleEpochObservationV1 {
866    pub role: String,
867    pub observed_epoch: Option<u64>,
868    pub status: ObservationStatusV1,
869}
870
871///
872/// DeploymentAssumptionV1
873///
874#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
875pub struct DeploymentAssumptionV1 {
876    pub key: String,
877    pub description: String,
878}
879
880///
881/// DeploymentObservationGapV1
882///
883#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
884pub struct DeploymentObservationGapV1 {
885    pub key: String,
886    pub description: String,
887}
888
889///
890/// PhaseReceiptV1
891///
892#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
893pub struct PhaseReceiptV1 {
894    pub phase: String,
895    pub started_at: String,
896    pub finished_at: Option<String>,
897    pub attempted_action: String,
898    pub verified_postcondition: VerifiedPostconditionV1,
899}
900
901///
902/// VerifiedPostconditionV1
903///
904#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
905pub struct VerifiedPostconditionV1 {
906    pub status: ObservationStatusV1,
907    pub evidence: Vec<String>,
908}
909
910///
911/// DeploymentExecutionStatusV1
912///
913#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
914pub enum DeploymentExecutionStatusV1 {
915    NotStarted,
916    InProgress,
917    FailedBeforeMutation,
918    PartiallyApplied,
919    FailedAfterMutation,
920    Complete,
921}
922
923///
924/// DeploymentCommandResultV1
925///
926#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
927pub enum DeploymentCommandResultV1 {
928    NotFinished,
929    Succeeded,
930    Failed { code: String, message: String },
931}
932
933///
934/// RolePhaseReceiptV1
935///
936#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
937pub struct RolePhaseReceiptV1 {
938    pub role: String,
939    pub phase: String,
940    pub result: RolePhaseResultV1,
941    pub previous_module_hash: Option<String>,
942    pub target_module_hash: Option<String>,
943    pub observed_module_hash_after: Option<String>,
944    pub artifact_digest: Option<String>,
945    pub canonical_embedded_config_sha256: Option<String>,
946    pub error: Option<String>,
947}
948
949///
950/// RolePhaseResultV1
951///
952#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
953pub enum RolePhaseResultV1 {
954    Applied,
955    Failed,
956    Skipped,
957    NotAttempted,
958    VerifiedAlreadyApplied,
959}
960
961///
962/// DiffItemV1
963///
964#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
965pub struct DiffItemV1 {
966    pub category: String,
967    pub subject: String,
968    pub expected: Option<String>,
969    pub observed: Option<String>,
970    pub severity: SafetySeverityV1,
971}
972
973///
974/// ResumeSafetyV1
975///
976#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
977pub struct ResumeSafetyV1 {
978    pub status: SafetyStatusV1,
979    pub reasons: Vec<String>,
980}
981
982///
983/// SafetyFindingV1
984///
985#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
986pub struct SafetyFindingV1 {
987    pub code: String,
988    pub message: String,
989    pub severity: SafetySeverityV1,
990    pub subject: Option<String>,
991}
992
993///
994/// SafetyStatusV1
995///
996#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
997pub enum SafetyStatusV1 {
998    NotEvaluated,
999    Safe,
1000    Warning,
1001    Blocked,
1002}
1003
1004///
1005/// SafetySeverityV1
1006///
1007#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1008pub enum SafetySeverityV1 {
1009    Info,
1010    Warning,
1011    HardFailure,
1012}
1013
1014///
1015/// ObservationStatusV1
1016///
1017#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1018pub enum ObservationStatusV1 {
1019    NotObserved,
1020    Observed,
1021    Missing,
1022    Inconclusive,
1023}