Explain the most recent change to node as a live DerivedNode.
The returned node recomputes on every commit through Phase F.5 so
subscribers fire on the same commit that produced the answer
(the previous one-shot snapshot shape returned the previous
commit's answer — the regression #383 documents). UIs subscribe and
compose the result like any other derived; read(node) returns the
current classification, readAt(node, t) projects it historically.
Repeated calls with the same (graph, node) return the same handle
(memoised) — registering the underlying derived twice would throw
DuplicateNodeError, and stable identity lets a UI compose the
result into downstream derived(...) without juggling handles.
Explain the most recent change to
nodeas a live DerivedNode.The returned node recomputes on every commit through Phase F.5 so subscribers fire on the same commit that produced the answer (the previous one-shot snapshot shape returned the previous commit's answer — the regression #383 documents). UIs subscribe and compose the result like any other derived;
read(node)returns the current classification,readAt(node, t)projects it historically.Repeated calls with the same
(graph, node)return the same handle (memoised) — registering the underlying derived twice would throwDuplicateNodeError, and stable identity lets a UI compose the result into downstreamderived(...)without juggling handles.