Skip to main content

TaskNode

Struct TaskNode 

Source
pub struct TaskNode {
Show 19 fields pub id: TaskId, pub title: String, pub description: String, pub agent_hint: Option<String>, pub status: TaskStatus, pub depends_on: Vec<TaskId>, pub result: Option<TaskResult>, pub assigned_agent: Option<String>, pub retry_count: u32, pub predicate_rerun_count: u32, pub failure_strategy: Option<FailureStrategy>, pub max_retries: Option<u32>, pub execution_mode: ExecutionMode, pub verify_predicate: Option<VerifyPredicate>, pub predicate_outcome: Option<PredicateOutcome>, pub execution_environment: Option<String>, pub token_budget_cents: Option<f64>, pub network_scope: Option<NetworkScope>, pub asset_sensitivity: Option<AssetSensitivity>,
}
Expand description

A single node in the task DAG.

Constructed by Planner and stored inside a TaskGraph. The scheduler drives each node through its TaskStatus lifecycle.

§Examples

use zeph_orchestration::{TaskNode, TaskStatus, ExecutionMode};

let node = TaskNode::new(0, "fetch data", "Download the dataset from source.");
assert_eq!(node.status, TaskStatus::Pending);
assert!(node.depends_on.is_empty());
assert_eq!(node.execution_mode, ExecutionMode::Parallel);
assert!(node.network_scope.is_none());
assert!(node.asset_sensitivity.is_none());

Fields§

§id: TaskId

Dense zero-based index. Invariant: tasks[i].id == TaskId(i).

§title: String

Short, human-readable task title.

§description: String

Full task description passed verbatim to the assigned sub-agent as its prompt.

§agent_hint: Option<String>

Preferred agent name suggested by the planner; None lets the router decide.

§status: TaskStatus

Current lifecycle status.

§depends_on: Vec<TaskId>

Indices of tasks this node depends on.

§result: Option<TaskResult>

Result populated by the scheduler after the sub-agent finishes.

§assigned_agent: Option<String>

Agent name actually assigned by the router at dispatch time.

§retry_count: u32

Number of times this task has been retried so far (execution retries only).

§predicate_rerun_count: u32

Number of predicate-driven re-runs for this task (independent of retry_count).

§failure_strategy: Option<FailureStrategy>

Per-task failure strategy override; None means use TaskGraph::default_failure_strategy.

§max_retries: Option<u32>

Maximum retry attempts for this task; None means use TaskGraph::default_max_retries.

§execution_mode: ExecutionMode

LLM planner annotation. Old SQLite-stored JSON without this field deserialises to the default (Parallel).

§verify_predicate: Option<VerifyPredicate>

Per-subtask verification predicate (predicate gate).

When Some, the task’s output must satisfy this criterion before downstream tasks may consume it. The scheduler emits SchedulerAction::VerifyPredicate after task completion and blocks downstream dispatch until predicate_outcome.is_some().

§predicate_outcome: Option<PredicateOutcome>

Outcome of the most recent predicate evaluation.

None means the gate has not been evaluated yet (in-memory only; restart re-evaluates any pending predicates). The scheduler re-emits VerifyPredicate on every tick while this is None and verify_predicate.is_some().

§execution_environment: Option<String>

Named execution environment from [[execution.environments]] to use when dispatching shell tool calls for this task. None inherits the executor default.

§token_budget_cents: Option<f64>

Per-task cost budget in US cents. None = use OrchestrationConfig::default_task_budget_cents.

On task completion the scheduler checks whether this budget was exceeded and emits a tracing::warn!. Hard enforcement is deferred post-v1.0.0.

§network_scope: Option<NetworkScope>

Per-task network egress policy. Advisory only for spawned sub-agents.

None / Inherit = inherit the executor/global allow_network default. See NetworkScope for enforcement caveats and specs/069-threat-model/spec.md §5.

§asset_sensitivity: Option<AssetSensitivity>

Sensitivity level of assets accessed by this task.

Used by the orchestration planner to annotate tasks that touch sensitive resources (vault keys, user credentials, private memory). Advisory only in the current implementation — the dispatcher does not yet auto-restrict the tool allow-list based on this field. See specs/069-threat-model/spec.md §5.

Implementations§

Source§

impl TaskNode

Source

pub fn new( id: u32, title: impl Into<String>, description: impl Into<String>, ) -> Self

Create a new pending task with the given index.

Trait Implementations§

Source§

impl Clone for TaskNode

Source§

fn clone(&self) -> TaskNode

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TaskNode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for TaskNode

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for TaskNode

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more