Breaking:
- Renderer.render and friends throw (ADR 0001); call sites need `try`
- Template.binaryOperation takes an Operator, not a String
- SetterSignature.parameterName is optional (bare `set { }`)
- typed closure parameters emit their colon: `{ (x: Int) in }`
Added: Template.cast, Template.syntax, MatchPattern with guardCase/ifCase,
Operator/Precedence/Associativity, RenderError, renderExtensionDecl.
Fixed: precedence-aware parenthesisation, keyword escaping, the leaf fast
path bypassing the parse gate, a round trip inside the emitter, and 24
example files that had not compiled since render began throwing.
Performance vs a hand-rolled baseline that hoists loop invariants and
emits matching trivia, min over 3 runs in one process:
case-path 0.67-0.69x
generate 0.74x
case-factory 1.00-1.02x
Three earlier claims are withdrawn in the CHANGELOG rather than edited
away: a memory figure that never reached users, ratios measured against
an unhoisted baseline, and a case-factory number that was session noise.