StaticvalidateCollect every structural error in an author-supplied tree blob.
Returns an empty array for a valid tree. Pure — no I/O. Tolerates
arbitrary unknown input (the blob is Record<string, unknown>
at hydration) and never throws.
Checks: a present, object-shaped nodes table and entry list;
every entry[].node and every choice.to resolves to a declared
node; every guard names a recognized fact + operator; every effect
names a registered verb. Terminal reachability is NOT enforced —
terminal is a per-node flag and an authored leave path is valid.
The format's structural rules. A value-object holding the parse / validate operations over the DialogueTree blob (the
EmoteGrammarRunnerprecedent — interfaces describe the data, a companion class owns the operations, satisfying lib/ export discipline).