ic_backup/ports/control_authority/mod.rs
1//! Direct-controller observation port; no backend or success default.
2
3use crate::model::control_authority::{ControlObservation, ControlObservationRequest};
4use thiserror::Error;
5
6/// Integration-owned fresh authenticated controller observation for exact IC mutation bytes.
7///
8/// Implementations qualify complete actual controller data and locked actual context,
9/// target, challenge freshness, evidence and prior per-call spending/custody. Missing
10/// or unknown controllers must fail; status/read success is not controller evidence.
11/// No provider is installed. Results grant no signing, dispatch, same-release safety,
12/// snapshot-origin permission, stopped-state proof, application fence or terminal release.
13pub trait ControlAuthorityProvider {
14 /// Observe current controllers under exact original request and bounded descriptive ceiling.
15 /// # Errors
16 /// Unavailable/unsupported reject before effects; indeterminate retains spending/evidence
17 /// and stops without retry. An absent required provider must fail unavailable.
18 fn observe_control(
19 &mut self,
20 request: &ControlObservationRequest<'_>,
21 ) -> Result<ControlObservation, ControlProviderError>;
22}
23/// Redacted typed provider failure; no failure grants admission or replenishes allowances.
24#[derive(Clone, Copy, Debug, Eq, Error, PartialEq)]
25pub enum ControlProviderError {
26 /// No qualified provider is available; reject before remote effects.
27 #[error("control authority provider unavailable")]
28 Unavailable,
29 /// Requested contract unsupported; reject before remote effects.
30 #[error("control authority contract unsupported")]
31 Unsupported,
32 /// Actual observation/reply/accounting is uncertain; retain evidence and stop.
33 #[error("control authority observation indeterminate")]
34 Indeterminate,
35}