Skip to content
Back to skills

Collection

ASecurity

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.

  • 24 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
designbash

Works with

  • mcp

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add mattnigh/skills_collection --skill collection --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Collection?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Collection
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mattnigh-collection-bbae292a/badge)](https://www.skillsdirectory.com/skills/mattnigh-collection-bbae292a)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
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:
  - 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
---

Files in this skill

  • 0Chan-smc__claude-code-workflow-lab__claude__skills__frontend-dev-guidelines__SKILL.md15.1 KB
  • 17hz__nextjs-template__claude__skills__example-skill__SKILL.md316 B
  • 1ambda__dataops-platform__claude__skills__context-synthesis__SKILL.md3.5 KB
  • 1natsu172__dotfiles__claude__skills__git-analysis__SKILL.md5.4 KB
  • 1natsu172__dotfiles__claude__skills__github-pr-best-practices__SKILL.md7.7 KB
  • 23Maestro__prospect-pipeline__claude__skills__npid-fastapi-skill.md26.1 KB
  • 360AYA25__ClaudeN8N__claude__skills__n8n-code-javascript__SKILL.md15.7 KB
  • 360AYA25__ClaudeN8N__claude__skills__n8n-code-python__SKILL.md17.5 KB
  • 360AYA25__ClaudeN8N__claude__skills__n8n-expression-syntax__SKILL.md9.4 KB
  • 360AYA25__ClaudeN8N__claude__skills__n8n-mcp-tools-expert__SKILL.md12.5 KB
  • 360AYA25__ClaudeN8N__claude__skills__n8n-node-configuration__SKILL.md16.6 KB
  • 360AYA25__ClaudeN8N__claude__skills__n8n-workflow-patterns__SKILL.md11.2 KB
  • 3x-Projetos__claude-memory-framework__claude__skills__scientist__SKILL.md14.8 KB
  • 5MinFutures__futures-arena__claude__skills__migration-tracker__SKILL.md16.2 KB
  • 5MinFutures__futures-arena__claude__skills__planning-guidelines__SKILL.md11.8 KB
  • 92Bilal26__TaskPilotAI__claude__skills__assessment-builder__SKILL.md17.5 KB
  • 92Bilal26__TaskPilotAI__claude__skills__book-scaffolding__SKILL.md19.1 KB
  • 92Bilal26__TaskPilotAI__claude__skills__code-validation-sandbox__SKILL.md6.2 KB
  • 92Bilal26__TaskPilotAI__claude__skills__exercise-designer__SKILL.md18.1 KB
  • 92Bilal26__TaskPilotAI__claude__skills__learning-objectives__SKILL.md24.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…