Unloads the nodes and everything the builder remembers about them: tracked expansions and the
per-connector diff state. The nodes leave the store outright rather than being tombstoned. A relation
that loses any of its outputs is torn down too, and its next read re-expands it from its connectors,
diffing against the outputs that stayed. Dirty relations on the released nodes' ancestors are read, so
one whose next output would bring a released node back is torn down as well.
Releasing a node does NOT release its descendants — the caller chooses the set, since what counts
as a releasable unit (a workspace, a collection, one node) is a policy the builder has no view of.
explore and the store's own traversal are how that set is collected.
Unloads the nodes and everything the builder remembers about them: tracked expansions and the per-connector diff state. The nodes leave the store outright rather than being tombstoned. A relation that loses any of its outputs is torn down too, and its next read re-expands it from its connectors, diffing against the outputs that stayed. Dirty relations on the released nodes' ancestors are read, so one whose next output would bring a released node back is torn down as well.
Releasing a node does NOT release its descendants — the caller chooses the set, since what counts as a releasable unit (a workspace, a collection, one node) is a policy the builder has no view of. explore and the store's own traversal are how that set is collected.