v0 · Developer Preview Frond is under active development. APIs may change between releases.

Runtime invariants

These are the properties the runtime holds for every node, whether the caller is React, the client, a test, or a script.

InvariantWhat it means
Deterministic identityA node’s id is tag:key, where key is pure and deterministic. The same tag and args always resolve to the same node. See Identity and keys.
Static dependency topologyA node’s dependency set is fixed once wired. Args reconciliation cannot change which nodes it depends on. See Dependencies.
Dependency-first readinessA node cannot be ready until every node it depends on is ready.
Wiring failure ≠ driver failureA planning failure (bad key, cycle, duplicate tag) makes the node invalid; it is not a driver/readiness failure.
Readiness failure is retryableA failed acquire leaves the node retryable — calling ensureReady() again starts a fresh attempt. See Errors.
Stable pending attemptConcurrent callers awaiting readiness join the same in-flight attempt; they do not each start their own.
Per-node serialized workDriver work for one node id runs serialized. A stale request cannot commit over a fresh one; two actions cannot interleave.
Refresh ≠ retryRefresh updates a ready node in the background and rolls back on failure; it is distinct from retrying a readiness error.
Operation failure ≠ readiness failureA failed action or refresh leaves the node ready with an operation failure; it does not poison readiness. See Lifecycle.
Expired data is hiddenAn expired result is not exposed to ordinary reads; active consumers reload it through readiness. See Result validity.
Release ≠ evictionRelease clears resources but keeps identity and edges; eviction removes the graph record and edges. See Eviction and release.
Liveness ≠ React presenceDriver live work is driven by observation and manual leases, not by a component mounting. See Liveness.
Owned cleanupNode and driver cleanup runs through disposer bags and the driver release hook, on one graph-owned path.
Caller-independentThe same contract holds for every caller; it does not depend on the UI disabling a control.

Underneath all of these: every lifecycle fact has exactly one owner, the runtime.


Next: Testing.