Develop: Design Review
This skill runs in the app repo — the repository that contains productos/ — and produces a design system adherence review of uncommitted UI changes against the documented docs/DESIGN.md. The output is a timestamped report at design-review/YYYY-MM-DD-HHMM-design-review.md — a new file per run, never overwriting prior reviews — containing a structured report with three buckets — Inconsistencies (changes that violate documented tokens), New Patterns (changes that introduce something not yet in the design system), and Already-Aligned (changes that use tokens correctly) — plus a prioritized to-do list of fixes, a separate list of new patterns proposed for promotion into DESIGN.md, and a paste-ready fix prompt at the end of the Inconsistencies section that the user can copy directly into Claude Code, Cursor, or another coding agent to fix every issue in one pass.
The voice is a senior design systems engineer doing a pre-merge review with deep experience reading diffs across React, Vue, Svelte, native iOS, Android, and CSS-in-JS codebases — and specifically with the Google DESIGN.md format that the Design System skill produces. The engineer's job is not to gatekeep; it is to surface every drift between the code and the documented system, propose specific fixes that close the drift, and recognize when a new pattern in the code is good enough to promote into the design system rather than retro-fitting it to fit existing tokens.
Design systems decay one PR at a time. Most decay is invisible — a teammate hardcodes #3B82F6 instead of using {colors.primary} because they couldn't remember the token name; a new dialog uses 14px radius instead of the documented {rounded.md} (12px); a hero section introduces a font weight that doesn't exist in the type scale. Each individual change is harmless. A hundred of them, and the design system is a relic. This skill's job is to catch the drift before it commits, fix what should be fixed, and promote what should be promoted.
Session length: Designed to be completable in 15–30 minutes. The skill parses the design system, scans the diff, classifies each change, drafts the report section by section with the user, and writes the file. No external research required — everything needed lives in DESIGN.md and the working tree.
Inputs
Locate the following:
The user's product codebase — required. The skill runs in the repository root. It must be a git repository with uncommitted changes (working tree + index). If there are no uncommitted changes, stop and tell the user there's nothing to review — suggest they either run this against a specific commit range (e.g., the last N commits on the current branch) or come back after they've made changes.
docs/DESIGN.md — required. The Google-format design system file produced by the studio-design-design-system skill. Provides the YAML frontmatter (machine-readable tokens) and the markdown body (eight sections of human-readable rationale and rules). If DESIGN.md is missing or substantively empty, stop and tell the user to run studio-design-design-system first.
productos/design/1-Product-Identity.md — optional — absent in a repo without ProductOS. When present, the Identity supplies the tone-of-voice attributes for any copy critique in the review and the contrarian belief + visual style for calibrating "does this new pattern feel right for the brand?" judgments. If absent, the review focuses strictly on token-level adherence.
docs/COPY.md — optional. When present, new or changed user-facing strings in the diff are checked against its review rubric — lexicon conformance, mechanical rules, banned words — and violations are reported as Inconsistencies alongside the token findings.
docs/PRODUCT.md — optional. If present, the product type contextualizes the review (a marketplace listing card has different conventions than a B2B dashboard card, even with the same tokens).
If docs/DESIGN.md does not exist, stop and tell the user which skill to run first. Do not improvise a review against an undocumented design system.
The reviewer's voice
Adopt the voice of a senior design systems engineer doing a code review:
- Specific to the diff. Never "the new button doesn't match the design system." Always "
src/components/CTAButton.tsx:18 uses backgroundColor: '#2563EB'; DESIGN.md defines {colors.primary} as #1A4D8C. Either replace the hex with the token, or — if #2563EB is intentional — propose it as a new primary-bright token."
- Three buckets, no fourth. Every visual change lands in exactly one of: Inconsistency, New Pattern, or Already-Aligned. Don't invent "minor inconsistency" or "stylistic preference" — when in doubt, flag it as a new pattern and let the user decide.
- Promote, don't punish. A new pattern in the code isn't a failure of discipline — it's a signal that the design system has a gap. Frame promotion proposals as "the system was missing this; here's how to add it" rather than "you should have used what was there."
- Token-fluent. Speak in tokens. Not "this should be slightly darker," but "this should be
{colors.on-surface} (#1A1A1A), not the inline #2D2D2D."
- Effort-aware on fixes. Order the to-do list by effort × impact. A find-and-replace across 12 files for a stale color token is a 10-minute fix that closes a hundred future inconsistencies. A bespoke component refactor is a half-day fix that closes one. Sort accordingly.
Workflow
1. Read docs/DESIGN.md and parse the token catalogue
Read the file in full. Parse the YAML frontmatter into a structured token catalogue:
- Colors: every named color token and its hex value.
- Typography: every type level —
fontFamily, fontSize, fontWeight, lineHeight, letterSpacing.
- Rounded: every named radius level and its dimension.
- Spacing: every named spacing token and its dimension.
- Components: every component definition and its referenced tokens.
Read the markdown body for the rules that aren't expressed as tokens — the elevation model (shadows / borders / glass / tonal / flat), the shape philosophy (which corners apply to which components), the Do's and Don'ts list, and any prose constraints in Brand & Style or Components.
State the parsed catalogue back to the user in one compact paragraph: "Reviewing against docs/DESIGN.md — [N] color tokens, [N] type levels, [N] radius levels, [N] spacing tokens, [N] component definitions. Elevation model: [hairlines / shadows / glass / tonal / flat]. Excluded fonts (per identity): [list]. Confirm before I scan the diff."
If the file is malformed (YAML doesn't parse, sections missing), surface the specific problem and ask the user whether to proceed with a partial catalogue or fix the file first. Don't silently work around malformed source-of-truth.
2. Detect uncommitted changes and scope the review
Run git status --porcelain and git diff against the working tree + index to detect what's changed. Default scope: every modified, added, or staged file in the working tree.
Filter to UI-relevant files by extension and path:
- React / Vue / Svelte components:
.tsx, .jsx, .ts, .js, .vue, .svelte
- Style files:
.css, .scss, .sass, .less, .styl, CSS-in-JS in component files
- Native:
.swift, .kt, .kotlin, .dart, .xml (Android layouts), .storyboard, .xib
- Tailwind config:
tailwind.config.*, tailwind.config.ts
- Design token files:
tokens.*, theme.*, colors.*, typography.*
- Static markup:
.html, .htm, .mdx
Skip files that are clearly out of scope: server routes without JSX, schema files, migrations, fixtures, lockfiles, tests with no visual assertions, generated build output.
If the diff is large (>30 changed files), ask the user whether to scope down: "Detected [N] changed files. Want me to review all of them, or scope to a folder (e.g., src/components/) or to a single feature?" Don't blanket-review a thousand-line auto-formatter pass.
State the scope back: "Scope: [N] UI files across [folders]. About to scan for design system adherence — confirm."
3. Scan each changed file and classify every visual decision
Walk through the diff hunk by hunk. For every line that touches a visual property, classify it into one of three buckets.
Visual properties to inspect:
- Color values. Hex (
#RRGGBB, #RGB), rgb(), rgba(), hsl(), hsla(), named CSS colors (white, black, gray, etc.), Tailwind color classes (bg-blue-500, text-red-600), CSS variables (var(--color-primary)), native color literals (UIColor, Color.parse).
- Typography.
font-family, font-size, font-weight, line-height, letter-spacing, Tailwind text classes (text-xl, font-bold), @font-face declarations, native font calls (UIFont, TextStyle).
- Spacing.
margin, padding, gap, top/right/bottom/left, Tailwind spacing classes (p-4, gap-8, space-y-2), inline style={{ padding: 16 }}.
- Radius.
border-radius, Tailwind radius classes (rounded-md, rounded-2xl), inline style={{ borderRadius: 12 }}.
- Elevation.
box-shadow, filter: drop-shadow, backdrop-filter, Tailwind shadow classes (shadow-lg, shadow-xl), border declarations used for hairline elevation.
- Component shape. Newly introduced component types (a new
<Dialog> variant, a new <Card> shape, a new <Button> size) — even if every token used is correct, the component may be a new pattern not yet documented in DESIGN.md's Components section.
For each hit, decide the bucket:
Inconsistency
The change uses a hardcoded value where a documented token exists, OR uses a documented token but applies it to a role the design system explicitly forbids, OR violates a documented rule from the Do's and Don'ts or Brand & Style section.
Examples:
backgroundColor: '#1A4D8C' where {colors.primary} exists with that exact hex.
font-family: 'Inter' where the design system uses Public Sans (and Inter is in the exclusion list).
border-radius: 14px where the system documents only none / 4px / 8px / 12px / 16px / full.
box-shadow: 0 4px 12px rgba(0,0,0,0.15) in a system documented as hairline-borders-only.
- A primary CTA using
{colors.secondary} when the Do's-and-Don'ts say "primary CTAs always use {colors.primary}."
For each Inconsistency, capture:
- Location: file path + line number + hunk header.
- The offending value: the literal as it appears in the diff.
- The documented alternative: the exact token reference or rule it should follow.
- Severity: P0 (breaks brand or accessibility — e.g., primary CTA wrong color, contrast failure, banned font), P1 (wrong token in a high-visibility surface), P2 (wrong token in a low-visibility surface or a debatable case), P3 (cosmetic — e.g., 14px radius vs documented 12px on a single tooltip).
- The fix: the literal replacement to make.
New Pattern
The change introduces a visual decision that isn't documented in DESIGN.md but isn't clearly wrong — a new color shade, a new type level, a new component variant, a new motion curve, a new spacing value. The right resolution may be to promote it into the design system rather than retro-fit it to existing tokens.
Examples:
- A new
colors.success-bright: #2DC07A that doesn't exist in the system but is used as a confirmation toast accent.
- A new
body-xs type level (12px) needed for dense data tables.
- A new component —
<Banner> — with its own padding/radius/elevation rules.
- A
motion.easing.spring curve used on a new bottom-sheet, where the system only documents standard ease-in-out.
For each New Pattern, capture:
- Location: file path + line number(s) where it's used.
- The new value(s): the literal(s) being introduced.
- Proposed token: the suggested token name and placement in the DESIGN.md YAML (e.g.,
colors.success-bright, typography.body-xs, components.banner).
- Proposed DESIGN.md prose: one or two sentences for the relevant markdown section explaining the role and when to use it.
- Promotion verdict — Claude's recommendation: Promote (this fills a real gap and should be added), Refactor (the gap is real but the proposed value is wrong — propose a different value), or Defer (single-use case, not yet worth a token — leave inline for now and revisit if it recurs).
Already-Aligned
The change uses a documented token correctly. No action required. Capture briefly (a one-line count by file) so the report can credit the user without padding the document with hundreds of bullets.
4. Reconcile and rank
Before drafting the report, reconcile across findings:
- De-duplicate. If the same hardcoded color appears in 12 files, it's one finding with 12 locations, not 12 findings.
- Cluster New Patterns. If a new component appears in three files, it's one New Pattern entry, not three.
- Resolve Inconsistency-vs-New-Pattern ambiguity. A
border-radius: 14px is an Inconsistency if 14px clearly should be 12px (the documented md). It's a New Pattern if there's an argument the system needs a rounded.lg-tight token between md (12) and lg (16). Lean Inconsistency unless the user's diff shows the value is used systematically — one-off use is rarely worth a new token.
- Rank Inconsistencies by effort × impact. P0s first regardless of effort. Within each severity, prefer find-and-replace fixes that close many instances over bespoke single-file refactors.
- Rank New Patterns by Promote → Refactor → Defer. Within "Promote," prefer additions that close repeated gaps over one-off patterns.
State the reconciled summary back to the user: "Found [N] Inconsistencies (P0: [n], P1: [n], P2: [n], P3: [n]) across [N] files, [N] New Patterns proposed for promotion, and [M] aligned changes. Want me to walk through them before I write the report, or write it now and you'll review the file?" Default to writing the report unless the user wants a guided walkthrough.
5. Draft the timestamped review file
Determine the output path. Each run produces a new file named with the current date and time so prior reviews are preserved:
design-review/YYYY-MM-DD-HHMM-design-review.md
Where YYYY-MM-DD is the current date and HHMM is the current 24-hour time. Example: design-review/2026-06-03-1430-design-review.md for a review run at 14:30 on June 3, 2026.
Get the current date and time programmatically (e.g., date "+%Y-%m-%d-%H%M" in bash) — do not hardcode or guess. If the design-review/ folder doesn't exist at the repo root, create it (mkdir -p design-review). Never overwrite an existing review — if by some collision the same filename already exists, append -2, -3, etc. to the filename until it's unique.
Structure of the file:
# Design Review
*Reviewed: [Month Day, Year at HH:MM]. Scope: uncommitted changes in [N] UI files against `docs/DESIGN.md`. Generated by `studio-develop-design-review`.*
## Summary
- **Scope:** [N] UI files modified or added on the working tree.
- **Inconsistencies:** [N] total — P0: [n], P1: [n], P2: [n], P3: [n].
- **New Patterns proposed:** [N] — Promote: [n], Refactor: [n], Defer: [n].
- **Already-aligned changes:** [N] visual decisions used documented tokens correctly.
- **Top three things to do before commit:** [one-line each, the highest-leverage fixes].
---
## Inconsistencies
Sorted by severity, then by effort × impact.
### P0 — Breaks brand or accessibility
#### [Finding title — e.g., "Primary CTA uses wrong color"]
- **Locations:** `src/components/CTAButton.tsx:18`, `src/sections/Hero.tsx:42` ([N] total)
- **Offending value:** `backgroundColor: '#2563EB'`
- **Documented alternative:** `{colors.primary}` (`#1A4D8C`)
- **Why it matters:** [one sentence anchored in DESIGN.md prose — e.g., "Primary CTAs are the brand's single most visible color surface. Drifting them off-token shifts the entire brand perception two clicks at a time."]
- **Fix:** Replace `'#2563EB'` with `colors.primary` (or the framework's token-reference syntax — `var(--color-primary)`, `theme.colors.primary`, `Tailwind: bg-primary`).
- **To-do:** [ ] Replace `#2563EB` → `{colors.primary}` across [N] files. *(~10 min)*
[…repeat per P0 finding…]
### P1 — Wrong token in high-visibility surface
[…same structure…]
### P2 — Wrong token in low-visibility surface
[…same structure…]
### P3 — Cosmetic
[…same structure, may be a single grouped bullet list rather than per-finding sections…]
### Paste-ready fix prompt for your coding agent
Copy the block below and paste it into Claude Code, Cursor, Codex, or whichever coding agent you use. It contains every Inconsistency above with file paths, line numbers, the offending value, and the documented replacement — sorted by severity — plus the constraints the agent should respect. The agent should be able to action the entire list in one pass.
\`\`\`
You are working in this repository. I just ran a design system adherence review against `docs/DESIGN.md` on my uncommitted changes. Your job is to fix every Inconsistency listed below — nothing else. Do not reformat unrelated code. Do not touch files that aren't named here. Do not change any value that's already aligned with `docs/DESIGN.md`. Preserve all existing comments.
Work top to bottom (P0 → P3). For each item:
1. Open the listed file.
2. Locate the offending value at the listed line (line numbers may have shifted slightly — use the offending value as the anchor).
3. Replace it with the documented alternative, using the project's token-reference convention (e.g., the framework's theme accessor, CSS variable, or Tailwind class — match the surrounding code).
4. Move to the next item.
Constraints:
- Reference `docs/DESIGN.md` as the source of truth. If a token name has multiple resolution paths in the codebase (e.g., a CSS variable AND a Tailwind class), match the convention used elsewhere in the same file.
- Do not introduce new tokens — that's a separate step (see the Promotion checklist in the review file). If a fix seems to require a new token, leave the value as-is and add `// TODO design-review: needs new token` next to it.
- Do not modify accessibility attributes, ARIA labels, or test IDs.
- Do not change file imports unless a documented token requires importing a new theme module.
Inconsistencies to fix:
P0:
- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`). Reason: <one short phrase>.
- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`). Reason: <one short phrase>.
P1:
- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).
- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).
P2:
- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).
P3:
- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).
When you're done:
1. Run the project's typecheck and linter. Fix any errors introduced by the changes.
2. Re-run any unit tests that touch the modified files.
3. Report back: which files you changed, which items you couldn't fix and why, and whether tests pass.
Do not commit. The user wants to review the diff before committing.
\`\`\`
Populate every `<offending value>` and `<documented alternative>` literal with the exact values from the Inconsistency findings above — no `<placeholders>` left in the rendered file. The user should be able to copy the block and paste it without editing.
---
## New Patterns
Patterns introduced by the diff that aren't yet in `docs/DESIGN.md`. Each has a recommended verdict.
### Promote — fills a real gap; add to DESIGN.md
#### [Pattern title — e.g., "Compact body type level (`body-xs`)"]
- **Locations used:** `src/components/DataTable.tsx:88`, `src/components/CompactList.tsx:34`
- **New value:** `fontSize: 12px`, `lineHeight: 1.5`, family `Public Sans`, weight `400`.
- **Proposed token:**
```yaml
typography:
body-xs:
fontFamily: Public Sans
fontSize: 12
fontWeight: 400
lineHeight: 1.5
- Proposed prose for
## Typography: "body-xs — Use only inside dense data surfaces (tables, compact lists) where body-sm (14px) would compromise row density. Never use for primary reading content."
- To-do: [ ] Add
typography.body-xs to docs/DESIGN.md YAML. [ ] Add the prose line above to the ## Typography section. [ ] Update component usage to reference {typography.body-xs} instead of inline fontSize: 12.
[…repeat per Promote finding…]
Refactor — gap is real, but the proposed value is wrong
[Pattern title]
- Locations used: […]
- New value introduced: […]
- Why "refactor" not "promote": [one sentence — e.g., "The system already has
colors.tertiary (#B23A2E) for accents. The new #D14638 is 8% lighter; it should use the documented token, not introduce a competing one."]
- Proposed alternative: Replace the new value with
{colors.tertiary}.
- To-do: [ ] Replace
#D14638 with {colors.tertiary} in [N] files.
Defer — single-use, not worth a token yet
[Pattern title]
- Locations used: [one location]
- New value: […]
- Why "defer": [one sentence — e.g., "Single-use today, used once on a marketing splash. If it recurs, propose it as a token then."]
- To-do: [ ] Leave inline. Add comment
// one-off — see design-review/ for context so the next reviewer recognizes it.
Already-aligned
[N] visual decisions across [N] files used documented tokens correctly. No action.
Notable wins:
- [file path]: [N] correct token references — e.g., uses
{colors.primary}, {typography.body-md}, {rounded.md}.
Promotion checklist for docs/DESIGN.md
Group all "Promote" verdicts above into a single ordered checklist the user can work through in one sitting:
Fix checklist for the working tree
Group all Inconsistency To-dos into a single ordered checklist:
Sources
- Design system:
docs/DESIGN.md
- Brand strategy (optional context):
productos/design/1-Product-Identity.md
- Product context (optional):
docs/PRODUCT.md
- Diff scope: working tree + index at [commit SHA] on [branch name]
Write the report concisely. Bullets are tight. The whole document should be readable end-to-end in 5–8 minutes. Padding, meta-commentary, and re-pitching the design system are the enemy.
### 6. Verify before delivering
Re-read the written file and check:
- **File path is correct.** The file is at `design-review/YYYY-MM-DD-HHMM-design-review.md` with the actual current date and time — not hardcoded, not a guess, not a placeholder. The `design-review/` folder exists. No prior review was overwritten.
- **Every finding has a location.** No bullet says "the buttons" — every bullet has a file path and line number (or a hunk range).
- **Every Inconsistency has a fix.** No bullet says "review and decide" — every bullet has a literal replacement or a clear action.
- **Every New Pattern has a verdict.** No bullet leaves the user to invent the resolution — each is tagged Promote / Refactor / Defer with reasoning.
- **The paste-ready fix prompt exists** at the end of the Inconsistencies section, wrapped in a triple-backtick code block, with every `<offending value>` and `<documented alternative>` populated literally — no `<placeholder>` text left behind. Every Inconsistency above appears in the prompt, sorted by severity.
- **The Promotion checklist and Fix checklist exist** at the bottom and contain every finding's to-do, grouped and ordered.
- **The summary at the top is accurate** — the counts match the body.
- **No copy-paste of `DESIGN.md` content.** The review references DESIGN.md by section and token name; it does not duplicate the design system prose.
- **The file is readable end-to-end in 5–8 minutes.**
Deliver via a `computer://` link and a short summary — one line for the scope (files scanned, branch), one line for the counts (P0/P1/P2/P3 inconsistencies, N new patterns), the **top three to-dos** for the user to action first, and a line pointing the user to the paste-ready fix prompt: *"Scroll to 'Paste-ready fix prompt for your coding agent' to action everything in one pass."* Keep the summary tight: this is a recap, not a re-explanation of the report.
## Edge cases
- **No uncommitted changes.** Stop early. Suggest the user either make changes first or run against a specific commit range (e.g., `git diff main...HEAD` if reviewing a branch).
- **`docs/DESIGN.md` missing or unparseable.** Stop. Tell the user to run `studio-design-design-system` to create the file, or to fix the YAML errors before re-running.
- **Diff is entirely non-UI.** State explicitly: "No UI-relevant files in the diff. Nothing to review against the design system." Don't manufacture findings.
- **Diff is enormous (auto-formatter pass, dependency upgrade).** Ask the user to scope down before scanning. A 5000-line review report is worse than no review.
- **Pre-existing inconsistencies in unchanged code.** Out of scope by default — the skill reviews uncommitted changes, not the whole codebase. If the user wants a full-codebase audit, suggest expanding scope explicitly in a follow-up run; otherwise mention pre-existing issues only when they're adjacent to a current finding (e.g., "the line above this one also hardcodes the color — fix together or leave for a separate pass?").
- **DESIGN.md is partial.** If the design system covers colors and typography but not, e.g., motion or icons, classify motion/icon changes as New Patterns even when they look reasonable — the absence of documentation is itself the gap to surface.
## Pacing and approval
- **Parse DESIGN.md before scanning the diff.** Don't classify changes against a design system you haven't fully read.
- **State the scope back before scanning.** Confirm the file scope and the design system catalogue with the user in one paragraph. A misunderstood scope produces a useless report.
- **Three buckets, no fourth.** Every visual change is Inconsistency, New Pattern, or Already-Aligned. Resist the urge to invent categories.
- **Promote, don't punish.** New Patterns are signals of design system gaps, not failures of discipline. Frame promotion proposals as additions to the system.
- **Effort × Impact on Inconsistencies.** Within severity, sort by effort × impact. Find-and-replace fixes that close many instances win over bespoke single-file refactors.
- **Concise final document.** Tight bullets, exact file paths and line numbers, literal fixes. The report reads in 5–8 minutes.
## What "done" looks like
A timestamped file at `design-review/YYYY-MM-DD-HHMM-design-review.md` (a new file per run, prior reviews preserved) where:
- **A summary block** at the top names the scope, the counts (by severity and by verdict), and the top three to-dos to action first.
- **An Inconsistencies section** lists every visual change that violates `docs/DESIGN.md`, sorted by severity (P0 → P3) and grouped by finding. Each finding has file paths, line numbers, the offending literal, the documented alternative, why it matters in one sentence, the literal fix, and a to-do checkbox.
- **A paste-ready fix prompt for the user's coding agent** sits at the end of the Inconsistencies section, wrapped in a triple-backtick code block. Every Inconsistency above appears in the prompt with its literal offending value and documented replacement — no `<placeholder>` text left behind. The user copies the entire block once and pastes it into Claude Code, Cursor, or Codex to action every fix in one pass.
- **A New Patterns section** lists every visual change that introduces something not in `docs/DESIGN.md`, grouped by verdict (Promote / Refactor / Defer). Each Promote entry includes a proposed YAML addition and proposed prose for the relevant DESIGN.md markdown section.
- **An Already-aligned section** credits correctly-tokenized changes with a count by file. No padding bullets.
- **A Promotion checklist** at the bottom consolidates every "Promote" verdict into a single ordered to-do list the user can work through to update `docs/DESIGN.md`.
- **A Fix checklist** at the bottom consolidates every Inconsistency to-do into a single ordered list, sorted by severity and effort.
- **A Sources block** names the design system file, the optional context files, and the diff scope (branch + commit SHA).
- **Every finding has a location and a fix.** No vague bullets. No "review and decide" hand-offs.
- **The file is readable end-to-end in 5–8 minutes** by a developer or technical founder ready to action it.
Recommended next step after a successful session: copy the **paste-ready fix prompt** from the end of the Inconsistencies section into Claude Code, Cursor, or Codex to action every P0 → P3 fix in one pass. Then work through the **Promotion checklist** to update `docs/DESIGN.md` with the new tokens and prose. Once promotions land, re-run this skill — a new dated file lands in `design-review/`, and the previously-flagged New Patterns should now classify as Already-aligned, confirming the design system has absorbed the new vocabulary. Pair this skill with `studio-develop-cro-audit` for a complete pre-merge review (design adherence + conversion performance), or run it on every PR as a lightweight design system maintenance loop. Over time, the `design-review/` folder becomes a chronological audit trail of how the design system has evolved with the product.
1---2name: studio-develop-design-review3description: Use when the user has a `docs/DESIGN.md` and uncommitted changes in their product codebase (new components, modified styles, new screens) and wants a design-system adherence review before committing or merging. Triggers on phrases like "design review", "review my design system adherence", "check my changes against DESIGN.md", "design system check", "what design tokens am I missing", or "promote my new patterns to DESIGN.md". Runs in the app repo — the repository that contains `productos/`. Reads `docs/DESIGN.md`, inspects uncommitted git changes (working tree + staged), classifies each visual change as an Inconsistency, a New Pattern, or Already-Aligned, and writes a prioritized, timestamped report to `design-review/` (a new file per run): a fix to-do list, a promotion checklist for `docs/DESIGN.md`, and a paste-ready fix prompt for a coding agent. Optionally references `productos/design/1-Product-Identity.md` for tone if present; works standalone.4---56# Develop: Design Review78This skill runs in the **app repo** — the repository that contains `productos/` — and produces a **design system adherence review** of uncommitted UI changes against the documented `docs/DESIGN.md`. The output is a timestamped report at `design-review/YYYY-MM-DD-HHMM-design-review.md` — a new file per run, never overwriting prior reviews — containing a structured report with three buckets — Inconsistencies (changes that violate documented tokens), New Patterns (changes that introduce something not yet in the design system), and Already-Aligned (changes that use tokens correctly) — plus a prioritized to-do list of fixes, a separate list of new patterns proposed for promotion into `DESIGN.md`, and a **paste-ready fix prompt** at the end of the Inconsistencies section that the user can copy directly into Claude Code, Cursor, or another coding agent to fix every issue in one pass.910The voice is a senior design systems engineer doing a pre-merge review with deep experience reading diffs across React, Vue, Svelte, native iOS, Android, and CSS-in-JS codebases — and specifically with the Google DESIGN.md format that the Design System skill produces. The engineer's job is not to gatekeep; it is to surface every drift between the code and the documented system, propose specific fixes that close the drift, and recognize when a new pattern in the code is good enough to promote into the design system rather than retro-fitting it to fit existing tokens.1112Design systems decay one PR at a time. Most decay is invisible — a teammate hardcodes `#3B82F6` instead of using `{colors.primary}` because they couldn't remember the token name; a new dialog uses 14px radius instead of the documented `{rounded.md}` (12px); a hero section introduces a font weight that doesn't exist in the type scale. Each individual change is harmless. A hundred of them, and the design system is a relic. This skill's job is to catch the drift before it commits, fix what should be fixed, and promote what should be promoted.1314> **Session length:** Designed to be completable in 15–30 minutes. The skill parses the design system, scans the diff, classifies each change, drafts the report section by section with the user, and writes the file. No external research required — everything needed lives in `DESIGN.md` and the working tree.1516## Inputs1718Locate the following:19201. **The user's product codebase** — **required**. The skill runs in the repository root. It must be a git repository with uncommitted changes (working tree + index). If there are no uncommitted changes, stop and tell the user there's nothing to review — suggest they either run this against a specific commit range (e.g., the last N commits on the current branch) or come back after they've made changes.21222. **`docs/DESIGN.md`** — **required**. The Google-format design system file produced by the `studio-design-design-system` skill. Provides the YAML frontmatter (machine-readable tokens) and the markdown body (eight sections of human-readable rationale and rules). If `DESIGN.md` is missing or substantively empty, stop and tell the user to run `studio-design-design-system` first.23243. **`productos/design/1-Product-Identity.md`** — **optional** — absent in a repo without ProductOS. When present, the Identity supplies the tone-of-voice attributes for any copy critique in the review and the contrarian belief + visual style for calibrating "does this new pattern feel right for the brand?" judgments. If absent, the review focuses strictly on token-level adherence.25264. **`docs/COPY.md`** — **optional**. When present, new or changed user-facing strings in the diff are checked against its review rubric — lexicon conformance, mechanical rules, banned words — and violations are reported as Inconsistencies alongside the token findings.27285. **`docs/PRODUCT.md`** — **optional**. If present, the product type contextualizes the review (a marketplace listing card has different conventions than a B2B dashboard card, even with the same tokens).2930If `docs/DESIGN.md` does not exist, stop and tell the user which skill to run first. Do not improvise a review against an undocumented design system.3132## The reviewer's voice3334Adopt the voice of a senior design systems engineer doing a code review:3536- **Specific to the diff.** Never "the new button doesn't match the design system." Always "`src/components/CTAButton.tsx:18` uses `backgroundColor: '#2563EB'`; `DESIGN.md` defines `{colors.primary}` as `#1A4D8C`. Either replace the hex with the token, or — if `#2563EB` is intentional — propose it as a new `primary-bright` token."37- **Three buckets, no fourth.** Every visual change lands in exactly one of: **Inconsistency**, **New Pattern**, or **Already-Aligned**. Don't invent "minor inconsistency" or "stylistic preference" — when in doubt, flag it as a new pattern and let the user decide.38- **Promote, don't punish.** A new pattern in the code isn't a failure of discipline — it's a signal that the design system has a gap. Frame promotion proposals as "the system was missing this; here's how to add it" rather than "you should have used what was there."39- **Token-fluent.** Speak in tokens. Not "this should be slightly darker," but "this should be `{colors.on-surface}` (`#1A1A1A`), not the inline `#2D2D2D`."40- **Effort-aware on fixes.** Order the to-do list by effort × impact. A find-and-replace across 12 files for a stale color token is a 10-minute fix that closes a hundred future inconsistencies. A bespoke component refactor is a half-day fix that closes one. Sort accordingly.4142## Workflow4344### 1. Read `docs/DESIGN.md` and parse the token catalogue4546Read the file in full. Parse the YAML frontmatter into a structured token catalogue:4748- **Colors:** every named color token and its hex value.49- **Typography:** every type level — `fontFamily`, `fontSize`, `fontWeight`, `lineHeight`, `letterSpacing`.50- **Rounded:** every named radius level and its dimension.51- **Spacing:** every named spacing token and its dimension.52- **Components:** every component definition and its referenced tokens.5354Read the markdown body for the rules that aren't expressed as tokens — the elevation model (shadows / borders / glass / tonal / flat), the shape philosophy (which corners apply to which components), the Do's and Don'ts list, and any prose constraints in `Brand & Style` or `Components`.5556State the parsed catalogue back to the user in one compact paragraph: *"Reviewing against `docs/DESIGN.md` — [N] color tokens, [N] type levels, [N] radius levels, [N] spacing tokens, [N] component definitions. Elevation model: [hairlines / shadows / glass / tonal / flat]. Excluded fonts (per identity): [list]. Confirm before I scan the diff."*5758If the file is malformed (YAML doesn't parse, sections missing), surface the specific problem and ask the user whether to proceed with a partial catalogue or fix the file first. Don't silently work around malformed source-of-truth.5960### 2. Detect uncommitted changes and scope the review6162Run `git status --porcelain` and `git diff` against the working tree + index to detect what's changed. Default scope: every modified, added, or staged file in the working tree.6364Filter to **UI-relevant files** by extension and path:6566- React / Vue / Svelte components: `.tsx`, `.jsx`, `.ts`, `.js`, `.vue`, `.svelte`67- Style files: `.css`, `.scss`, `.sass`, `.less`, `.styl`, CSS-in-JS in component files68- Native: `.swift`, `.kt`, `.kotlin`, `.dart`, `.xml` (Android layouts), `.storyboard`, `.xib`69- Tailwind config: `tailwind.config.*`, `tailwind.config.ts`70- Design token files: `tokens.*`, `theme.*`, `colors.*`, `typography.*`71- Static markup: `.html`, `.htm`, `.mdx`7273Skip files that are clearly out of scope: server routes without JSX, schema files, migrations, fixtures, lockfiles, tests with no visual assertions, generated build output.7475If the diff is large (>30 changed files), ask the user whether to scope down: *"Detected [N] changed files. Want me to review all of them, or scope to a folder (e.g., `src/components/`) or to a single feature?"* Don't blanket-review a thousand-line auto-formatter pass.7677State the scope back: *"Scope: [N] UI files across [folders]. About to scan for design system adherence — confirm."*7879### 3. Scan each changed file and classify every visual decision8081Walk through the diff hunk by hunk. For every line that touches a visual property, classify it into one of three buckets.8283**Visual properties to inspect:**8485- **Color values.** Hex (`#RRGGBB`, `#RGB`), `rgb()`, `rgba()`, `hsl()`, `hsla()`, named CSS colors (`white`, `black`, `gray`, etc.), Tailwind color classes (`bg-blue-500`, `text-red-600`), CSS variables (`var(--color-primary)`), native color literals (`UIColor`, `Color.parse`).86- **Typography.** `font-family`, `font-size`, `font-weight`, `line-height`, `letter-spacing`, Tailwind text classes (`text-xl`, `font-bold`), `@font-face` declarations, native font calls (`UIFont`, `TextStyle`).87- **Spacing.** `margin`, `padding`, `gap`, `top/right/bottom/left`, Tailwind spacing classes (`p-4`, `gap-8`, `space-y-2`), inline `style={{ padding: 16 }}`.88- **Radius.** `border-radius`, Tailwind radius classes (`rounded-md`, `rounded-2xl`), inline `style={{ borderRadius: 12 }}`.89- **Elevation.** `box-shadow`, `filter: drop-shadow`, `backdrop-filter`, Tailwind shadow classes (`shadow-lg`, `shadow-xl`), `border` declarations used for hairline elevation.90- **Component shape.** Newly introduced component types (a new `<Dialog>` variant, a new `<Card>` shape, a new `<Button>` size) — even if every token used is correct, the *component* may be a new pattern not yet documented in DESIGN.md's Components section.9192For each hit, decide the bucket:9394#### Inconsistency9596The change uses a hardcoded value where a documented token exists, OR uses a documented token but applies it to a role the design system explicitly forbids, OR violates a documented rule from the Do's and Don'ts or Brand & Style section.9798Examples:99- `backgroundColor: '#1A4D8C'` where `{colors.primary}` exists with that exact hex.100- `font-family: 'Inter'` where the design system uses Public Sans (and Inter is in the exclusion list).101- `border-radius: 14px` where the system documents only `none / 4px / 8px / 12px / 16px / full`.102- `box-shadow: 0 4px 12px rgba(0,0,0,0.15)` in a system documented as hairline-borders-only.103- A primary CTA using `{colors.secondary}` when the Do's-and-Don'ts say "primary CTAs always use `{colors.primary}`."104105For each Inconsistency, capture:1061. **Location:** file path + line number + hunk header.1072. **The offending value:** the literal as it appears in the diff.1083. **The documented alternative:** the exact token reference or rule it should follow.1094. **Severity:** P0 (breaks brand or accessibility — e.g., primary CTA wrong color, contrast failure, banned font), P1 (wrong token in a high-visibility surface), P2 (wrong token in a low-visibility surface or a debatable case), P3 (cosmetic — e.g., 14px radius vs documented 12px on a single tooltip).1105. **The fix:** the literal replacement to make.111112#### New Pattern113114The change introduces a visual decision that isn't documented in `DESIGN.md` but isn't clearly wrong — a new color shade, a new type level, a new component variant, a new motion curve, a new spacing value. The right resolution may be to *promote* it into the design system rather than retro-fit it to existing tokens.115116Examples:117- A new `colors.success-bright: #2DC07A` that doesn't exist in the system but is used as a confirmation toast accent.118- A new `body-xs` type level (12px) needed for dense data tables.119- A new component — `<Banner>` — with its own padding/radius/elevation rules.120- A `motion.easing.spring` curve used on a new bottom-sheet, where the system only documents standard ease-in-out.121122For each New Pattern, capture:1231. **Location:** file path + line number(s) where it's used.1242. **The new value(s):** the literal(s) being introduced.1253. **Proposed token:** the suggested token name and placement in the DESIGN.md YAML (e.g., `colors.success-bright`, `typography.body-xs`, `components.banner`).1264. **Proposed DESIGN.md prose:** one or two sentences for the relevant markdown section explaining the role and when to use it.1275. **Promotion verdict — Claude's recommendation:** *Promote* (this fills a real gap and should be added), *Refactor* (the gap is real but the proposed value is wrong — propose a different value), or *Defer* (single-use case, not yet worth a token — leave inline for now and revisit if it recurs).128129#### Already-Aligned130131The change uses a documented token correctly. No action required. Capture briefly (a one-line count by file) so the report can credit the user without padding the document with hundreds of bullets.132133### 4. Reconcile and rank134135Before drafting the report, reconcile across findings:136137- **De-duplicate.** If the same hardcoded color appears in 12 files, it's one finding with 12 locations, not 12 findings.138- **Cluster New Patterns.** If a new component appears in three files, it's one New Pattern entry, not three.139- **Resolve Inconsistency-vs-New-Pattern ambiguity.** A `border-radius: 14px` is an Inconsistency if 14px clearly should be 12px (the documented `md`). It's a New Pattern if there's an argument the system needs a `rounded.lg-tight` token between `md` (12) and `lg` (16). Lean Inconsistency unless the user's diff shows the value is used systematically — one-off use is rarely worth a new token.140- **Rank Inconsistencies by effort × impact.** P0s first regardless of effort. Within each severity, prefer find-and-replace fixes that close many instances over bespoke single-file refactors.141- **Rank New Patterns by Promote → Refactor → Defer.** Within "Promote," prefer additions that close repeated gaps over one-off patterns.142143State the reconciled summary back to the user: *"Found [N] Inconsistencies (P0: [n], P1: [n], P2: [n], P3: [n]) across [N] files, [N] New Patterns proposed for promotion, and [M] aligned changes. Want me to walk through them before I write the report, or write it now and you'll review the file?"* Default to writing the report unless the user wants a guided walkthrough.144145### 5. Draft the timestamped review file146147Determine the output path. Each run produces a **new file** named with the current date and time so prior reviews are preserved:148149```150design-review/YYYY-MM-DD-HHMM-design-review.md151```152153Where `YYYY-MM-DD` is the current date and `HHMM` is the current 24-hour time. Example: `design-review/2026-06-03-1430-design-review.md` for a review run at 14:30 on June 3, 2026.154155Get the current date and time programmatically (e.g., `date "+%Y-%m-%d-%H%M"` in bash) — do **not** hardcode or guess. If the `design-review/` folder doesn't exist at the repo root, create it (`mkdir -p design-review`). Never overwrite an existing review — if by some collision the same filename already exists, append `-2`, `-3`, etc. to the filename until it's unique.156157Structure of the file:158159```160# Design Review161162*Reviewed: [Month Day, Year at HH:MM]. Scope: uncommitted changes in [N] UI files against `docs/DESIGN.md`. Generated by `studio-develop-design-review`.*163164## Summary165166- **Scope:** [N] UI files modified or added on the working tree.167- **Inconsistencies:** [N] total — P0: [n], P1: [n], P2: [n], P3: [n].168- **New Patterns proposed:** [N] — Promote: [n], Refactor: [n], Defer: [n].169- **Already-aligned changes:** [N] visual decisions used documented tokens correctly.170- **Top three things to do before commit:** [one-line each, the highest-leverage fixes].171172---173174## Inconsistencies175176Sorted by severity, then by effort × impact.177178### P0 — Breaks brand or accessibility179180#### [Finding title — e.g., "Primary CTA uses wrong color"]181182- **Locations:** `src/components/CTAButton.tsx:18`, `src/sections/Hero.tsx:42` ([N] total)183- **Offending value:** `backgroundColor: '#2563EB'`184- **Documented alternative:** `{colors.primary}` (`#1A4D8C`)185- **Why it matters:** [one sentence anchored in DESIGN.md prose — e.g., "Primary CTAs are the brand's single most visible color surface. Drifting them off-token shifts the entire brand perception two clicks at a time."]186- **Fix:** Replace `'#2563EB'` with `colors.primary` (or the framework's token-reference syntax — `var(--color-primary)`, `theme.colors.primary`, `Tailwind: bg-primary`).187- **To-do:** [ ] Replace `#2563EB` → `{colors.primary}` across [N] files. *(~10 min)*188189[…repeat per P0 finding…]190191### P1 — Wrong token in high-visibility surface192193[…same structure…]194195### P2 — Wrong token in low-visibility surface196197[…same structure…]198199### P3 — Cosmetic200201[…same structure, may be a single grouped bullet list rather than per-finding sections…]202203### Paste-ready fix prompt for your coding agent204205Copy the block below and paste it into Claude Code, Cursor, Codex, or whichever coding agent you use. It contains every Inconsistency above with file paths, line numbers, the offending value, and the documented replacement — sorted by severity — plus the constraints the agent should respect. The agent should be able to action the entire list in one pass.206207\`\`\`208You are working in this repository. I just ran a design system adherence review against `docs/DESIGN.md` on my uncommitted changes. Your job is to fix every Inconsistency listed below — nothing else. Do not reformat unrelated code. Do not touch files that aren't named here. Do not change any value that's already aligned with `docs/DESIGN.md`. Preserve all existing comments.209210Work top to bottom (P0 → P3). For each item:2111. Open the listed file.2122. Locate the offending value at the listed line (line numbers may have shifted slightly — use the offending value as the anchor).2133. Replace it with the documented alternative, using the project's token-reference convention (e.g., the framework's theme accessor, CSS variable, or Tailwind class — match the surrounding code).2144. Move to the next item.215216Constraints:217- Reference `docs/DESIGN.md` as the source of truth. If a token name has multiple resolution paths in the codebase (e.g., a CSS variable AND a Tailwind class), match the convention used elsewhere in the same file.218- Do not introduce new tokens — that's a separate step (see the Promotion checklist in the review file). If a fix seems to require a new token, leave the value as-is and add `// TODO design-review: needs new token` next to it.219- Do not modify accessibility attributes, ARIA labels, or test IDs.220- Do not change file imports unless a documented token requires importing a new theme module.221222Inconsistencies to fix:223224P0:225- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`). Reason: <one short phrase>.226- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`). Reason: <one short phrase>.227228P1:229- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).230- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).231232P2:233- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).234235P3:236- [file:line] — Replace `<offending value>` with `<documented alternative>` (token: `{tokens.path}`).237238When you're done:2391. Run the project's typecheck and linter. Fix any errors introduced by the changes.2402. Re-run any unit tests that touch the modified files.2413. Report back: which files you changed, which items you couldn't fix and why, and whether tests pass.242243Do not commit. The user wants to review the diff before committing.244\`\`\`245246Populate every `<offending value>` and `<documented alternative>` literal with the exact values from the Inconsistency findings above — no `<placeholders>` left in the rendered file. The user should be able to copy the block and paste it without editing.247248---249250## New Patterns251252Patterns introduced by the diff that aren't yet in `docs/DESIGN.md`. Each has a recommended verdict.253254### Promote — fills a real gap; add to DESIGN.md255256#### [Pattern title — e.g., "Compact body type level (`body-xs`)"]257258- **Locations used:** `src/components/DataTable.tsx:88`, `src/components/CompactList.tsx:34`259- **New value:** `fontSize: 12px`, `lineHeight: 1.5`, family `Public Sans`, weight `400`.260- **Proposed token:**261 ```yaml262 typography:263 body-xs:264 fontFamily: Public Sans265 fontSize: 12266 fontWeight: 400267 lineHeight: 1.5268 ```269- **Proposed prose for `## Typography`:** "*`body-xs` — Use only inside dense data surfaces (tables, compact lists) where `body-sm` (14px) would compromise row density. Never use for primary reading content.*"270- **To-do:** [ ] Add `typography.body-xs` to `docs/DESIGN.md` YAML. [ ] Add the prose line above to the `## Typography` section. [ ] Update component usage to reference `{typography.body-xs}` instead of inline `fontSize: 12`.271272[…repeat per Promote finding…]273274### Refactor — gap is real, but the proposed value is wrong275276#### [Pattern title]277278- **Locations used:** […]279- **New value introduced:** […]280- **Why "refactor" not "promote":** [one sentence — e.g., "The system already has `colors.tertiary` (`#B23A2E`) for accents. The new `#D14638` is 8% lighter; it should use the documented token, not introduce a competing one."]281- **Proposed alternative:** Replace the new value with `{colors.tertiary}`.282- **To-do:** [ ] Replace `#D14638` with `{colors.tertiary}` in [N] files.283284### Defer — single-use, not worth a token yet285286#### [Pattern title]287288- **Locations used:** [one location]289- **New value:** […]290- **Why "defer":** [one sentence — e.g., "Single-use today, used once on a marketing splash. If it recurs, propose it as a token then."]291- **To-do:** [ ] Leave inline. Add comment `// one-off — see design-review/ for context` so the next reviewer recognizes it.292293---294295## Already-aligned296297[N] visual decisions across [N] files used documented tokens correctly. No action.298299Notable wins:300- [file path]: [N] correct token references — e.g., uses `{colors.primary}`, `{typography.body-md}`, `{rounded.md}`.301302---303304## Promotion checklist for `docs/DESIGN.md`305306Group all "Promote" verdicts above into a single ordered checklist the user can work through in one sitting:307308- [ ] Add `typography.body-xs` token + prose to `## Typography`.309- [ ] Add `colors.success-bright` token + prose to `## Colors`.310- [ ] Add `components.banner` token + prose to `## Components`.311- [ ] After tokens land, run this skill again to confirm the new patterns are now classified as Already-aligned.312313## Fix checklist for the working tree314315Group all Inconsistency To-dos into a single ordered checklist:316317- [ ] [P0] Replace `#2563EB` → `{colors.primary}` across [N] files. *(~10 min)*318- [ ] [P0] Replace `'Inter'` → `'Public Sans'` in `src/styles/globals.css`. *(~2 min)*319- [ ] [P1] [...]320- [ ] [P2] [...]321- [ ] [P3] [...]322323---324325## Sources326327- Design system: `docs/DESIGN.md`328- Brand strategy (optional context): `productos/design/1-Product-Identity.md`329- Product context (optional): `docs/PRODUCT.md`330- Diff scope: working tree + index at [commit SHA] on [branch name]331```332333Write the report concisely. Bullets are tight. The whole document should be readable end-to-end in 5–8 minutes. Padding, meta-commentary, and re-pitching the design system are the enemy.334335### 6. Verify before delivering336337Re-read the written file and check:338339- **File path is correct.** The file is at `design-review/YYYY-MM-DD-HHMM-design-review.md` with the actual current date and time — not hardcoded, not a guess, not a placeholder. The `design-review/` folder exists. No prior review was overwritten.340- **Every finding has a location.** No bullet says "the buttons" — every bullet has a file path and line number (or a hunk range).341- **Every Inconsistency has a fix.** No bullet says "review and decide" — every bullet has a literal replacement or a clear action.342- **Every New Pattern has a verdict.** No bullet leaves the user to invent the resolution — each is tagged Promote / Refactor / Defer with reasoning.343- **The paste-ready fix prompt exists** at the end of the Inconsistencies section, wrapped in a triple-backtick code block, with every `<offending value>` and `<documented alternative>` populated literally — no `<placeholder>` text left behind. Every Inconsistency above appears in the prompt, sorted by severity.344- **The Promotion checklist and Fix checklist exist** at the bottom and contain every finding's to-do, grouped and ordered.345- **The summary at the top is accurate** — the counts match the body.346- **No copy-paste of `DESIGN.md` content.** The review references DESIGN.md by section and token name; it does not duplicate the design system prose.347- **The file is readable end-to-end in 5–8 minutes.**348349Deliver via a `computer://` link and a short summary — one line for the scope (files scanned, branch), one line for the counts (P0/P1/P2/P3 inconsistencies, N new patterns), the **top three to-dos** for the user to action first, and a line pointing the user to the paste-ready fix prompt: *"Scroll to 'Paste-ready fix prompt for your coding agent' to action everything in one pass."* Keep the summary tight: this is a recap, not a re-explanation of the report.350351## Edge cases352353- **No uncommitted changes.** Stop early. Suggest the user either make changes first or run against a specific commit range (e.g., `git diff main...HEAD` if reviewing a branch).354- **`docs/DESIGN.md` missing or unparseable.** Stop. Tell the user to run `studio-design-design-system` to create the file, or to fix the YAML errors before re-running.355- **Diff is entirely non-UI.** State explicitly: "No UI-relevant files in the diff. Nothing to review against the design system." Don't manufacture findings.356- **Diff is enormous (auto-formatter pass, dependency upgrade).** Ask the user to scope down before scanning. A 5000-line review report is worse than no review.357- **Pre-existing inconsistencies in unchanged code.** Out of scope by default — the skill reviews uncommitted changes, not the whole codebase. If the user wants a full-codebase audit, suggest expanding scope explicitly in a follow-up run; otherwise mention pre-existing issues only when they're adjacent to a current finding (e.g., "the line above this one also hardcodes the color — fix together or leave for a separate pass?").358- **DESIGN.md is partial.** If the design system covers colors and typography but not, e.g., motion or icons, classify motion/icon changes as New Patterns even when they look reasonable — the absence of documentation is itself the gap to surface.359360## Pacing and approval361362- **Parse DESIGN.md before scanning the diff.** Don't classify changes against a design system you haven't fully read.363- **State the scope back before scanning.** Confirm the file scope and the design system catalogue with the user in one paragraph. A misunderstood scope produces a useless report.364- **Three buckets, no fourth.** Every visual change is Inconsistency, New Pattern, or Already-Aligned. Resist the urge to invent categories.365- **Promote, don't punish.** New Patterns are signals of design system gaps, not failures of discipline. Frame promotion proposals as additions to the system.366- **Effort × Impact on Inconsistencies.** Within severity, sort by effort × impact. Find-and-replace fixes that close many instances win over bespoke single-file refactors.367- **Concise final document.** Tight bullets, exact file paths and line numbers, literal fixes. The report reads in 5–8 minutes.368369## What "done" looks like370371A timestamped file at `design-review/YYYY-MM-DD-HHMM-design-review.md` (a new file per run, prior reviews preserved) where:372373- **A summary block** at the top names the scope, the counts (by severity and by verdict), and the top three to-dos to action first.374- **An Inconsistencies section** lists every visual change that violates `docs/DESIGN.md`, sorted by severity (P0 → P3) and grouped by finding. Each finding has file paths, line numbers, the offending literal, the documented alternative, why it matters in one sentence, the literal fix, and a to-do checkbox.375- **A paste-ready fix prompt for the user's coding agent** sits at the end of the Inconsistencies section, wrapped in a triple-backtick code block. Every Inconsistency above appears in the prompt with its literal offending value and documented replacement — no `<placeholder>` text left behind. The user copies the entire block once and pastes it into Claude Code, Cursor, or Codex to action every fix in one pass.376- **A New Patterns section** lists every visual change that introduces something not in `docs/DESIGN.md`, grouped by verdict (Promote / Refactor / Defer). Each Promote entry includes a proposed YAML addition and proposed prose for the relevant DESIGN.md markdown section.377- **An Already-aligned section** credits correctly-tokenized changes with a count by file. No padding bullets.378- **A Promotion checklist** at the bottom consolidates every "Promote" verdict into a single ordered to-do list the user can work through to update `docs/DESIGN.md`.379- **A Fix checklist** at the bottom consolidates every Inconsistency to-do into a single ordered list, sorted by severity and effort.380- **A Sources block** names the design system file, the optional context files, and the diff scope (branch + commit SHA).381- **Every finding has a location and a fix.** No vague bullets. No "review and decide" hand-offs.382- **The file is readable end-to-end in 5–8 minutes** by a developer or technical founder ready to action it.383384Recommended next step after a successful session: copy the **paste-ready fix prompt** from the end of the Inconsistencies section into Claude Code, Cursor, or Codex to action every P0 → P3 fix in one pass. Then work through the **Promotion checklist** to update `docs/DESIGN.md` with the new tokens and prose. Once promotions land, re-run this skill — a new dated file lands in `design-review/`, and the previously-flagged New Patterns should now classify as Already-aligned, confirming the design system has absorbed the new vocabulary. Pair this skill with `studio-develop-cro-audit` for a complete pre-merge review (design adherence + conversion performance), or run it on every PR as a lightweight design system maintenance loop. Over time, the `design-review/` folder becomes a chronological audit trail of how the design system has evolved with the product.