Skip to main content

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}