The verb/menu split of one statement, context applied.
A union rather than one shape with four nullable fields, because the nulls
are not independent: a resolved split always has a path AND a verb, a
navigation split always has a path and never a verb, and a refusal has
neither. Stating that in the type means a consumer narrowing on resolution
gets the fields that exist, and the envelope's fold (src/explain.ts) has no
unreachable null branch to write. The runtime shape is unchanged — every
variant carries every key, so a null is still readable without narrowing.
The verb/menu split of one statement, context applied.
A union rather than one shape with four nullable fields, because the nulls are not independent: a
resolvedsplit always has a path AND a verb, anavigationsplit always has a path and never a verb, and a refusal has neither. Stating that in the type means a consumer narrowing onresolutiongets the fields that exist, and the envelope's fold (src/explain.ts) has no unreachable null branch to write. The runtime shape is unchanged — every variant carries every key, so a null is still readable without narrowing.