1use serde::{Deserialize, Serialize};
2
3#[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#[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#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
93pub enum DeploymentExecutionPreflightStatusV1 {
94 Ready,
95 Blocked,
96}
97
98#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
102pub enum DeploymentExecutorBackendV1 {
103 CurrentCli,
104 PocketIc,
105 DirectAgent,
106 Other { name: String },
107}
108
109#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
127pub enum ArtifactTransportV1 {
128 LocalCli,
129 WasmStore,
130 DirectAgent,
131}
132
133#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
180pub enum PromotionArtifactLevelV1 {
181 SealedWasm,
182 SourceBuild,
183}
184
185#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
236pub enum PromotionArtifactIdentityKindV1 {
237 SealedWasm,
238 SealedCompressedWasm,
239 SealedWasmAndCompressedWasm,
240 SourceBuild,
241 Deferred,
242}
243
244#[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#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
310pub enum PromotionReadinessStatusV1 {
311 Ready,
312 Blocked,
313}
314
315#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
353pub enum PreviousArtifactReceiptKindV1 {
354 DeploymentReceipt,
355 StagingReceipt,
356}
357
358#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
561pub enum AuthorityApplyBlockerV1 {
562 UnsafeBlocked,
563 HardFailures,
564 ObservationGaps,
565 ExternalActions,
566}
567
568#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
572pub struct AuthorityActionCountV1 {
573 pub action: AuthorityActionV1,
574 pub count: usize,
575}
576
577#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
581pub struct AuthorityControlClassCountV1 {
582 pub control_class: CanisterControlClassV1,
583 pub count: usize,
584}
585
586#[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#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
654pub enum AuthorityReconciliationStateV1 {
655 AlreadyCorrect,
656 CanApplyAutomatically,
657 RequiresExternalAction,
658 UnsafeBlocked,
659 Unknown,
660}
661
662#[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#[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#[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#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
732pub enum ArtifactDigestSourceV1 {
733 ReleaseSetManifest,
734 ObservedFileDigest,
735 InstalledModuleHash,
736}
737
738#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
742pub enum ArtifactSourceV1 {
743 LocalBuild,
744 ReleaseSet,
745 WasmStore,
746 External,
747 Unknown,
748}
749
750#[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#[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#[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#[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#[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#[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#[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#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
838pub struct VerifierReadinessExpectationV1 {
839 pub required: bool,
840 pub expected_role_epochs: Vec<RoleEpochExpectationV1>,
841}
842
843#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
847pub struct VerifierReadinessObservationV1 {
848 pub status: ObservationStatusV1,
849 pub role_epochs: Vec<RoleEpochObservationV1>,
850}
851
852#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
856pub struct RoleEpochExpectationV1 {
857 pub role: String,
858 pub minimum_epoch: u64,
859}
860
861#[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#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
875pub struct DeploymentAssumptionV1 {
876 pub key: String,
877 pub description: String,
878}
879
880#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
884pub struct DeploymentObservationGapV1 {
885 pub key: String,
886 pub description: String,
887}
888
889#[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#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
905pub struct VerifiedPostconditionV1 {
906 pub status: ObservationStatusV1,
907 pub evidence: Vec<String>,
908}
909
910#[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#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
927pub enum DeploymentCommandResultV1 {
928 NotFinished,
929 Succeeded,
930 Failed { code: String, message: String },
931}
932
933#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
953pub enum RolePhaseResultV1 {
954 Applied,
955 Failed,
956 Skipped,
957 NotAttempted,
958 VerifiedAlreadyApplied,
959}
960
961#[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#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
977pub struct ResumeSafetyV1 {
978 pub status: SafetyStatusV1,
979 pub reasons: Vec<String>,
980}
981
982#[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#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
997pub enum SafetyStatusV1 {
998 NotEvaluated,
999 Safe,
1000 Warning,
1001 Blocked,
1002}
1003
1004#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1008pub enum SafetySeverityV1 {
1009 Info,
1010 Warning,
1011 HardFailure,
1012}
1013
1014#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1018pub enum ObservationStatusV1 {
1019 NotObserved,
1020 Observed,
1021 Missing,
1022 Inconclusive,
1023}