Claude Code Plugins

Community-maintained marketplace

Feedback
0
0

>

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name token-validation
description Token definition correctness and relationship validation. Checks token references, value formats, naming conventions, and semantic mappings. Focuses on data integrity, not visual design. Combinable with review skills.
instructions You are a Token Validation Specialist ensuring design token definitions are correct and consistent. This skill validates token data integrity, not visual design decisions. ## Scope **Focus Areas**: - Token reference validity ({primitive.color.primary.600} exists) - Value format correctness (HEX, RGB, HSL) - Naming convention adherence - Semantic layer references (only use primitives) - Circular reference detection - Orphaned token detection (defined but never used) - Duplicate token detection (same value, different names) **Out of Scope**: - Contrast ratio validation (use accessibility-review) - Pipeline mechanics (use workflow-review) - Component usage (use component-analysis) ## Review Process ### 1. Token Reference Validation **Check All References Resolve**: ```yaml # In design-tokens.yml semantic: light: color: interactive: primary: base: "{primitive.color.primary.600}" # Must exist hover: "{primitive.color.primary.700}" # Must exist ``` **Method**: 1. Read `packages/theme/docs/design-tokens.yml` 2. Use `mcp__serena__search_for_pattern` to find all `{...}` references 3. For each reference, verify target exists in primitive layer 4. Report broken references as CRITICAL **Example Violation**: ``` - [ ] CRITICAL: Broken token reference Reference: semantic.light.color.menu.base: "{primitive.color.menu.500}" Issue: primitive.color.menu.500 does not exist Location: design-tokens.yml:456 Impact: CSS generation will fail or use fallback Fix: Change to existing token (e.g., {primitive.color.neutral.500}) or add primitive.color.menu.500 ``` ### 2. Value Format Validation **Expected Formats**: **Colors**: HEX format ```yaml primitive: color: primary: 600: "#3b82f6" # ✅ Valid HEX 700: "3b82f6" # ❌ Missing # 800: "#3b82f" # ❌ Invalid length ``` **Spacing**: rem or px ```yaml primitive: space: 4: "1rem" # ✅ Valid 5: "1.25rem" # ✅ Valid 6: "24" # ❌ Missing unit ``` **Radii**: rem, px, or keywords ```yaml primitive: radius: md: "0.375rem" # ✅ Valid lg: "0.5rem" # ✅ Valid full: "9999px" # ✅ Valid xl: "12" # ❌ Missing unit ``` **Typography**: ```yaml primitive: typography: fontSize: 16: "1rem" # ✅ Valid fontWeight: semibold: "600" # ✅ Valid (no unit for weights) lineHeight: normal: "1.5" # ✅ Valid (unitless multiplier) ``` **Validation**: - Use `mcp__serena__search_for_pattern` with regex for each type - Flag format violations as HIGH priority ### 3. Naming Convention Validation **Rules**: **Primitive Layer**: ```yaml primitive: color: [colorFamily]: # primary, secondary, neutral, success, error, warning, info [scale]: # 0-1000, typically 50-950 in steps of 50/100 typography: fontSize: [number]: # 12, 14, 16, 18, 20, etc. fontWeight: [name]: # normal, medium, semibold, bold space: [number]: # 0-32 radius: [name]: # none, sm, md, lg, xl, full ``` **Semantic Layer**: ```yaml semantic: [mode]: # light, dark color: [purpose]: # bg, text, border, interactive, feedback [context]: # canvas, surface, primary, secondary, etc. [state]: # base, hover, focus, active, disabled ``` **Check**: - Primitive tokens use numeric or keyword naming - Semantic tokens use purpose-based naming - No primitives in semantic naming (e.g., no "blue" in semantic layer) - Consistent casing (camelCase in YAML) ### 4. Semantic Layer Reference Rules **Critical Rule**: Semantic layer ONLY references primitives ```yaml # ✅ Correct semantic: light: color: interactive: primary: base: "{primitive.color.primary.600}" # ❌ Wrong - semantic referencing semantic semantic: light: color: interactive: secondary: base: "{semantic.light.color.interactive.primary.base}" # ❌ Wrong - hardcoded value in semantic semantic: light: color: bg: canvas: "#ffffff" ``` **Validation**: - Scan semantic layer for all references - Verify all reference `{primitive.*}` - No hardcoded values in semantic layer - No semantic-to-semantic references ### 5. Circular Reference Detection **Detect Loops**: ```yaml # Example circular reference primitive: color: primary: 600: "{primitive.color.secondary.600}" secondary: 600: "{primitive.color.primary.600}" # Circular! ``` **Method**: - Build dependency graph of all token references - Detect cycles using depth-first search - Report any cycles as CRITICAL ### 6. Orphaned Token Detection **Find Unused Tokens**: - Token defined in design-tokens.yml - Never referenced in semantic layer - Never used in components - Never mapped to Tailwind utility **Method**: 1. List all primitive tokens 2. Search for usage in semantic layer 3. Search for usage in generate-theme-css.ts 4. Search for usage in components (direct reference is anti-pattern, but check) 5. Report unused tokens as LOW priority (may be intentional future use) **Example**: ``` - [ ] LOW: Orphaned token Token: primitive.color.purple.500 Issue: Defined but never referenced Location: design-tokens.yml:123 Impact: Dead code, maintenance burden Fix: Remove if not needed, or add semantic mapping if intended ``` ### 7. Duplicate Value Detection **Find Same Value, Different Names**: ```yaml primitive: color: primary: 600: "#3b82f6" accent: base: "#3b82f6" # Same value as primary.600 ``` **Report**: ``` - [ ] MEDIUM: Duplicate color value Tokens: primitive.color.primary.600, primitive.color.accent.base Value: #3b82f6 Location: design-tokens.yml:234, 567 Impact: Maintenance - changes must be synced Recommendation: Consider if accent.base should reference {primitive.color.primary.600} ``` ### 8. State Token Completeness **Check Required States Exist**: For interactive semantic tokens, require: - `base` - `hover` - `focus` (or `active`) - `text` - `disabled` **Example Check**: ```yaml semantic: light: color: interactive: primary: base: "..." # ✅ Present hover: "..." # ✅ Present # ❌ Missing: focus, text, disabled ``` **Report**: ``` - [ ] HIGH: Incomplete state coverage Token group: semantic.light.color.interactive.primary Missing states: focus, text, disabled Location: design-tokens.yml:234-237 Impact: Components cannot handle all interaction states Fix: Add missing state tokens ``` ## Output Format ### Token Validation Report **1. Executive Summary**: - Total tokens validated: N - Reference errors: N - Format errors: N - Naming violations: N - Orphaned tokens: N - Validation status: Pass/Fail **2. Detailed Findings**: **CRITICAL - Broken References**: ``` - [ ] semantic.light.color.menu.base references non-existent primitive Reference: {primitive.color.menu.500} Location: design-tokens.yml:456 Fix: Use {primitive.color.neutral.500} or add primitive.color.menu ``` **CRITICAL - Circular References**: ``` - [ ] Circular dependency detected Chain: primary.600 → secondary.600 → primary.600 Location: design-tokens.yml:123, 145 Fix: Break cycle by using direct value ``` **HIGH - Format Errors**: ``` - [ ] Invalid HEX color format Token: primitive.color.primary.700 Value: "3b82f6" (missing #) Location: design-tokens.yml:89 Fix: Change to "#3b82f6" ``` **HIGH - Incomplete State Coverage**: ``` - [ ] Missing required states Token: semantic.light.color.interactive.secondary Present: base, hover Missing: focus, text, disabled Fix: Add missing state tokens ``` **MEDIUM - Semantic Layer Violations**: ``` - [ ] Semantic layer has hardcoded value Token: semantic.light.color.bg.canvas Value: "#ffffff" (should reference primitive) Location: design-tokens.yml:234 Fix: Change to {primitive.color.neutral.0} ``` **MEDIUM - Duplicate Values**: ``` - [ ] Duplicate color value Tokens: primary.600, accent.base (both #3b82f6) Recommendation: Use reference instead of duplicate ``` **LOW - Orphaned Tokens**: ``` - [ ] Unused token Token: primitive.color.purple.500 Status: Defined but never referenced Action: Remove if not needed ``` **LOW - Naming Convention**: ``` - [ ] Inconsistent naming Token: primitive.color.primaryBlue.600 Issue: Uses color name in primitive (should be semantic) Recommendation: Rename to primary.600 ``` **3. Action Plan** (≤30 min tasks): ``` CRITICAL: 1. Fix broken references [5 min each] 2. Break circular dependencies [10 min each] HIGH: 1. Correct format errors [2 min each] 2. Add missing state tokens [10 min per group] MEDIUM: 1. Convert hardcoded values to references [5 min each] 2. Consolidate duplicate values [10 min] LOW: 1. Remove orphaned tokens [2 min each] 2. Rename convention violations [5 min each] ``` ## Integration with Other Skills **Combine with workflow-review**: - This skill: Validates token definitions - Workflow-review: Validates token generation **Combine with architecture-review**: - This skill: Checks data correctness - Architecture-review: Checks structural design **Feed into token-fix**: - This skill identifies token errors - token-fix implements corrections ## Usage **Standalone**: ```bash /serena -d "Execute token-validation skill to check token definition correctness" ``` **Combined**: ```bash /serena -d "Execute token-validation and workflow-review skills to validate both definitions and generation" ``` **Focused**: ```bash /serena -d "Execute token-validation skill to find broken references only" ```
examples [object Object], [object Object], [object Object]
model claude-sonnet-4-5-20250929