typecase
Typecase
A compositor's type case is a tray of fixed compartments, and you set from what is in it. Text shape comes from one named role, chosen from a set small enough to hold in your head.
Shape is size, weight, family, tracking, leading and case. Colour, alignment, wrapping and truncation are not shape and stay free. capitalize is the one casing utility that stays a modifier rather than a role, because it cases a data value rather than styling a label; uppercase and lowercase belong to a role.
Agents write UI faster than anyone reads it, and each one sizes text by picking a plausible utility for the element in front of it. Nothing in that loop notices that the last file chose differently. One measured codebase reached 169 distinct inline typography combinations across 867 usages before anyone counted - twelve display clamps, fifteen uppercase-marker variants, and a micro-size soup of 9/10/10.5/11/12/13px. No single commit was wrong.
Writing the rule down does not hold it. From a repo where the rule sat in CLAUDE.md for months: "CLAUDE.md has always stated the rule. Nothing enforced it, which is why the palette grew three pairs of roles that shared a size." A rule nothing checks is a rule the next agent will not follow.
What the case holds
Four to six roles. Every text element in the product picks exactly one.