//! Instance lifecycle and durable execution over graph/runtime ports.
mod engine;
mod execution;
mod records;
use cell_model::{Builder, Content, Error as DataError, Head, Particle, Source};
pub use engine::*;
pub use execution::{Attempt, Progress};
pub use records::{Live, Pending};

#[derive(Debug)]
pub enum Error {
    Data(DataError),
    Graph(String),
    CommitUnknown(String),
    Runtime(String),
    Missing,
    Conflict,
    Busy,
    Lifecycle,
    Denied,
    UnknownOutcome,
    Budget,
    Unsupported,
}
impl std::fmt::Display for Error {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "cell: {self:?}")
    }
}
impl std::error::Error for Error {}
impl From<DataError> for Error {
    fn from(e: DataError) -> Self {
        Self::Data(e)
    }
}

pub trait GraphPort: Source {
    fn head(&self, cell: Particle) -> Result<Option<Head>, Error>;
    fn resolve(&self, cell: Particle, request: Particle) -> Result<Option<Head>, Error>;
    fn history(&self, cell: Particle, after: Option<u64>, limit: usize)
    -> Result<Vec<Head>, Error>;
    fn commit(
        &self,
        cell: Particle,
        request: Particle,
        expected: Option<Head>,
        head: Head,
        content: Builder,
        claim: Option<(Particle, Particle)>,
    ) -> Result<Head, Error>;
}

pub struct RuntimeInput<'a> {
    pub source: &'a [u8],
    pub state: &'a [u8],
    pub event: &'a [u8],
    pub context: Option<Particle>,
    pub step_limit: u64,
}
#[derive(Debug)]
pub enum RuntimeStep {
    Done {
        result: Vec<u8>,
        used: u64,
    },
    Yield {
        checkpoint: Vec<u8>,
        used: u64,
    },
    Act {
        tag: u64,
        arguments: Vec<u8>,
        checkpoint: Vec<u8>,
        used: u64,
    },
    Event {
        tag: u64,
        selector: Vec<u8>,
        checkpoint: Vec<u8>,
        used: u64,
    },
}
pub trait RuntimePort {
    fn validate_value(&self, bytes: &[u8]) -> Result<(), Error>;
    fn start(&self, input: RuntimeInput<'_>) -> Result<Vec<u8>, Error>;
    fn step(
        &self,
        checkpoint: &[u8],
        reply: Option<&[u8]>,
        slice: u64,
        total: u64,
    ) -> Result<RuntimeStep, Error>;
}

/// Host authority is never loaded from a runtime subject or checkpoint.
pub struct Authorization<'a> {
    pub cell: Particle,
    pub operation: Particle,
    pub policy: Particle,
    pub epoch: u64,
    pub act: u64,
    pub allowed_acts: &'a [u64],
}
pub trait WardPort: Send + Sync {
    fn authorize(&self, request: &Authorization<'_>) -> Result<(), Error>;
}
pub struct DenyAll;
impl WardPort for DenyAll {
    fn authorize(&self, _: &Authorization<'_>) -> Result<(), Error> {
        Err(Error::Denied)
    }
}

pub struct Overlay<'a, G> {
    pub graph: &'a G,
    pub batch: &'a Builder,
}
impl<G: Source> Source for Overlay<'_, G> {
    fn get(&self, id: &Particle) -> Result<Content, DataError> {
        self.batch
            .content
            .get(id)
            .cloned()
            .map(Ok)
            .unwrap_or_else(|| self.graph.get(id))
    }
}

Homonyms

