Start from a narrow contract
A generator accepts Shape IR and emits a target representation such as TypeScript, JSON Schema, or a framework-specific config format.
The goal is not to mirror parser internals. The goal is to translate stable IR nodes into output decisions while preserving enough diagnostic context to explain loss or unsupported semantics.