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.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add mattnigh/skills_collection --skill collection --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Collection?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mattnigh-collection-bbae292a)More formats (shields.io, HTML) on the badges page.
---
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:
- input: "Execute token-validation skill for complete audit"
output: "Validates all token references, formats, naming conventions, detects orphaned/duplicate tokens, generates prioritized fix list"
- input: "Execute token-validation skill to find broken references"
output: "Scans semantic layer for invalid primitive references, reports with file:line, provides fix suggestions"
- input: "Execute token-validation skill to check state completeness"
output: "Verifies all interactive tokens have required states (base/hover/focus/text/disabled), identifies gaps"
model: claude-sonnet-4-5-20250929
---
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!