Skip to main content
Verified against Titan source. The absences on this page were checked, not assumed: no token in any of the four DTCG source files carries a deprecation marker, and the token manifest has no lifecycle field. Constraints are Proposed.

What it governs

How something in this system stops being current — a constraint, a token, a component — and how a consumer finds out.
A system that cannot record its own change cannot be adopted incrementally. Every consumer discovers a removal by breaking. That is the failure this page exists to prevent, and at the token layer Titan cannot currently prevent it.

What has a retirement path

Constraint IDs — retire, never renumber

Normative rules carry permanent IDs. When a rule stops applying it is retired, which means it stays visible with its original wording and a reason. A missing number therefore means a retired rule, not an error. Ten are retired today: Retired is not reversed. Each of those rules still describes what the code does. They stopped being documentation policy because the subject moved out of scope.

Packages — versioned by CI

App and component package versions and changelogs are updated by CI, not by hand. A hand-written changelog is a second record of something the repository already holds, and it is the first thing to go stale.

The legacy SCSS surface — frozen, which is a deprecation of a kind

legacy-surface-inventory.json pins exactly 48 semantic, 10 spacing, and 24 shadow names, and a test asserts the emitted files match. New tokens never join it. That is the closest thing Titan has to a deprecation: the surface is closed, existing consumers keep working, and nothing new arrives. It is not marked as deprecated anywhere — it is simply frozen. See TITAN-DIV-05.

What has no retirement path

Tokens cannot be deprecated — verified, not assumed; see Open issues for how that was checked. So a token can be added and it can be deleted. There is no state in between, which means no way to say “this still works, stop using it, here is what to use instead.” Deleting it is a breaking change with no warning period; leaving it is permanent. This is why TITAN-GAP-04 — seven groups of tokens sharing one value — has no obvious resolution. Consolidating them would mean deleting names that consumers may use, with no mechanism to warn first.

Constraints

Known issues

Versioning & deprecation: open issues

Divergences, open decisions, and undocumented gaps for Versioning & deprecation.

Why it works this way

Constraint IDs got a retirement path because they are cited. A rule referenced in a PR from eighteen months ago has to still resolve to the thing it meant. That pressure produced a convention. Tokens have not had the same pressure yet — they are referenced in code rather than in prose, and a compiler catches a missing one — which is most of why the gap exists. The gap will get more expensive, not less. Every token added without a lifecycle field is another one that can only be removed abruptly. The cost of adding the field is roughly constant; the cost of not having it grows with the token count.
Last modified on September 2, 2026