VUV Naming Policy (2026)
VUV Naming Policy (2026)
Section titled “VUV Naming Policy (2026)”The rule: Every public Vox identifier — primitive name, kwarg name, decorator name, type name, decorator-argument enum value — follows a three-step lifecycle:
- Announce in a release note: “X has been renamed to Y.”
- Alias X to Y in the rename registry. Both names parse. Using X emits a one-line deprecation warning at compile time.
- Remove X in the next major version. The registry retains the entry with
removed_in: "1.X"for tooling and historical reference.
The codemod: vox migrate reads the rename registry and rewrites every
occurrence of an old name in a .vox corpus to its new name. The codemod is
byte-equivalent: re-running on a migrated corpus produces no diff.
The registry: contracts/naming/renames.v1.json. Single source of truth.
Every rename has from, to, kind (one of primitive, kwarg, decorator,
enum_value, type), since (version where the alias was introduced), and
optional removed_in (version where the alias becomes a hard error).
No silent renames. A change to a public name without a registry entry is
a CI failure. Enforcement: see crates/vox-arch-check.
Why: the dominant LLM-author failure mode in Gradio and Streamlit is that
old training corpora contain dead names. A model trained on Gradio 4.x cheerfully
emits concurrency_count, Interface.load(), .style() — all dead. Vox is
itself a corpus-aware language: MENS retrains on examples/golden/ and the
dashboard. We cannot afford uncontrolled churn.
See also: Gradio & Streamlit Research (2026) for the historical evidence; GUI Authoring Syntax (2026) for the current VUV phase plan.