Repetition also happens in small decisions. A task status may appear in a form, a filter, an API response and a business rule. If each place defines its own list, they can disagree while each looks correct in isolation.
Wildo’s convention gives a fixed set of values one named definition. Schemas and code use that definition. The words people see have their own authored home in the translation system, so a technical value can have an appropriate label in each language.
The distinction keeps meaning and wording clear. A new status changes the model; a better label changes how that status is explained. Sharing the definition makes the affected code easier to find, but the application still needs to decide what the new status permits and how people move into or out of it.
Two concepts can use similar words without meaning the same thing. An approval state and a background job state should remain separate when their rules differ.
Example: One value, different responsibilities
The model
A named status definition gives validation, filters and application rules the same set of values.
The interface
An authored translation gives each value the words a person reads. The system should make a missing label visible so it can be completed.
The business rule
The application decides which changes are allowed. Adding a status to the definition does not invent an approval workflow for it.
For engineers
Use a named TypeScript enum for a closed business vocabulary. Derive its Zod schema and dependent types from that source instead of declaring a second list of strings. Document each member where its business meaning can be found from a usage.
The same discipline applies to labels at a different layer. registerCommonEnum registers a
vocabulary for shared labeling. The field-enum translation helper can resolve a field-specific
label and then the common system_enums.<Name>.<value> entry. Author the words there rather than
formatting an identifier into a plausible-looking sentence.
Follow a change beyond the declaration
Adding an enum member makes the value available to its consumers; it does not prove that every business branch, migration or translation is ready for it. Review transitions, exhaustive switches, filters, persisted values and labels in the application that uses the vocabulary.
An external protocol’s values belong at its translation boundary. Keep distinct business concepts separate even if their wire values happen to coincide. A named source helps locate a decision; it cannot decide whether two concepts actually have the same meaning.