v4.2.1

Released 2026-05-22 · GitHub release · CHANGELOG

Rust-target codegen fixes. No surface-syntax or wire-format changes; the other 16 backends are unaffected.

Highlights

  • Typed lifecycle args (RFC-0025.1, #34/#35) — Rust $> / <$ enter/exit args now ride the typed per-state StateContext instead of a stringified Vec<String> + parse::<T>(). Fixes silent default-on-parse-miss and the hard break on compound types (Vec<i64>: FromStr); includes start-state <$ binding and decorated pop$ args.
  • Fixed E0124 collisions — a state named $Empty (the no-context sentinel is now __NoContext) and a state var sharing a name with a lifecycle/state param no longer emit duplicate Rust identifiers.
  • Validator E115 — state names beginning with the reserved __ prefix are rejected, guaranteeing user state names never collide with framec-synthesized identifiers on any backend.