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 previous_receipt_lineage_digest: Option<String>,
158 pub expected_wasm_sha256: Option<String>,
159 pub expected_wasm_gz_sha256: Option<String>,
160 pub expected_candid_sha256: Option<String>,
161 pub expected_canonical_embedded_config_sha256: Option<String>,
162}
163
164#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
168pub struct RolePromotionInputV1 {
169 pub role: String,
170 pub promotion_level: PromotionArtifactLevelV1,
171 pub source: RoleArtifactSourceV1,
172 pub require_byte_identical_wasm: bool,
173 pub require_target_embedded_config: bool,
174 pub target_store_has_artifact: Option<bool>,
175}
176
177#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
181pub struct RolePromotionPolicyV1 {
182 pub role: String,
183 pub allowed_promotion_levels: Vec<PromotionArtifactLevelV1>,
184 pub requirements: Vec<PromotionPolicyRequirementV1>,
185}
186
187#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
191pub enum PromotionPolicyRequirementV1 {
192 SameSourceRevision,
193 SameCargoFeatures,
194 TargetConfigDigest,
195 ByteIdenticalWasm,
196 SealedBytes,
197}
198
199#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
203pub enum PromotionPolicyClaimV1 {
204 ByteIdenticalWasm,
205 TargetConfigDigest,
206}
207
208#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
212pub struct PromotionPolicyCheckV1 {
213 pub schema_version: u32,
214 pub check_id: String,
215 pub status: PromotionReadinessStatusV1,
216 pub roles: Vec<RolePromotionPolicyDecisionV1>,
217 pub blockers: Vec<SafetyFindingV1>,
218}
219
220#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
224pub struct RolePromotionPolicyDecisionV1 {
225 pub role: String,
226 pub requested_promotion_level: PromotionArtifactLevelV1,
227 pub allowed_promotion_levels: Vec<PromotionArtifactLevelV1>,
228 pub requirements: Vec<PromotionPolicyRequirementV1>,
229 pub claims: Vec<PromotionPolicyClaimV1>,
230 pub level_allowed: bool,
231 pub policy_satisfied: bool,
232}
233
234#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
238pub enum PromotionArtifactLevelV1 {
239 SealedWasm,
240 SourceBuild,
241}
242
243#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
247pub struct BuildRecipeIdentityV1 {
248 pub recipe_id: String,
249 pub source_kind: RoleArtifactSourceKindV1,
250 pub source_revision: String,
251 pub source_tree_clean: bool,
252 pub package_or_role_selector: String,
253 pub cargo_profile: String,
254 pub cargo_features_digest: String,
255 pub cargo_lock_digest: String,
256 pub rust_toolchain: String,
257 pub builder_version: String,
258 pub target_triple: String,
259 pub linker_identity: String,
260 pub deterministic_build_mode: String,
261 pub wasm_opt_version: String,
262 pub compression_identity: String,
263}
264
265#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
269pub struct BuildMaterializationInputV1 {
270 pub materialization_input_id: String,
271 pub build_recipe_id: String,
272 pub canonical_embedded_config_sha256: String,
273 pub network: String,
274 pub root_trust_anchor: String,
275 pub runtime_variant: String,
276}
277
278#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
282pub struct BuildMaterializationResultV1 {
283 pub materialization_result_id: String,
284 pub build_recipe_id: String,
285 pub materialization_input_digest: String,
286 pub wasm_sha256: String,
287 pub wasm_gz_sha256: String,
288 pub installed_module_hash: String,
289 pub candid_sha256: String,
290}
291
292#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
296pub struct BuildMaterializationEvidenceV1 {
297 pub schema_version: u32,
298 pub evidence_id: String,
299 pub recipe: BuildRecipeIdentityV1,
300 pub materialization_input: BuildMaterializationInputV1,
301 pub materialization_result: BuildMaterializationResultV1,
302 pub computed_materialization_input_digest: String,
303 pub recipe_id_matches_input: bool,
304 pub recipe_id_matches_result: bool,
305 pub materialization_input_digest_matches_result: bool,
306}
307
308#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
312pub struct PromotionArtifactIdentityReportV1 {
313 pub schema_version: u32,
314 pub report_id: String,
315 pub status: PromotionReadinessStatusV1,
316 pub roles: Vec<RolePromotionArtifactIdentityV1>,
317 pub identity_groups: Vec<PromotionArtifactIdentityGroupV1>,
318 pub blockers: Vec<SafetyFindingV1>,
319}
320
321#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
325pub struct PromotionArtifactIdentityGroupV1 {
326 pub identity_key: String,
327 pub identity_kind: PromotionArtifactIdentityKindV1,
328 pub roles: Vec<String>,
329 pub source_kinds: Vec<RoleArtifactSourceKindV1>,
330 pub source_locators: Vec<String>,
331 pub digest_pinned: bool,
332 pub wasm_sha256: Option<String>,
333 pub wasm_gz_sha256: Option<String>,
334 pub candid_sha256: Option<String>,
335 pub canonical_embedded_config_sha256: Option<String>,
336}
337
338#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
342pub struct RolePromotionArtifactIdentityV1 {
343 pub role: String,
344 pub promotion_level: PromotionArtifactLevelV1,
345 pub source_kind: RoleArtifactSourceKindV1,
346 pub source_locator: Option<String>,
347 pub identity_kind: PromotionArtifactIdentityKindV1,
348 pub digest_pinned: bool,
349 pub wasm_sha256: Option<String>,
350 pub wasm_gz_sha256: Option<String>,
351 pub candid_sha256: Option<String>,
352 pub canonical_embedded_config_sha256: Option<String>,
353}
354
355#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
359pub enum PromotionArtifactIdentityKindV1 {
360 SealedWasm,
361 SealedCompressedWasm,
362 SealedWasmAndCompressedWasm,
363 SourceBuild,
364 Deferred,
365}
366
367#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
371pub struct PromotionReadinessV1 {
372 pub schema_version: u32,
373 pub readiness_id: String,
374 pub target_plan_id: String,
375 pub status: PromotionReadinessStatusV1,
376 pub roles: Vec<RolePromotionReadinessV1>,
377 pub blockers: Vec<SafetyFindingV1>,
378 pub warnings: Vec<SafetyFindingV1>,
379}
380
381#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
385pub struct PromotionPlanTransformV1 {
386 pub schema_version: u32,
387 pub transform_id: String,
388 pub target_plan_id: String,
389 pub promoted_plan_id: String,
390 pub promotion_plan_lineage_digest: String,
391 pub promoted_plan: DeploymentPlanV1,
392 pub roles: Vec<RolePromotionPlanTransformV1>,
393}
394
395#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
399pub struct ArtifactPromotionPlanV1 {
400 pub schema_version: u32,
401 pub plan_id: String,
402 pub generated_at: String,
403 pub status: PromotionReadinessStatusV1,
404 pub target_plan_id: String,
405 pub promoted_plan_id: String,
406 pub promotion_plan_lineage_digest: String,
407 pub readiness: PromotionReadinessV1,
408 pub artifact_identity_report: PromotionArtifactIdentityReportV1,
409 pub transform: PromotionPlanTransformV1,
410 pub target_execution_lineage: Option<PromotionTargetExecutionLineageV1>,
411 pub blockers: Vec<SafetyFindingV1>,
412}
413
414#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
418pub struct PromotionPlanTransformEvidenceV1 {
419 pub schema_version: u32,
420 pub evidence_id: String,
421 pub generated_at: String,
422 pub transform: PromotionPlanTransformV1,
423}
424
425#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
429pub struct PromotionTargetExecutionLineageV1 {
430 pub schema_version: u32,
431 pub lineage_id: String,
432 pub generated_at: String,
433 pub target_execution_lineage_digest: String,
434 pub transform: PromotionPlanTransformV1,
435 pub execution_preflight: DeploymentExecutionPreflightV1,
436 pub execution_attempted: bool,
437}
438
439#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
443pub struct RolePromotionPlanTransformV1 {
444 pub role: String,
445 pub promotion_level: PromotionArtifactLevelV1,
446 pub source_kind: RoleArtifactSourceKindV1,
447 pub source_locator: Option<String>,
448 pub artifact_source_before: ArtifactSourceV1,
449 pub artifact_source_after: ArtifactSourceV1,
450 pub wasm_sha256_before: Option<String>,
451 pub wasm_sha256_after: Option<String>,
452 pub wasm_gz_sha256_before: Option<String>,
453 pub wasm_gz_sha256_after: Option<String>,
454 pub candid_sha256_before: Option<String>,
455 pub candid_sha256_after: Option<String>,
456 pub canonical_embedded_config_sha256_before: Option<String>,
457 pub canonical_embedded_config_sha256_after: Option<String>,
458 pub artifact_identity_changed: bool,
459 pub embedded_config_changed: bool,
460 pub target_materialization_preserved: bool,
461 pub source_build_materialization: Option<RolePromotionMaterializationLinkV1>,
462}
463
464#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
468pub struct RolePromotionMaterializationLinkV1 {
469 pub role: String,
470 pub evidence_id: String,
471 pub recipe_id: String,
472 pub materialization_input_id: String,
473 pub materialization_result_id: String,
474 pub materialization_input_digest: String,
475 pub wasm_sha256: String,
476 pub wasm_gz_sha256: String,
477 pub installed_module_hash: String,
478 pub candid_sha256: String,
479}
480
481#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
485pub enum PromotionReadinessStatusV1 {
486 Ready,
487 Blocked,
488}
489
490#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
494pub struct RolePromotionReadinessV1 {
495 pub role: String,
496 pub promotion_level: PromotionArtifactLevelV1,
497 pub source_kind: RoleArtifactSourceKindV1,
498 pub source_locator: Option<String>,
499 pub source_wasm_sha256: Option<String>,
500 pub source_wasm_gz_sha256: Option<String>,
501 pub target_wasm_sha256: Option<String>,
502 pub target_wasm_gz_sha256: Option<String>,
503 pub source_canonical_embedded_config_sha256: Option<String>,
504 pub target_canonical_embedded_config_sha256: Option<String>,
505 pub byte_identical_wasm: Option<bool>,
506 pub embedded_config_identical: Option<bool>,
507 pub target_store_has_artifact: Option<bool>,
508 pub restage_required: bool,
509}
510
511#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
515pub enum RoleArtifactSourceKindV1 {
516 WorkspacePackage,
517 PublishedPackage,
518 LocalWasm,
519 LocalWasmGz,
520 PreviousReceiptArtifact,
521 CanonicalWasmStoreDefault,
522}
523
524#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
528pub enum PreviousArtifactReceiptKindV1 {
529 DeploymentReceipt,
530 StagingReceipt,
531}
532
533#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
537pub struct AuthorityReceiptV1 {
538 pub schema_version: u32,
539 pub operation_id: String,
540 pub check_id: Option<String>,
541 pub reconciliation_plan_id: String,
542 pub authority_report_id: String,
543 pub inventory_id: String,
544 pub authority_profile_hash: Option<String>,
545 pub operation_status: DeploymentExecutionStatusV1,
546 pub started_at: String,
547 pub finished_at: Option<String>,
548 pub attempted_actions: Vec<AuthorityAttemptedActionV1>,
549 pub verified_controller_observations: Vec<AuthorityControllerObservationV1>,
550 pub hard_failures: Vec<SafetyFindingV1>,
551 pub unresolved_observation_gaps: Vec<DeploymentObservationGapV1>,
552 pub unresolved_external_actions: Vec<AuthorityExternalActionV1>,
553 pub command_result: DeploymentCommandResultV1,
554}
555
556#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
560pub struct AuthorityDryRunEvidenceV1 {
561 pub schema_version: u32,
562 pub evidence_id: String,
563 pub check_id: String,
564 pub generated_at: String,
565 pub reconciliation_plan: AuthorityReconciliationPlanV1,
566 pub authority_report: AuthorityReportV1,
567 pub authority_receipt: AuthorityReceiptV1,
568}
569
570#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
574pub struct AuthorityAttemptedActionV1 {
575 pub subject: String,
576 pub canister_id: Option<String>,
577 pub role: Option<String>,
578 pub action: AuthorityActionV1,
579 pub result: RolePhaseResultV1,
580 pub error: Option<String>,
581}
582
583#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
587pub struct AuthorityControllerObservationV1 {
588 pub subject: String,
589 pub canister_id: Option<String>,
590 pub role: Option<String>,
591 pub state: AuthorityReconciliationStateV1,
592 pub action: AuthorityActionV1,
593 pub observed_controllers: Vec<String>,
594 pub desired_controllers: Vec<String>,
595 pub controller_delta: AuthorityControllerDeltaV1,
596}
597
598#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
602pub struct RoleArtifactManifestV1 {
603 pub schema_version: u32,
604 pub manifest_id: String,
605 pub network: String,
606 pub artifact_root: Option<String>,
607 pub role_artifacts: Vec<RoleArtifactV1>,
608 pub unresolved_artifacts: Vec<DeploymentObservationGapV1>,
609}
610
611#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
615pub struct DeploymentDiffV1 {
616 pub schema_version: u32,
617 pub plan_identity: DeploymentIdentityV1,
618 pub observed_identity: Option<DeploymentIdentityV1>,
619 pub artifact_diff: Vec<DiffItemV1>,
620 pub controller_diff: Vec<DiffItemV1>,
621 pub pool_diff: Vec<DiffItemV1>,
622 pub embedded_config_diff: Vec<DiffItemV1>,
623 pub module_hash_diff: Vec<DiffItemV1>,
624 pub verifier_readiness_diff: Vec<DiffItemV1>,
625 pub resume_safety: ResumeSafetyV1,
626 pub hard_failures: Vec<SafetyFindingV1>,
627 pub warnings: Vec<SafetyFindingV1>,
628 pub resumable_phases: Vec<String>,
629}
630
631#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
635pub struct SafetyReportV1 {
636 pub schema_version: u32,
637 pub report_id: String,
638 pub diff_id: Option<String>,
639 pub status: SafetyStatusV1,
640 pub summary: String,
641 pub hard_failures: Vec<SafetyFindingV1>,
642 pub warnings: Vec<SafetyFindingV1>,
643 pub next_actions: Vec<String>,
644}
645
646#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
650pub struct DeploymentCheckV1 {
651 pub schema_version: u32,
652 pub check_id: String,
653 pub plan: DeploymentPlanV1,
654 pub inventory: DeploymentInventoryV1,
655 pub diff: DeploymentDiffV1,
656 pub report: SafetyReportV1,
657}
658
659#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
663pub struct AuthorityReconciliationPlanV1 {
664 pub schema_version: u32,
665 pub plan_id: String,
666 pub inventory_id: String,
667 pub authority_profile_hash: Option<String>,
668 pub canister_actions: Vec<CanisterAuthorityActionV1>,
669 pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
670 pub hard_failures: Vec<SafetyFindingV1>,
671 pub external_actions_required: Vec<AuthorityExternalActionV1>,
672}
673
674#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
678pub struct AuthorityAutomaticActionV1 {
679 pub subject: String,
680 pub canister_id: String,
681 pub role: Option<String>,
682 pub action: AuthorityActionV1,
683 pub observed_controllers: Vec<String>,
684 pub desired_controllers: Vec<String>,
685 pub controller_delta: AuthorityControllerDeltaV1,
686 pub reason: String,
687}
688
689#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
693pub struct AuthorityControllerDeltaV1 {
694 pub add_controllers: Vec<String>,
695 pub remove_controllers: Vec<String>,
696}
697
698#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
702pub struct AuthorityReportV1 {
703 pub schema_version: u32,
704 pub report_id: String,
705 pub check_id: Option<String>,
706 pub reconciliation_plan_id: String,
707 pub inventory_id: String,
708 pub authority_profile_hash: Option<String>,
709 pub status: SafetyStatusV1,
710 pub summary: String,
711 pub counts: AuthorityReportCountsV1,
712 pub apply_readiness: AuthorityApplyReadinessV1,
713 pub action_counts: Vec<AuthorityActionCountV1>,
714 pub control_class_counts: Vec<AuthorityControlClassCountV1>,
715 pub observation_gaps: Vec<DeploymentObservationGapV1>,
716 pub automatic_actions: Vec<AuthorityAutomaticActionV1>,
717 pub hard_failures: Vec<SafetyFindingV1>,
718 pub external_actions_required: Vec<AuthorityExternalActionV1>,
719 pub next_actions: Vec<String>,
720}
721
722#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
726pub struct AuthorityApplyReadinessV1 {
727 pub can_apply_automatically: bool,
728 pub automatic_action_count: usize,
729 pub blockers: Vec<AuthorityApplyBlockerV1>,
730}
731
732#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
736pub enum AuthorityApplyBlockerV1 {
737 UnsafeBlocked,
738 HardFailures,
739 ObservationGaps,
740 ExternalActions,
741}
742
743#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
747pub struct AuthorityActionCountV1 {
748 pub action: AuthorityActionV1,
749 pub count: usize,
750}
751
752#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
756pub struct AuthorityControlClassCountV1 {
757 pub control_class: CanisterControlClassV1,
758 pub count: usize,
759}
760
761#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
765pub struct AuthorityReportCountsV1 {
766 pub already_correct: usize,
767 pub can_apply_automatically: usize,
768 pub requires_external_action: usize,
769 pub unsafe_blocked: usize,
770 pub unknown: usize,
771 pub hard_failures: usize,
772}
773
774#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
778pub struct CanisterAuthorityActionV1 {
779 pub canister_id: Option<String>,
780 pub role: Option<String>,
781 pub control_classification: CanisterControlClassV1,
782 pub observed_controllers: Vec<String>,
783 pub desired_controllers: Vec<String>,
784 pub controller_delta: AuthorityControllerDeltaV1,
785 pub action: AuthorityActionV1,
786 pub state: AuthorityReconciliationStateV1,
787 pub can_apply: bool,
788 pub reason: String,
789}
790
791#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
795pub struct AuthorityExternalActionV1 {
796 pub subject: String,
797 pub canister_id: Option<String>,
798 pub role: Option<String>,
799 pub control_classification: CanisterControlClassV1,
800 pub state: AuthorityReconciliationStateV1,
801 pub action: AuthorityActionV1,
802 pub observed_controllers: Vec<String>,
803 pub desired_controllers: Vec<String>,
804 pub controller_delta: AuthorityControllerDeltaV1,
805 pub reason: String,
806}
807
808#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
812pub enum AuthorityActionV1 {
813 None,
814 AddControllers,
815 RemoveControllers,
816 ReplaceControllerSet,
817 RequiresExternalController,
818 RequiresDestructiveImportConfirmation,
819 ObserveOnly,
820 AdoptPlanAvailable,
821 BlockedByPolicy,
822 UnknownObservation,
823}
824
825#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
829pub enum AuthorityReconciliationStateV1 {
830 AlreadyCorrect,
831 CanApplyAutomatically,
832 RequiresExternalAction,
833 UnsafeBlocked,
834 Unknown,
835}
836
837#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
841pub struct DeploymentIdentityV1 {
842 pub deployment_name: String,
843 pub network: String,
844 pub root_principal: Option<String>,
845 pub authority_profile_hash: Option<String>,
846 pub role_topology_hash: Option<String>,
847 pub deployment_manifest_digest: Option<String>,
848 pub canonical_runtime_config_digest: Option<String>,
849 pub role_embedded_config_set_digest: Option<String>,
850 pub artifact_set_digest: Option<String>,
851 pub pool_identity_set_digest: Option<String>,
852 pub canic_version: Option<String>,
853 pub ic_memory_version: Option<String>,
854}
855
856#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
860pub struct TrustDomainV1 {
861 pub root_trust_anchor: Option<String>,
862 pub migration_from: Option<String>,
863}
864
865#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
869pub struct AuthorityProfileV1 {
870 pub profile_id: String,
871 pub expected_controllers: Vec<String>,
872 pub staging_controllers: Vec<String>,
873 pub emergency_controllers: Vec<String>,
874}
875
876#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
880pub struct RoleArtifactV1 {
881 pub role: String,
882 pub source: ArtifactSourceV1,
883 pub build_profile: String,
884 pub wasm_path: Option<String>,
885 pub wasm_gz_path: Option<String>,
886 pub wasm_gz_size_bytes: Option<u64>,
887 pub wasm_sha256: Option<String>,
888 pub wasm_gz_sha256: Option<String>,
889 pub wasm_gz_sha256_source: Option<ArtifactDigestSourceV1>,
890 pub observed_wasm_gz_file_sha256: Option<String>,
891 pub observed_wasm_gz_file_sha256_source: Option<ArtifactDigestSourceV1>,
892 pub installed_module_hash: Option<String>,
893 pub candid_path: Option<String>,
894 pub candid_sha256: Option<String>,
895 pub raw_config_sha256: Option<String>,
896 pub canonical_embedded_config_sha256: Option<String>,
897 pub embedded_topology_sha256: Option<String>,
898 pub builder_version: Option<String>,
899 pub rust_toolchain: Option<String>,
900 pub package_version: Option<String>,
901}
902
903#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
907pub enum ArtifactDigestSourceV1 {
908 ReleaseSetManifest,
909 ObservedFileDigest,
910 InstalledModuleHash,
911}
912
913#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
917pub enum ArtifactSourceV1 {
918 LocalBuild,
919 ReleaseSet,
920 WasmStore,
921 External,
922 Unknown,
923}
924
925#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
929pub struct ExpectedCanisterV1 {
930 pub role: String,
931 pub canister_id: Option<String>,
932 pub control_class: CanisterControlClassV1,
933}
934
935#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
939pub struct ObservedCanisterV1 {
940 pub canister_id: String,
941 pub role: Option<String>,
942 pub control_class: CanisterControlClassV1,
943 pub controllers: Vec<String>,
944 pub module_hash: Option<String>,
945 pub status: Option<String>,
946 pub root_trust_anchor: Option<String>,
947 pub canonical_embedded_config_digest: Option<String>,
948 pub role_assignment_source: Option<String>,
949}
950
951#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
955pub enum CanisterControlClassV1 {
956 DeploymentControlled,
957 CanicManagedPool,
958 ExternallyImported,
959 JointlyControlled,
960 UserControlled,
961 UnknownUnsafe,
962}
963
964#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
968pub struct ExpectedPoolCanisterV1 {
969 pub pool: String,
970 pub canister_id: Option<String>,
971 pub role: Option<String>,
972}
973
974#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
978pub struct ObservedPoolCanisterV1 {
979 pub pool: String,
980 pub canister_id: String,
981 pub role: Option<String>,
982 pub control_class: CanisterControlClassV1,
983}
984
985#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
989pub struct LocalDeploymentConfigV1 {
990 pub config_path: Option<String>,
991 pub raw_config_sha256: Option<String>,
992 pub canonical_embedded_config_sha256: Option<String>,
993}
994
995#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
999pub struct ObservedArtifactV1 {
1000 pub role: String,
1001 pub artifact_path: String,
1002 pub file_sha256: Option<String>,
1003 pub file_sha256_source: Option<ArtifactDigestSourceV1>,
1004 pub payload_sha256: Option<String>,
1005 pub payload_size_bytes: Option<u64>,
1006 pub source: ArtifactSourceV1,
1007}
1008
1009#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1013pub struct VerifierReadinessExpectationV1 {
1014 pub required: bool,
1015 pub expected_role_epochs: Vec<RoleEpochExpectationV1>,
1016}
1017
1018#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1022pub struct VerifierReadinessObservationV1 {
1023 pub status: ObservationStatusV1,
1024 pub role_epochs: Vec<RoleEpochObservationV1>,
1025}
1026
1027#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1031pub struct RoleEpochExpectationV1 {
1032 pub role: String,
1033 pub minimum_epoch: u64,
1034}
1035
1036#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1040pub struct RoleEpochObservationV1 {
1041 pub role: String,
1042 pub observed_epoch: Option<u64>,
1043 pub status: ObservationStatusV1,
1044}
1045
1046#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1050pub struct DeploymentAssumptionV1 {
1051 pub key: String,
1052 pub description: String,
1053}
1054
1055#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1059pub struct DeploymentObservationGapV1 {
1060 pub key: String,
1061 pub description: String,
1062}
1063
1064#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1068pub struct PhaseReceiptV1 {
1069 pub phase: String,
1070 pub started_at: String,
1071 pub finished_at: Option<String>,
1072 pub attempted_action: String,
1073 pub verified_postcondition: VerifiedPostconditionV1,
1074}
1075
1076#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1080pub struct VerifiedPostconditionV1 {
1081 pub status: ObservationStatusV1,
1082 pub evidence: Vec<String>,
1083}
1084
1085#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1089pub enum DeploymentExecutionStatusV1 {
1090 NotStarted,
1091 InProgress,
1092 FailedBeforeMutation,
1093 PartiallyApplied,
1094 FailedAfterMutation,
1095 Complete,
1096}
1097
1098#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1102pub enum DeploymentCommandResultV1 {
1103 NotFinished,
1104 Succeeded,
1105 Failed { code: String, message: String },
1106}
1107
1108#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1112pub struct RolePhaseReceiptV1 {
1113 pub role: String,
1114 pub phase: String,
1115 pub result: RolePhaseResultV1,
1116 pub previous_module_hash: Option<String>,
1117 pub target_module_hash: Option<String>,
1118 pub observed_module_hash_after: Option<String>,
1119 pub artifact_digest: Option<String>,
1120 pub canonical_embedded_config_sha256: Option<String>,
1121 pub error: Option<String>,
1122}
1123
1124#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1128pub enum RolePhaseResultV1 {
1129 Applied,
1130 Failed,
1131 Skipped,
1132 NotAttempted,
1133 VerifiedAlreadyApplied,
1134}
1135
1136#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1140pub struct DiffItemV1 {
1141 pub category: String,
1142 pub subject: String,
1143 pub expected: Option<String>,
1144 pub observed: Option<String>,
1145 pub severity: SafetySeverityV1,
1146}
1147
1148#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1152pub struct ResumeSafetyV1 {
1153 pub status: SafetyStatusV1,
1154 pub reasons: Vec<String>,
1155}
1156
1157#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1161pub struct SafetyFindingV1 {
1162 pub code: String,
1163 pub message: String,
1164 pub severity: SafetySeverityV1,
1165 pub subject: Option<String>,
1166}
1167
1168#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1172pub enum SafetyStatusV1 {
1173 NotEvaluated,
1174 Safe,
1175 Warning,
1176 Blocked,
1177}
1178
1179#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1183pub enum SafetySeverityV1 {
1184 Info,
1185 Warning,
1186 HardFailure,
1187}
1188
1189#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
1193pub enum ObservationStatusV1 {
1194 NotObserved,
1195 Observed,
1196 Missing,
1197 Inconclusive,
1198}