Evolving Tables Safely⚓︎
Feature tables change. A team renames a label. A new optional field appears. A parser becomes stricter. Old scenarios still matter, but new scenarios should read better.
Table evolution is healthiest when compatibility is intentional.
Renaming language⚓︎
An old table might use Full name:
A newer table might prefer name and add active:
Both can be supported while the team migrates:
from talika import RowTable, boolean, field
class UserTable(RowTable):
name = field("name", aliases=("Full name",), required=True)
age: int = field("age", required=True)
active = field("active", parser=boolean(), default=True)
The important part is that the old wording is visible. It is accepted because the project chose to accept it, not because the parser ignored differences.
See field aliases for the concrete migration mechanism.
Compatibility should have a reason
Aliases are useful for migration, shared vocabulary, and external wording. They should not become a junk drawer for every spelling that ever appeared.
Adding fields⚓︎
Adding a required field breaks old tables immediately. Sometimes that is the right choice. Other times the field should start as optional with a default, so old scenarios remain valid while new scenarios can be more explicit.
Defaults can hide change
A default is convenient, but it also makes omitted data look intentional. Use it when omission is genuinely acceptable, not just to avoid updating tables.
Preserving old information⚓︎
Some projects temporarily preserve old columns or variant-specific values while they migrate:
That should be a short-lived compatibility strategy, not the permanent design.
CI makes evolution safer⚓︎
When table rules are explicit, a checker can validate feature files before the scenario runs. That gives teams earlier feedback when a label changed, a parser became stricter, or a compatibility alias was removed.
The static-checking guide shows how to check feature tables from the CLI.
Evolve in public
Feature tables are shared language. When you change that language, make the transition visible in the contract and easy to detect in CI.