soft3/cybergraph/src/lib.rs
soft3/crate/src/lib.rs
soft3/glia/import/lib.rs
warriors/joy/rs/lib.rs
neural/trident/src/lib.rs
cyb/shell/src/lib.rs
warriors/trisha/rs/lib.rs
soft3/nox/rs/lib.rs
soft3/tru/rs/lib.rs
soft3/glia/run/lib.rs
warriors/trisha/honeycrisp/lib.rs
warriors/trisha/wgpu/lib.rs
soft3/mudra/src/lib.rs
soft3/strata/src/lib.rs
cyb/prysm/rs/lib.rs
cyb/honeycrisp/src/lib.rs
soft3/foculus/src/lib.rs
warriors/trisha/neptune/lib.rs
cyb/core/src/lib.rs
soft3/lens/src/lib.rs
cyb/optica/src/lib.rs
soft3/mir/src/lib.rs
soft3/tok/rs/src/lib.rs
neural/rune/rs/ast/lib.rs
neural/trident/silicon/src/lib.rs
soft3/hemera/rs/src/lib.rs
neural/rs/dialect/src/lib.rs
neural/rune/rs/interp/lib.rs
soft3/neuron/rune/src/lib.rs
cyb/honeycrisp/rane/src/lib.rs
soft3/radio/iroh-ffi/src/lib.rs
soft3/zheng/rs/src/lib.rs
soft3/strata/core/src/lib.rs
soft3/lens/ikat/src/lib.rs
neural/rs/mir-format/src/lib.rs
neural/rune/rs/compile/lib.rs
cyb/crates/cyb-reserve/src/lib.rs
soft3/radio/cyber-bao/src/lib.rs
soft3/radio/iroh-willow/src/lib.rs
cyb/crates/cyb/src/lib.rs
neural/rs/link/src/lib.rs
soft3/strata/proof/src/lib.rs
soft3/conformance/rs/src/lib.rs
soft3/neuron/node/src/lib.rs
neural/rune/rs/subject/lib.rs
soft3/radio/iroh-gossip/src/lib.rs
soft3/lens/binius/src/lib.rs
soft3/radio/iroh-blobs/src/lib.rs
neural/rs/codegen/src/lib.rs
soft3/neuron/model/src/lib.rs
neural/rune/rs/mold/lib.rs
neural/rune/rs/parse/lib.rs
neural/eidos/rs/src/lib.rs
neural/rs/macros/src/lib.rs
soft3/bbg/rs/src/lib.rs
soft3/radio/iroh-base/src/lib.rs
cyb/honeycrisp/unimem/src/lib.rs
soft3/radio/iroh/src/lib.rs
soft3/radio/iroh-docs/src/lib.rs
soft3/radio/iroh-relay/src/lib.rs
neural/rs/sigil/src/lib.rs
soft3/lens/brakedown/src/lib.rs
neural/rune/rs/prysm/lib.rs
cyb/honeycrisp/aruminium/src/lib.rs
soft3/strata/kuro/rs/lib.rs
neural/rune/rs/parse-pure/lib.rs
soft3/lens/porphyry/src/lib.rs
cyb/honeycrisp/acpu/src/lib.rs
neural/rune/rs/lower/lib.rs
soft3/lens/assayer/src/lib.rs
soft3/radio/iroh-car/src/lib.rs
soft3/lens/core/src/lib.rs
soft3/hemera/wgsl/src/lib.rs
soft3/strata/ext/src/lib.rs
soft3/strata/nebu/rs/lib.rs
neural/rs/darwin-sys/src/lib.rs
neural/rune/rs/lex/lib.rs
soft3/strata/compute/src/lib.rs
neural/rs/core/src/lib.rs
soft3/radio/iroh-dns-server/src/lib.rs
soft3/radio/quinn/bench/src/lib.rs
cyb/evy/forks/bevy_tasks/src/lib.rs
soft3/radio/nettools/netwatch/src/lib.rs
soft3/lytics/rs/event/src/lib.rs
neural/inf/rs/plan/src/lib.rs
cyb/evy/crates/evy_engine_dispatch/src/lib.rs
cyb/evy/crates/evy_engine_core/src/lib.rs
soft3/strata/kuro/wgsl/src/lib.rs
soft3/radio/quinn/quinn-udp/src/lib.rs
cyb/wysm/crates/wasi/src/lib.rs
cyb/evy/forks/bevy_diagnostic/src/lib.rs
cyb/evy/forks/naga/src/lib.rs
warriors/erga/rs/mine-bench/src/lib.rs
soft3/radio/quinn/quinn-proto/src/lib.rs
cyb/evy/crates/evy_platform_caps/src/lib.rs
cyb/wysm/crates/wasmi/src/lib.rs
cyb/evy/crates/evy_engine_tasks/src/lib.rs
warriors/erga/rs/wallet/src/lib.rs
neural/inf/rs/eval/src/lib.rs
soft3/radio/tests/integration/src/lib.rs
cyb/evy/forks/bevy_image/src/lib.rs
neural/inf/rs/parse/src/lib.rs
soft3/strata/genies/wgsl/src/lib.rs
cyb/evy/crates/evy_prysm_core/src/lib.rs
cyb/evy/forks/bevy_sprite/src/lib.rs
neural/inf/rs/lex/src/lib.rs
soft3/strata/jali/rs/src/lib.rs
neural/inf/rs/source/src/lib.rs
cyb/evy/forks/bevy_core_pipeline/src/lib.rs
cyb/evy/forks/bevy_mesh/src/lib.rs
soft3/strata/genies/rs/src/lib.rs
cyb/wysm/crates/c_api/src/lib.rs
cyb/evy/forks/bevy_transform/src/lib.rs
cyb/wysm/crates/fuzz/src/lib.rs
soft3/radio/nettools/portmapper/src/lib.rs
neural/rs/tests/macro-integration/src/lib.rs
neural/inf/rs/lower/src/lib.rs
cyb/evy/forks/bevy_render/src/lib.rs
cyb/wysm/crates/ir/src/lib.rs
cyb/evy/forks/bevy_ecs/src/lib.rs
cyb/wysm/crates/wast/src/lib.rs
cyb/evy/forks/bevy_animation/src/lib.rs
cyb/wysm/crates/core/src/lib.rs
warriors/erga/rs/rtable-bench/src/lib.rs
cyb/evy/forks/bevy_post_process/src/lib.rs
soft3/strata/jali/wgsl/src/lib.rs
soft3/radio/quinn/quinn/src/lib.rs
soft3/tade/impl/rust/src/lib.rs
soft3/strata/trop/rs/src/lib.rs
cyb/wysm/crates/c_api/artifact/lib.rs
neural/inf/rs/value/src/lib.rs
cyb/evy/crates/evy_dialect/src/lib.rs
warriors/erga/rs/autolykos/src/lib.rs
warriors/erga/rs/app/src/lib.rs
neural/trident/editor/zed/src/lib.rs
warriors/erga/rs/blake-bench/src/lib.rs
cyb/evy/crates/evy_diagnostic/src/lib.rs
cyb/evy/forks/bevy_anti_alias/src/lib.rs
soft3/lytics/rs/core/src/lib.rs
soft3/radio/iroh-ffi/iroh-js/src/lib.rs
neural/inf/rs/oracle/src/lib.rs
cyb/evy/crates/evy_ecs_storage/src/lib.rs
soft3/radio/quinn/perf/src/lib.rs
cyb/evy/crates/evy_radio/src/lib.rs
cyb/evy/forks/bevy_pbr/src/lib.rs
warriors/erga/rs/miner/src/lib.rs
cyb/evy/forks/bevy_gizmos_render/src/lib.rs
soft3/strata/nebu/wgsl/src/lib.rs
soft3/radio/iroh/bench/src/lib.rs
cyb/wysm/crates/collections/src/lib.rs
warriors/erga/rs/pool/src/lib.rs
soft3/strata/trop/wgsl/src/lib.rs
cyb/evy/forks/bevy_sprite_render/src/lib.rs
cyb/wysm/crates/c_api/macro/lib.rs
cyb/evy/forks/bevy_gizmos/src/lib.rs
neural/inf/rs/ast/src/lib.rs

Graph