A single node in a ShotUn.Trace decision tree.
Each node represents the state reached after applying rule to its
parent's state. The root has kind: :start, rule: :init and no
parent; leaves are either :solution or :fail. All term-bearing
fields are pre-formatted strings captured while the term-factory
scratchpad was alive, so the tree remains meaningful after the
algorithm tears down its scratchpad.
Summary
Types
@type kind() :: :start | :step | :solution | :fail
@type t() :: %ShotUn.Trace.Node{ children: [t()], depth: non_neg_integer() | nil, flex: [{String.t(), String.t()}], id: non_neg_integer(), kind: kind(), note: String.t() | nil, pairs: [{String.t(), String.t()}], parent_id: non_neg_integer() | nil, rule: atom() | nil, substs: [String.t()] }