Acceptance Criteria
TintTokens interface exported from packages/transform/src/types.ts with the six aligned field names (bg, surface, text, muted, primary, border)TintTokenSet removed; downstream imports updated (renamed to TintTokens in the index export too)TintDefinition updated: mode removed, lockMode?: 'light' | 'dark' added, extends?: string addedSiteConfig.tints in packages/types/src/theme.ts documents the TintDefinition shape via JSDoc; kept as Record<string, Record<string, unknown>> at the @refrakt-md/types level to avoid a cross-package type dependency (the actual TintDefinition lives in @refrakt-md/transform). Validated at config-load time downstream.RefraktConfig.tints (the deprecated flat-shape field) removed entirely — per SPEC-053 decision. config-normalize no longer mirrors tints between flat and per-site shapes; only sites.<name>.tints / site.tints is accepted.- JSDoc on every renamed field clearly states the target
--rf-color-* token - Build passes; full repo test suite (2429 tests + 10 new tint-extends tests) green
Approach
Single type-rename PR. Mechanical change to packages/transform/src/types.ts and the corresponding import in packages/types/src/theme.ts.
Build will break immediately in packages/lumina/src/config.ts and any plugin that defines tints — that's expected and gets fixed in WORK-198. Order matters: this type-only PR lands first, then the engine/CSS/config updates land together.
Dependencies
None (or minimal — does not require SPEC-048 to be implemented). Independent of the rest of the SPEC-048 chain; can start in parallel.
References
- SPEC-053 — full rationale for each rename and the
mode → lockMode simplification packages/transform/src/types.ts — file being editedpackages/types/src/theme.ts — file being edited