Skip to main content

SceneNode

Struct SceneNode 

Source
pub struct SceneNode {
Show 16 fields pub id: SceneNodeId, pub parent: Option<SceneNodeId>, pub children: Vec<SceneNodeId>, pub depth: usize, pub kind: NodeKind, pub name: String, pub labels: String, pub status: PhaseStatus, pub op_count: usize, pub duration_secs: Option<f64>, pub op_names: Vec<String>, pub own_names: Vec<String>, pub seq: Option<usize>, pub yaml_path: Vec<PathSegment>, pub outcome: Option<PhaseOutcome>, pub active: bool,
}
Expand description

One node in the scene tree.

Fields§

§id: SceneNodeId§parent: Option<SceneNodeId>§children: Vec<SceneNodeId>§depth: usize§kind: NodeKind§name: String

For Phase: the phase name. For Scope: a description like "for_each color=red" or "do_while empty".

§labels: String

For Phase: dimensional labels (e.g. "k=10, table=fknn"). For Scope: empty (the description is in name).

§status: PhaseStatus§op_count: usize§duration_secs: Option<f64>§op_names: Vec<String>

For Phase: the ordered list of op template names in this phase’s stanza (one entry per ParsedOp). Empty for Scope and Root. Populated at pre-map time so the TUI’s scenario view can drill into a phase and show its ops without having to reach back into the workload model.

§own_names: Vec<String>

Names defined at this scope: own bindings, iter vars, and externs that the scope’s specs / op templates reference. Excludes inherited cascade-propagation names (workload params auto-injected at intermediate scopes solely so descendants see them). Populated from the scope’s installed kernel via program.own_output_names(). Empty for Root. Used by the TUI / dryrun renderer to show “what’s defined here” without listing every name that’s merely visible.

§seq: Option<usize>

1-based sequence number assigned to Phase nodes at pre-map time, in DFS order. None for Scope and Root entries.

The TUI shows this as [N/total] next to the phase name and as phase X/Y in the header counter, so the operator can at any moment see which step of the planned scenario is in flight relative to the whole. The numbering is stable for the lifetime of one session (assigned once during pre-map), so a UI that displays “phase 47” on screen N and “phase 48” on screen N+1 is always referring to the same two phases — not a fresh re-numbering per draw.

§yaml_path: Vec<PathSegment>

Fully-qualified structural location of this node in the workload YAML — outer-first chain of scenarios, for_each/for_combinations clauses, do-loops, and (terminal) the phase name itself. Populated for Phase nodes; ancestor Scope nodes carry partial paths (everything down to but not including the phase name).

Used by the checkpoint resume planner — yaml_path plus the leaf-first coord-path string is the per-phase identity tuple that decides whether a saved checkpoint entry applies to a freshly-pre-mapped phase. See SRD-44 §“Phase identity”.

§outcome: Option<PhaseOutcome>

SRD-76 — structured terminal-state record. None while the phase is pending or running; populated exactly once at phase end by the executor’s set_phase_outcome call. Carries the per-phase PhaseStatus, wall-clock duration, and the chronological error list.

Co-existence with the legacy status / duration_secs fields: the legacy fields stay as the load-bearing renderer surface (TUI / stderr observer / scene-tree-prints) until Push 4 lands the new readouts that read this slot directly. set_phase_outcome keeps the two in sync; new consumers should read from here.

§active: bool

Whether this node is active for execution under the session’s phases=<pattern> filter (default true). Set by the planning walker before any phase runs:

  • Phase nodes get active = pattern.is_match(name) (or true when no pattern is set).
  • Scope nodes are active iff any descendant phase is active; otherwise they’re elided from the execution walk along with their subtree.

Inactive nodes are still in the tree (so coordinate chains, scope-init kernels, and parent context stay intact for active siblings under the same scope) but the executor skips their phase activation.

Trait Implementations§

Source§

impl Clone for SceneNode

Source§

fn clone(&self) -> Self

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 SceneNode

Source§

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

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

impl<'de> Deserialize<'de> for SceneNode

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 SceneNode

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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 = !

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

fn try_from(value: U) -> Result<T, !>

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