The root nodes, resolved from roots (skipping any dangling id).
Iterable<NodeSpec> get rootNodes => roots.map((id) => nodes[id]).whereType<NodeSpec>();