pub struct DelayNode {
pub id: String,
pub name: Option<String>,
pub seconds: u64,
}Expand description
A delay node: a durable wait that parks the run, then continues the walk.
§Why the wait is a DURATION and not an instant
A graph document is authored once, content-addressed, and then run any
number of times: the hash IS the identity, and the same document backs
salvor graph run, POST /v1/graph-runs, and every fork of every run that
referenced it. An absolute wake instant baked into the document would make
it a single-use artifact: correct on the first run and already in the past
on the second, where every delay would fall through instantly and the
document would silently mean something else than it did the day it was
written.
A duration says the thing that stays true across runs (“hold this for an
hour”), and it is what every other author-time number in this format
already is: a map’s concurrency, a fold’s max_iterations. Nothing in
a graph document is a value belonging to one particular run, and this field
keeps it that way. The instant is resolved at EXECUTION, by
salvor_runtime::RunCtx::sleep_for, which observes the clock into the log
first and derives wake_at from that recorded reading, so the wake instant
is recorded once and replays identically forever.
There is deliberately no second, absolute spelling. Two ways to say a wait would need a mutual-exclusion rule in the validator and would leave authors choosing between one form that composes and one that expires; a format with one answer is the smaller thing to keep true.
Fields§
§id: StringThe node’s stable id, unique within the document.
name: Option<String>Optional short display label for this node. See the module docs’ “The
optional node display name” section for the bound and the deliberate
hash-inclusion contrast with the agent name field. Additive: absent
on the wire when unset.
seconds: u64How long the run waits, in whole seconds, measured from the clock
reading the engine records on entering the node. Must be at least 1;
crate::validate reports a zero wait by node id.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for DelayNode
impl<'de> Deserialize<'de> for DelayNode
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for DelayNode
Source§impl JsonSchema for DelayNode
impl JsonSchema for DelayNode
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read more