# Theme Parity

> INTERNAL DEV WORKFLOW for WpfHexEditor — Claude self-invokes after editing Themes/<Theme>/Colors.xaml or *Theme.xaml to verify the 18 themes share the same key surface. Detects: theme-key-missing (key in Dark but not in the edited theme), theme-key-orphan (key only in this theme), theme-color-no-brush (Color without paired SolidColorBrush), theme-merge-order (wrapper merges Colors.xaml after Menu.xaml/TabControl.xaml). Skip on: edits outside the Themes/ tree.

- Skill: `abbaye/theme-parity` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add abbaye/theme-parity`
- Raw SKILL.md: https://api.skillmd.com/api/skills/abbaye/theme-parity/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: abbaye (https://skillmd.com/u/abbaye)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/abbaye/theme-parity

---


# theme-parity (internal)

Theme switching is a pure ResourceDictionary swap — every theme must expose the same key set. `DarkTheme` is the canonical reference.

## When I invoke

| Situation | Run? |
|---|---|
| Edit `*/Themes/<X>/Colors.xaml` (Shell or Docking) | yes |
| Edit `*Theme.xaml` wrapper (merge order) | yes |
| Add a new theme folder | yes (regen reference first) |
| Edit non-theme XAML | no (`xaml-guard` / `ui-design`) |

## Pipeline

1. If `data/reference-keys.txt` missing: `scripts/theme-parity.ps1 -RefreshReference` (extracts keys from Dark).
2. `scripts/theme-parity.ps1 -Files <paths>` → per-theme summary.
3. Suggest patch (copy-paste values from Dark): `scripts/theme-parity.ps1 -Files <path> -SuggestPatch`

## 4 rules

| Rule | Severity | Detects |
|---|---|---|
| `theme-key-missing` | error | key in Dark reference, absent from edited theme |
| `theme-key-orphan` | warn | key only in edited theme, no other theme has it |
| `theme-color-no-brush` | warn | `<Color x:Key="XColor">` without paired `<SolidColorBrush x:Key="XBrush">` |
| `theme-merge-order` | error | `*Theme.xaml` merges Colors.xaml AFTER Menu.xaml/TabControl.xaml |

## Output

```
Theme: Cyberpunk
  Missing: 4   DockMenuHighlightColor, DockMenuHighlightBrush, DockSplitterColor, DockSplitterBrush
  Orphan:  1   CyberNeonAccentColor
  Color/brush mismatch: 0  |  Merge order: OK
```

Does not validate color aesthetics, auto-apply patches, or check token usage in non-theme XAML (`ui-design` covers that).

## Maintenance

- Adding keys to Dark → regen reference, then `theme-parity.ps1` fires on all other themes to roll the token.
- Promoting token to all themes → add to Dark first, regen, propagate.

