966ff731bd
Server-side fuzzy alias table applied to the final STT transcript before forwarding to /voice/intent. Closes the metier-vocabulary gap of generic STT models (U-SON, LA 440 Hz, Zacus, ...) without needing per-request prompt biasing — which moshi-server's Rust runtime does not expose anyway. Loader is soft on pyyaml (degrades to no-op if missing) and on the yaml file itself (logs + skips on parse error). Patterns are case-insensitive with auto word-boundaries, with a (?...) escape hatch for advanced regex. Per-puzzle entries layer on top of globals — firmware passes puzzle_id in the hello frame; legacy clients omit it and get just the global polish. Loaded once at module import; restart voice-bridge to reload. Unit tested on 5 representative transcripts (eu son nez -> U-SON, diapazon -> diapason, le rasus -> Zacus, le la 440 hertz -> LA 440 Hz).