DraftNode
One node in a Draft dependency DAG — a DraftStage plus its predecessor edges.
The pair (id, predecessors) encodes the graph structure: a node depends on all the nodes in predecessors and must run after they do. predecessors is empty only for the root node (a DraftStage.Source).
On a path (the degenerate case produced by the path-preserving builder), every node has exactly one predecessor except the source — this is structurally equivalent to the previous List<DraftStage> representation and produces the same topological order.