pub struct NodeDescribe {
pub type: NodeTypeStr,
pub status: NodeStatus,
pub value: Option<DescribeValue>,
pub sentinel: Option<bool>,
pub deps: Vec<String>,
pub operator_kind: Option<String>,
pub meta: Option<Value>,
}Expand description
Per-node descriptor.
§JSON-shape disambiguation (D279, 2026-05-22, E-ii.3 — Rust ↔ TS parity)
Sentinel-vs-JSON-null disambiguation matches the TS describeNode
shape (packages/pure-ts/src/core/meta.ts
DescribeNodeOutput { value?: unknown, sentinel?: boolean }):
- Sentinel cache (
cache == NO_HANDLEANDstatus == NodeStatus::Sentinel) →valuekey omitted from JSON;sentinel: truepresent. - Legitimate JSON-null user value (
DescribeValue::Rendered(Value::Null)undercrate::Graph::describe_with_debug) →"value": nullpresent;sentinelkey omitted. - Any other value →
"value": <v>present;sentinelkey omitted.
Pre-D279 the Rust shape diverged: value: None (sentinel) and
value: Some(DescribeValue::Rendered(Value::Null)) (rendered null)
both serialized to "value": null — JSON-indistinguishable.
#[serde(skip_serializing_if = "Option::is_none")] on both value
and sentinel enforces the converged TS-shape. Rust additionally
always emits status (TS makes it optional via includeFields);
the sentinel flag is redundant for Rust consumers that check
status == "sentinel", but its presence preserves cross-impl
shape parity (cross-track-ledger §2 row 2026-05-22).
Fields§
§type: NodeTypeStr"state" / "derived" / "dynamic" / "producer".
status: NodeStatusLifecycle status (canonical Appendix B enum).
value: Option<DescribeValue>Current cache value. None when sentinel (NO_HANDLE);
omitted from serialized JSON via skip_serializing_if (D279).
sentinel: Option<bool>D279 (2026-05-22): explicit sentinel discriminator matching
TS’s sentinel?: boolean field. Some(true) when status == NodeStatus::Sentinel; None otherwise (omitted from JSON via
skip_serializing_if).
deps: Vec<String>Dep names in declaration order (_anon_<NodeId> for unnamed).
operator_kind: Option<String>Operator discriminant (e.g. "map"); None for non-operators.
meta: Option<Value>Free-form metadata per canonical Appendix B. Always None in
this slice (metadata-storage primitive not yet shipped).
Trait Implementations§
Source§impl Clone for NodeDescribe
impl Clone for NodeDescribe
Source§fn clone(&self) -> NodeDescribe
fn clone(&self) -> NodeDescribe
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more