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 BuildRecipeIdentityV1 {
190 pub recipe_id: String,
191 pub source_kind: RoleArtifactSourceKindV1,
192 pub source_revision: String,
193 pub source_tree_clean: bool,
194 pub package_or_role_selector: String,
195 pub cargo_profile: String,
196 pub cargo_features_digest: String,
197 pub cargo_lock_digest: String,
198 pub rust_toolchain: String,
199 pub builder_version: String,
200 pub target_triple: String,
201 pub linker_identity: String,
202 pub deterministic_build_mode: String,
203 pub wasm_opt_version: String,
204 pub compression_identity: String,
205}
206
207#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
211pub struct BuildMaterializationInputV1 {
212 pub materialization_input_id: String,
213 pub build_recipe_id: String,
214 pub canonical_embedded_config_sha256: String,
215 pub network: String,
216 pub root_trust_anchor: String,
217 pub runtime_variant: String,
218}
219
220#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
224pub struct BuildMaterializationResultV1 {
225 pub materialization_result_id: String,
226 pub build_recipe_id: String,
227 pub materialization_input_digest: String,
228 pub wasm_sha256: String,
229 pub wasm_gz_sha256: String,
230 pub installed_module_hash: String,
231 pub candid_sha256: String,
232}
233
234#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
238pub struct BuildMaterializationEvidenceV1 {
239 pub schema_version: u32,
240 pub evidence_id: String,
241 pub recipe: BuildRecipeIdentityV1,
242 pub materialization_input: BuildMaterializationInputV1,
243 pub materialization_result: BuildMaterializationResultV1,
244 pub computed_materialization_input_digest: String,
245 pub recipe_id_matches_input: bool,
246 pub recipe_id_matches_result: bool,
247 pub materialization_input_digest_matches_result: bool,
248}
249
250#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
254pub struct PromotionArtifactIdentityReportV1 {
255 pub schema_version: u32,
256 pub report_id: String,
257 pub status: PromotionReadinessStatusV1,
258 pub roles: Vec<RolePromotionArtifactIdentityV1>,
259 pub identity_groups: Vec<PromotionArtifactIdentityGroupV1>,
260 pub blockers: Vec<SafetyFindingV1>,
261}
262
263#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
267pub struct PromotionArtifactIdentityGroupV1 {
268 pub identity_key: String,
269 pub identity_kind: PromotionArtifactIdentityKindV1,
270 pub roles: Vec<String>,
271 pub source_kinds: Vec<RoleArtifactSourceKindV1>,
272 pub source_locators: Vec<String>,
273 pub digest_pinned: bool,
274 pub wasm_sha256: Option<String>,
275 pub wasm_gz_sha256: Option<String>,
276 pub candid_sha256: Option<String>,
277 pub canonical_embedded_config_sha256: Option<String>,
278}
279
280#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
284pub struct RolePromotionArtifactIdentityV1 {
285 pub role: String,
286 pub promotion_level: PromotionArtifactLevelV1,
287 pub source_kind: RoleArtifactSourceKindV1,
288 pub source_locator: Option<String>,
289 pub identity_kind: PromotionArtifactIdentityKindV1,
290 pub digest_pinned: bool,
291 pub wasm_sha256: Option<String>,
292 pub wasm_gz_sha256: Option<String>,
293 pub candid_sha256: Option<String>,
294 pub canonical_embedded_config_sha256: Option<String>,
295}
296
297#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
301pub enum PromotionArtifactIdentityKindV1 {
302 SealedWasm,
303 SealedCompressedWasm,
304 SealedWasmAndCompressedWasm,
305 SourceBuild,
306 Deferred,
307}
308
309#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
313pub struct PromotionReadinessV1 {
314 pub schema_version: u32,
315 pub readiness_id: String,
316 pub target_plan_id: String,
317 pub status: PromotionReadinessStatusV1,
318 pub roles: Vec<RolePromotionReadinessV1>,
319 pub blockers: Vec<SafetyFindingV1>,
320 pub warnings: Vec<SafetyFindingV1>,
321}
322
323#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
327pub struct PromotionPlanTransformV1 {
328 pub schema_version: u32,
329 pub transform_id: String,
330 pub target_plan_id: String,
331 pub promoted_plan_id: String,
332 pub promoted_plan: DeploymentPlanV1,
333 pub roles: Vec<RolePromotionPlanTransformV1>,
334}
335
336#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
340pub struct PromotionPlanTransformEvidenceV1 {
341 pub schema_version: u32,
342 pub evidence_id: String,
343 pub generated_at: String,
344 pub transform: PromotionPlanTransformV1,
345}
346
347#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
351pub struct RolePromotionPlanTransformV1 {
352 pub role: String,
353 pub promotion_level: PromotionArtifactLevelV1,
354 pub source_kind: RoleArtifactSourceKindV1,
355 pub source_locator: Option<String>,
356 pub artifact_source_before: ArtifactSourceV1,
357 pub artifact_source_after: ArtifactSourceV1,
358 pub wasm_sha256_before: Option<String>,
359 pub wasm_sha256_after: Option<String>,
360 pub wasm_gz_sha256_before: Option<String>,
361 pub wasm_gz_sha256_after: Option<String>,
362 pub candid_sha256_before: Option<String>,
363 pub candid_sha256_after: Option<String>,
364 pub canonical_embedded_config_sha256_before: Option<String>,
365 pub canonical_embedded_config_sha256_after: Option<String>,
366 pub artifact_identity_changed: bool,
367 pub embedded_config_changed: bool,
368 pub target_materialization_preserved: bool,
369}
370
371#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
375pub enum PromotionReadinessStatusV1 {
376 Ready,
377 Blocked,
378}
379
380#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
384pub struct RolePromotionReadinessV1 {
385 pub role: String,
386 pub promotion_level: PromotionArtifactLevelV1,
387 pub source_kind: RoleArtifactSourceKindV1,
388 pub source_locator: Option<String>,
389 pub source_wasm_sha256: Option<String>,
390 pub source_wasm_gz_sha256: Option<String>,
391 pub target_wasm_sha256: Option<String>,
392 pub target_wasm_gz_sha256: Option<String>,
393 pub source_canonical_embedded_config_sha256: Option<String>,
394 pub target_canonical_embedded_config_sha256: Option<String>,
395 pub byte_identical_wasm: Option<bool>,
396 pub embedded_config_identical: Option<bool>,
397 pub target_store_has_artifact: Option<bool>,
398 pub restage_required: bool,
399}
400
401#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
405pub enum RoleArtifactSourceKindV1 {
406 WorkspacePackage,
407 PublishedPackage,
408 LocalWasm,
409 LocalWasmGz,
410 PreviousReceiptArtifact,
411 CanonicalWasmStoreDefault,
412}
413
414#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
418pub enum PreviousArtifactReceiptKindV1 {
419 DeploymentReceipt,
420 StagingReceipt,
421}
422
423#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
427pub struct AuthorityReceiptV1 {
428 pub schema_version: u32,
429 pub operation_id: String,
430 pub check_id: Option<String>,
431 pub reconciliation_plan_id: String,
432 pub authority_report_id: String,
433 pub inventory_id: String,
434 pub authority_profile_hash: Option<String>,
435 pub operation_status: DeploymentExecutionStatusV1,
436 pub started_at: String,
437 pub finished_at: Option<String>,
438 pub attempted_actions: Vec<AuthorityAttemptedActionV1>,
439 pub verified_controller_observations: Vec<AuthorityControllerObservationV1>,
440 pub hard_failures: Vec<SafetyFindingV1>,
441 pub unresolved_observation_gaps: Vec<DeploymentObservationGapV1>,
442 pub unresolved_external_actions: Vec<AuthorityExternalActionV1>,
443 pub command_result: DeploymentCommandResultV1,
444}
445
446#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
450pub struct AuthorityDryRunEvidenceV1 {
451 pub schema_version: u32,
452 pub evidence_id: String,
453 pub check_id: String,
454 pub generated_at: String,
455 pub reconciliation_plan: AuthorityReconciliationPlanV1,
456 pub authority_report: AuthorityReportV1,
457 pub authority_receipt: AuthorityReceiptV1,
458}
459
460#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
464pub struct AuthorityAttemptedActionV1 {
465 pub subject: String,
466 pub canister_id: Option<String>,
467 pub role: Option<String>,
468 pub action: AuthorityActionV1,
469 pub result: RolePhaseResultV1,
470 pub error: Option<String>,
471}
472
473#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
477pub struct AuthorityControllerObservationV1 {
478 pub subject: String,
479 pub canister_id: Option<String>,
480 pub role: Option<String>,
481 pub state: AuthorityReconciliationStateV1,
482 pub action: AuthorityActionV1,
483 pub observed_controllers: Vec<String>,
484 pub desired_controllers: Vec<String>,
485 pub controller_delta: AuthorityControllerDeltaV1,
486}
487
488#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
492pub struct RoleArtifactManifestV1 {
493 pub schema_version: u32,
494 pub manifest_id: String,
495 pub network: String,
496 pub artifact_root: Option<String>,
497 pub role_artifacts: Vec<RoleArtifactV1>,
498 pub unresolved_artifacts: Vec<DeploymentObservationGapV1>,
499}
500
501#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
505pub struct DeploymentDiffV1 {
506 pub schema_version: u32,
507 pub plan_identity: DeploymentIdentityV1,
508 pub observed_identity: Option<DeploymentIdentityV1>,
509 pub artifact_diff: Vec<DiffItemV1>,
510 pub controller_diff: Vec<DiffItemV1>,
511 pub pool_diff: Vec<DiffItemV1>,
512 pub embedded_config_diff: Vec<DiffItemV1>,
513 pub module_hash_diff: Vec<DiffItemV1>,
514 pub verifier_readiness_diff: Vec<DiffItemV1>,
515 pub resume_safety: ResumeSafetyV1,
516 pub hard_failures: Vec<SafetyFindingV1>,
517 pub warnings: Vec<SafetyFindingV1>,
518 pub resumable_phases: Vec<String>,
519}
520
521#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
525pub struct SafetyReportV1 {
526 pub schema_version: u32,
527 pub report_id: String,
528 pub diff_id: Option<String>,
529 pub status: SafetyStatusV1,
530 pub summary: String,
531 pub hard_failures: Vec<SafetyFindingV1>,
532 pub warnings: Vec<SafetyFindingV1>,
533 pub next_actions: Vec<String>,
534}
535
536#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
540pub struct DeploymentCheckV1 {
541 pub schema_version: u32,
542 pub check_id: String,
543 pub plan: DeploymentPlanV1,
544 pub inventory: DeploymentInventoryV1,
545 pub diff: DeploymentDiffV1,
546 pub report: SafetyReportV1,
547}
548
549#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
553pub struct AuthorityReconciliationPlanV1 {
554 pub schema_version: u32,
555 pub plan_id: String,
556 pub inventory_id: String,
557 pub authority_profile_hash: Option<String>,
558 pub canister_actions: Vec<CanisterAuthorityActionV1>,
559 pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
560 pub hard_failures: Vec<SafetyFindingV1>,
561 pub external_actions_required: Vec<AuthorityExternalActionV1>,
562}
563
564#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
568pub struct AuthorityAutomaticActionV1 {
569 pub subject: String,
570 pub canister_id: String,
571 pub role: Option<String>,
572 pub action: AuthorityActionV1,
573 pub observed_controllers: Vec<String>,
574 pub desired_controllers: Vec<String>,
575 pub controller_delta: AuthorityControllerDeltaV1,
576 pub reason: String,
577}
578
579#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
583pub struct AuthorityControllerDeltaV1 {
584 pub add_controllers: Vec<String>,
585 pub remove_controllers: Vec<String>,
586}
587
588#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
592pub struct AuthorityReportV1 {
593 pub schema_version: u32,
594 pub report_id: String,
595 pub check_id: Option<String>,
596 pub reconciliation_plan_id: String,
597 pub inventory_id: String,
598 pub authority_profile_hash: Option<String>,
599 pub status: SafetyStatusV1,
600 pub summary: String,
601 pub counts: AuthorityReportCountsV1,
602 pub apply_readiness: AuthorityApplyReadinessV1,
603 pub action_counts: Vec<AuthorityActionCountV1>,
604 pub control_class_counts: Vec<AuthorityControlClassCountV1>,
605 pub observation_gaps: Vec<DeploymentObservationGapV1>,
606 pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
607 pub hard_failures: Vec<SafetyFindingV1>,
608 pub external_actions_required: Vec<AuthorityExternalActionV1>,
609 pub next_actions: Vec<String>,
610}
611
612#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
616pub struct AuthorityApplyReadinessV1 {
617 pub can_apply_automatically: bool,
618 pub automatic_action_count: usize,
619 pub blockers: Vec<AuthorityApplyBlockerV1>,
620}
621
622#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
626pub enum AuthorityApplyBlockerV1 {
627 UnsafeBlocked,
628 HardFailures,
629 ObservationGaps,
630 ExternalActions,
631}
632
633#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
637pub struct AuthorityActionCountV1 {
638 pub action: AuthorityActionV1,
639 pub count: usize,
640}
641
642#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
646pub struct AuthorityControlClassCountV1 {
647 pub control_class: CanisterControlClassV1,
648 pub count: usize,
649}
650
651#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
655pub struct AuthorityReportCountsV1 {
656 pub already_correct: usize,
657 pub can_apply_automatically: usize,
658 pub requires_external_action: usize,
659 pub unsafe_blocked: usize,
660 pub unknown: usize,
661 pub hard_failures: usize,
662}
663
664#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
668pub struct CanisterAuthorityActionV1 {
669 pub canister_id: Option<String>,
670 pub role: Option<String>,
671 pub control_classification: CanisterControlClassV1,
672 pub observed_controllers: Vec<String>,
673 pub desired_controllers: Vec<String>,
674 pub controller_delta: AuthorityControllerDeltaV1,
675 pub action: AuthorityActionV1,
676 pub state: AuthorityReconciliationStateV1,
677 pub can_apply: bool,
678 pub reason: String,
679}
680
681#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
685pub struct AuthorityExternalActionV1 {
686 pub subject: String,
687 pub canister_id: Option<String>,
688 pub role: Option<String>,
689 pub control_classification: CanisterControlClassV1,
690 pub state: AuthorityReconciliationStateV1,
691 pub action: AuthorityActionV1,
692 pub observed_controllers: Vec<String>,
693 pub desired_controllers: Vec<String>,
694 pub controller_delta: AuthorityControllerDeltaV1,
695 pub reason: String,
696}
697
698#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
702pub enum AuthorityActionV1 {
703 None,
704 AddControllers,
705 RemoveControllers,
706 ReplaceControllerSet,
707 RequiresExternalController,
708 RequiresDestructiveImportConfirmation,
709 ObserveOnly,
710 AdoptPlanAvailable,
711 BlockedByPolicy,
712 UnknownObservation,
713}
714
715#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
719pub enum AuthorityReconciliationStateV1 {
720 AlreadyCorrect,
721 CanApplyAutomatically,
722 RequiresExternalAction,
723 UnsafeBlocked,
724 Unknown,
725}
726
727#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
731pub struct DeploymentIdentityV1 {
732 pub deployment_name: String,
733 pub network: String,
734 pub root_principal: Option<String>,
735 pub authority_profile_hash: Option<String>,
736 pub role_topology_hash: Option<String>,
737 pub deployment_manifest_digest: Option<String>,
738 pub canonical_runtime_config_digest: Option<String>,
739 pub role_embedded_config_set_digest: Option<String>,
740 pub artifact_set_digest: Option<String>,
741 pub pool_identity_set_digest: Option<String>,
742 pub canic_version: Option<String>,
743 pub ic_memory_version: Option<String>,
744}
745
746#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
750pub struct TrustDomainV1 {
751 pub root_trust_anchor: Option<String>,
752 pub migration_from: Option<String>,
753}
754
755#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
759pub struct AuthorityProfileV1 {
760 pub profile_id: String,
761 pub expected_controllers: Vec<String>,
762 pub staging_controllers: Vec<String>,
763 pub emergency_controllers: Vec<String>,
764}
765
766#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
770pub struct RoleArtifactV1 {
771 pub role: String,
772 pub source: ArtifactSourceV1,
773 pub build_profile: String,
774 pub wasm_path: Option<String>,
775 pub wasm_gz_path: Option<String>,
776 pub wasm_gz_size_bytes: Option<u64>,
777 pub wasm_sha256: Option<String>,
778 pub wasm_gz_sha256: Option<String>,
779 pub wasm_gz_sha256_source: Option<ArtifactDigestSourceV1>,
780 pub observed_wasm_gz_file_sha256: Option<String>,
781 pub observed_wasm_gz_file_sha256_source: Option<ArtifactDigestSourceV1>,
782 pub installed_module_hash: Option<String>,
783 pub candid_path: Option<String>,
784 pub candid_sha256: Option<String>,
785 pub raw_config_sha256: Option<String>,
786 pub canonical_embedded_config_sha256: Option<String>,
787 pub embedded_topology_sha256: Option<String>,
788 pub builder_version: Option<String>,
789 pub rust_toolchain: Option<String>,
790 pub package_version: Option<String>,
791}
792
793#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
797pub enum ArtifactDigestSourceV1 {
798 ReleaseSetManifest,
799 ObservedFileDigest,
800 InstalledModuleHash,
801}
802
803#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
807pub enum ArtifactSourceV1 {
808 LocalBuild,
809 ReleaseSet,
810 WasmStore,
811 External,
812 Unknown,
813}
814
815#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
819pub struct ExpectedCanisterV1 {
820 pub role: String,
821 pub canister_id: Option<String>,
822 pub control_class: CanisterControlClassV1,
823}
824
825#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
829pub struct ObservedCanisterV1 {
830 pub canister_id: String,
831 pub role: Option<String>,
832 pub control_class: CanisterControlClassV1,
833 pub controllers: Vec<String>,
834 pub module_hash: Option<String>,
835 pub status: Option<String>,
836 pub root_trust_anchor: Option<String>,
837 pub canonical_embedded_config_digest: Option<String>,
838 pub role_assignment_source: Option<String>,
839}
840
841#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
845pub enum CanisterControlClassV1 {
846 DeploymentControlled,
847 CanicManagedPool,
848 ExternallyImported,
849 JointlyControlled,
850 UserControlled,
851 UnknownUnsafe,
852}
853
854#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
858pub struct ExpectedPoolCanisterV1 {
859 pub pool: String,
860 pub canister_id: Option<String>,
861 pub role: Option<String>,
862}
863
864#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
868pub struct ObservedPoolCanisterV1 {
869 pub pool: String,
870 pub canister_id: String,
871 pub role: Option<String>,
872 pub control_class: CanisterControlClassV1,
873}
874
875#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
879pub struct LocalDeploymentConfigV1 {
880 pub config_path: Option<String>,
881 pub raw_config_sha256: Option<String>,
882 pub canonical_embedded_config_sha256: Option<String>,
883}
884
885#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
889pub struct ObservedArtifactV1 {
890 pub role: String,
891 pub artifact_path: String,
892 pub file_sha256: Option<String>,
893 pub file_sha256_source: Option<ArtifactDigestSourceV1>,
894 pub payload_sha256: Option<String>,
895 pub payload_size_bytes: Option<u64>,
896 pub source: ArtifactSourceV1,
897}
898
899#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
903pub struct VerifierReadinessExpectationV1 {
904 pub required: bool,
905 pub expected_role_epochs: Vec<RoleEpochExpectationV1>,
906}
907
908#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
912pub struct VerifierReadinessObservationV1 {
913 pub status: ObservationStatusV1,
914 pub role_epochs: Vec<RoleEpochObservationV1>,
915}
916
917#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
921pub struct RoleEpochExpectationV1 {
922 pub role: String,
923 pub minimum_epoch: u64,
924}
925
926#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
930pub struct RoleEpochObservationV1 {
931 pub role: String,
932 pub observed_epoch: Option<u64>,
933 pub status: ObservationStatusV1,
934}
935
936#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
940pub struct DeploymentAssumptionV1 {
941 pub key: String,
942 pub description: String,
943}
944
945#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
949pub struct DeploymentObservationGapV1 {
950 pub key: String,
951 pub description: String,
952}
953
954#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
958pub struct PhaseReceiptV1 {
959 pub phase: String,
960 pub started_at: String,
961 pub finished_at: Option<String>,
962 pub attempted_action: String,
963 pub verified_postcondition: VerifiedPostconditionV1,
964}
965
966#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
970pub struct VerifiedPostconditionV1 {
971 pub status: ObservationStatusV1,
972 pub evidence: Vec<String>,
973}
974
975#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
979pub enum DeploymentExecutionStatusV1 {
980 NotStarted,
981 InProgress,
982 FailedBeforeMutation,
983 PartiallyApplied,
984 FailedAfterMutation,
985 Complete,
986}
987
988#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
992pub enum DeploymentCommandResultV1 {
993 NotFinished,
994 Succeeded,
995 Failed { code: String, message: String },
996}
997
998#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1002pub struct RolePhaseReceiptV1 {
1003 pub role: String,
1004 pub phase: String,
1005 pub result: RolePhaseResultV1,
1006 pub previous_module_hash: Option<String>,
1007 pub target_module_hash: Option<String>,
1008 pub observed_module_hash_after: Option<String>,
1009 pub artifact_digest: Option<String>,
1010 pub canonical_embedded_config_sha256: Option<String>,
1011 pub error: Option<String>,
1012}
1013
1014#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1018pub enum RolePhaseResultV1 {
1019 Applied,
1020 Failed,
1021 Skipped,
1022 NotAttempted,
1023 VerifiedAlreadyApplied,
1024}
1025
1026#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1030pub struct DiffItemV1 {
1031 pub category: String,
1032 pub subject: String,
1033 pub expected: Option<String>,
1034 pub observed: Option<String>,
1035 pub severity: SafetySeverityV1,
1036}
1037
1038#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1042pub struct ResumeSafetyV1 {
1043 pub status: SafetyStatusV1,
1044 pub reasons: Vec<String>,
1045}
1046
1047#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1051pub struct SafetyFindingV1 {
1052 pub code: String,
1053 pub message: String,
1054 pub severity: SafetySeverityV1,
1055 pub subject: Option<String>,
1056}
1057
1058#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1062pub enum SafetyStatusV1 {
1063 NotEvaluated,
1064 Safe,
1065 Warning,
1066 Blocked,
1067}
1068
1069#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1073pub enum SafetySeverityV1 {
1074 Info,
1075 Warning,
1076 HardFailure,
1077}
1078
1079#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1083pub enum ObservationStatusV1 {
1084 NotObserved,
1085 Observed,
1086 Missing,
1087 Inconclusive,
1088}