Commit Graph

2 Commits

Author SHA1 Message Date
scotttong 46d9a3c0c9 feat(ui): collapse type tokens to named ladder via codemod (B3, preset-tune step 3)
VISIBLE CHANGE, contact-sheet review to follow; snapshots intentionally
NOT re-baselined. Executes the user-locked DECISION-SHEET.md B3 ladder
with the committed, idempotent scripts/codemod-type-ladder.mjs
(re-runnable; exact-string site map incl. closing parens so --ls-0_1 /
--ls-0_12-style prefixes cannot mis-match; fails loudly on leftovers).

Font sizes (730 sites): --fs-9/10 -> --text-nano 10px (249);
--fs-11/--fs-0_7rem -> --text-micro 11px (416 + 2 inline var());
--fs-12 -> Tailwind text-xs (24); --fs-13 -> --text-compact 13px (26,
'sm 13' renamed to avoid colliding with text-sm=14px); --fs-14/15 ->
Tailwind text-sm (13). Letter-spacing (202 sites): 0.08/0.1em ->
--tracking-label (13); 0.12/0.14/0.16em -> --tracking-eyebrow (90);
0.18/0.2/0.22/0.24em -> --tracking-caps (99). All --fs-*/--ls-*
definitions deleted; named ladder minted in the non-inline Batch 2
:root block (no @theme entries needed — text-(length:--x)/tracking-(--x)
forms verified in built CSS: tokens + font-size/letter-spacing var()
rules all emit). Sites moved to text-xs/text-sm additionally pick up the
Tailwind scale line-height (text-(length:--x) set font-size only) —
part of the reviewable change. 143 tsx files + index.css rewritten;
gate-script comment example refreshed; DECISION-SHEET.md B3 -> EXECUTED
(pending contact-sheet). Gates 3/3 CLEAN, typecheck green, ui build
green, vitest sanity (IssueChatThread/MarkdownBody/CommentThread
135/135). No test files referenced the old forms, so no lockstep test
edits were needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 17:29:20 -07:00
scotttong e0bbf3c911 refactor(ui): extract remaining bracket values, add token gate check (Phase 2 batch 4/4)
Final batch of the design-token extraction: mints tokens for every
remaining value-bearing arbitrary Tailwind bracket in
ui/src/components/** and ui/src/pages/**, then adds a gate script so
the "zero hardcoded value" rule is enforced going forward instead of
re-audited by hand each time.

Codemod: scripts/codemod-extract-misc.mjs (198 sites, 84 files, 96 new
tokens: 58 --gtc-*/3 --gtr-* grid track lists, 19 --tp-*
transition-property lists, 6 --z-* z-index values, --s-*/--e-*/--va-*/
--sw-* scale/ease/vertical-align/stroke-width, 2 --blur-*, 1
--drop-shadow-extract-*, 4 *-resolved wrapper tokens resolving
FileViewerSheet.tsx's half-migrated var(x, fallback) sites Batch 1
deferred, and 2 --gradient-extract-* continuing Batch 1's counter for
2 hsl(var())/color-mix() gradient sites its color-literal audit didn't
catch). Mandatory Step 0 syntax spike confirmed every paren form
byte-equivalent via scratch stories + built-CSS grep, and confirmed
the tw-animate-css plugin utilities (zoom-in-[0.97] etc.) are
currently dead/no-op classes (plugin not installed) — allowlisted,
not rewritten, since there's no visual behavior to preserve or change.

Gate script: scripts/check-token-gates.mjs (new, wired as
`pnpm check:token-gates`) implements the three DONE-WHEN gates
(hex/color-literal, arbitrary-bracket-value, raw-font-size) over
ui/src/components/** and ui/src/pages/**, parsing a new
machine-readable ALLOWLIST block appended to ui/src/index.css that
consolidates Batches 1-3's free-form allowlist prose into
`* allow <path> — <reason>` lines. Resolved TOKEN-AUDIT.md's open
"test file policy" question by allowlisting 43 test-fixture hex-literal
sites across 18 *.test.tsx files (mock prop/API-response data, not
rendered CSS). Gate exits 0 clean.

AGENTS.md's existing Design system section now names the gate command.
TOKEN-AUDIT.md gets a Batch 4 log appendix with counts, allowlist
rationale, and the remaining out-of-scope debt (36 hex sites in
ui/src/lib|context|plugins; the ~3,115-site Tailwind-palette-class
scope question is still unresolved and flagged for a human decision).

Verify: node scripts/check-token-gates.mjs exit 0 (all 3 gates clean);
pnpm build-storybook exit 0; Storybook visual suite 510/510 (Playwright,
tests/storybook-visual); pnpm typecheck (ui/) exit 0; codemod idempotent
on re-run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:50:09 -07:00