canic_host/deployment_truth/model/execution/
mod.rs1use super::inventory::ObservationStatusV1;
2use super::safety::SafetyFindingV1;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
9pub struct DeploymentReceiptV1 {
10 pub schema_version: u32,
11 pub operation_id: String,
12 pub plan_id: String,
13 pub execution_context: Option<DeploymentExecutionContextV1>,
14 pub operation_status: DeploymentExecutionStatusV1,
15 pub started_at: String,
16 pub finished_at: Option<String>,
17 pub operator_principal: Option<String>,
18 pub root_principal: Option<String>,
19 pub previous_observed_deployment_epoch: Option<u64>,
20 pub phase_receipts: Vec<PhaseReceiptV1>,
21 pub role_phase_receipts: Vec<RolePhaseReceiptV1>,
22 pub final_inventory_id: Option<String>,
23 pub command_result: DeploymentCommandResultV1,
24}
25
26#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
30pub struct DeploymentExecutionContextV1 {
31 pub workspace_root: Option<String>,
32 pub icp_root: Option<String>,
33 pub artifact_roots: Vec<String>,
34 pub backend: DeploymentExecutorBackendV1,
35 pub backend_capabilities: Vec<DeploymentExecutorCapabilityV1>,
36}
37
38#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
42pub struct DeploymentExecutionPreflightV1 {
43 pub schema_version: u32,
44 pub plan_id: String,
45 pub safety_report_id: String,
46 pub authority_plan_id: String,
47 pub backend: DeploymentExecutorBackendV1,
48 pub status: DeploymentExecutionPreflightStatusV1,
49 pub planned_phases: Vec<String>,
50 pub required_capabilities: Vec<DeploymentExecutorCapabilityV1>,
51 pub missing_capabilities: Vec<DeploymentExecutorCapabilityV1>,
52 pub blockers: Vec<SafetyFindingV1>,
53}
54
55#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
59pub enum DeploymentExecutionPreflightStatusV1 {
60 Ready,
61 Blocked,
62}
63
64#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
68pub enum DeploymentExecutorBackendV1 {
69 CurrentCli,
70 PocketIc,
71 DirectAgent,
72 Other { name: String },
73}
74
75#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
79pub enum DeploymentExecutorCapabilityV1 {
80 CreateCanister,
81 CanisterStatus,
82 UpdateSettings,
83 InstallCode,
84 Call,
85 Query,
86 StageArtifact,
87}
88
89#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
93pub struct PhaseReceiptV1 {
94 pub phase: String,
95 pub started_at: String,
96 pub finished_at: Option<String>,
97 pub attempted_action: String,
98 pub verified_postcondition: VerifiedPostconditionV1,
99}
100
101#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
105pub struct VerifiedPostconditionV1 {
106 pub status: ObservationStatusV1,
107 pub evidence: Vec<String>,
108}
109
110#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
114pub enum DeploymentExecutionStatusV1 {
115 NotStarted,
116 InProgress,
117 FailedBeforeMutation,
118 PartiallyApplied,
119 FailedAfterMutation,
120 Complete,
121}
122
123#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
127pub enum DeploymentCommandResultV1 {
128 NotFinished,
129 Succeeded,
130 Failed { code: String, message: String },
131}
132
133#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
137pub struct RolePhaseReceiptV1 {
138 pub role: String,
139 pub phase: String,
140 pub result: RolePhaseResultV1,
141 pub previous_module_hash: Option<String>,
142 pub target_module_hash: Option<String>,
143 pub observed_module_hash_after: Option<String>,
144 pub artifact_digest: Option<String>,
145 pub canonical_embedded_config_sha256: Option<String>,
146 pub error: Option<String>,
147}
148
149#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
153pub enum RolePhaseResultV1 {
154 Applied,
155 Failed,
156 Skipped,
157 NotAttempted,
158 VerifiedAlreadyApplied,
159}