#![allow(dead_code)]
#![allow(unused_imports)]
mod compat;
mod digest;
mod events;
mod ids;
mod liveness;
mod migration;
mod model;
mod reducer;
mod runtime;
mod validate;
#[cfg(test)]
mod tests;
pub use compat::{PlanProjection, TodoProjection, project_plan, project_todos};
pub use digest::{format_operation_digest, format_operation_digest_parts};
pub use events::{
ApprovalRef, CancelOutcome, ChangeCtx, ChangeReceipt, ObservationSummary, OperationObservation,
OwnerState, ProposedNodeUpdate, WorkGraphChange, WorkGraphProposal, WorkNodePatch,
};
pub use ids::{BindingId, ChangeId, ProposalId, WorkEdgeId, WorkNodeId};
pub use liveness::{
OperationIntent, OperationOwnerSnapshot, fleet_task_owner_snapshot, lane_owner_snapshot,
task_owner_snapshot,
};
pub use migration::import_legacy;
pub(crate) use model::constrained_effective_reasoning_for_route;
pub use model::{
ACTIVITY_CAP, AcceptanceRequirement, BoundedSet, BoundedVec, CompatPlanMetadata,
CompatProjectionState, CompatTodoBinding, EdgeKind, EvidenceKind, EvidenceKindTag, EvidenceRef,
EvidenceRefError, HISTORY_CAP, IdempotencyKey, NodeKind, NodeState, OperationBinding,
Provenance, ReasoningEffortTier, SCHEMA_VERSION, SEEN_KEYS_CAP, Ts, WorkActivityEvent,
WorkEdge, WorkGraphSnapshot, WorkNode, external_identity_is_well_formed,
};
pub use reducer::apply;
pub(crate) use runtime::{ACTIVE_OPERATION_SUMMARY_END, ACTIVE_OPERATION_SUMMARY_START};
pub use runtime::{SharedWorkRuntime, WorkRuntime, WorkRuntimeSnapshot, new_shared_work_runtime};
pub use validate::{ValidationCode, ValidationReport, Violation, validate};
#[derive(Debug, Clone, PartialEq)]
pub struct WorkGraph {
snapshot: WorkGraphSnapshot,
}
impl WorkGraph {
#[must_use]
pub fn new() -> Self {
Self {
snapshot: WorkGraphSnapshot::new(),
}
}
#[must_use]
pub fn from_snapshot(snapshot: WorkGraphSnapshot) -> Self {
Self { snapshot }
}
#[must_use]
pub fn snapshot(&self) -> &WorkGraphSnapshot {
&self.snapshot
}
#[must_use]
pub fn into_snapshot(self) -> WorkGraphSnapshot {
self.snapshot
}
pub fn apply(
&mut self,
change: WorkGraphChange,
ctx: ChangeCtx,
) -> Result<ChangeReceipt, ValidationReport> {
let (next, receipt) = reducer::apply(&self.snapshot, change, ctx)?;
self.snapshot = next;
Ok(receipt)
}
}
impl Default for WorkGraph {
fn default() -> Self {
Self::new()
}
}