Receives a tracked get accessor; the engine records every node
read through get as a dependency edge for the current evaluation.
Conditional reads are tracked dynamically — a derivation that
switches inputs based on an if branch must leave no orphan
dependency listening on a node it no longer reads. The type
system cannot see across if-branches inside a derived body, so
dynamic-dependency cleanup is enforced as a property-based fuzz
gate: random derivations that switch inputs based on conditional
reads, followed by random commits, must leave no orphan dep.
Compute closure for a derived node.