The engine is inspectable through its own primitives rather than
through a side-channel devtools API: explain(node) returns
another node — a derived view of the dependency lineage that can
itself be subscribed to, displayed, and drilled into, not a one-
shot JSON dump. The discriminator on via lets a UI render
inputs, derived nodes, hot-swappable liveDerived nodes, and the
cycle marker without re-traversing engine internals; devtools
panels become a UI rendered on top of these primitives, not a
parallel system.
Recursive lineage view for a single node, returned by Graph.explain.