@hegemonart/get-design-done 1.14.7 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +14 -2
  3. package/CHANGELOG.md +84 -0
  4. package/README.md +18 -0
  5. package/SKILL.md +2 -0
  6. package/agents/a11y-mapper.md +25 -0
  7. package/agents/design-auditor.md +92 -8
  8. package/agents/design-context-builder.md +6 -0
  9. package/agents/design-executor.md +5 -2
  10. package/agents/design-pattern-mapper.md +2 -0
  11. package/agents/design-start-writer.md +221 -0
  12. package/agents/design-verifier.md +11 -0
  13. package/agents/motion-mapper.md +45 -0
  14. package/agents/token-mapper.md +36 -0
  15. package/agents/visual-hierarchy-mapper.md +29 -0
  16. package/hooks/first-run-nudge.sh +82 -0
  17. package/hooks/hooks.json +8 -0
  18. package/package.json +14 -2
  19. package/reference/anti-patterns.md +69 -0
  20. package/reference/audit-scoring.md +34 -3
  21. package/reference/brand-voice.md +199 -0
  22. package/reference/checklists.md +30 -3
  23. package/reference/data/google-fonts.csv +51 -0
  24. package/reference/data/palettes.csv +41 -0
  25. package/reference/data/styles.csv +39 -0
  26. package/reference/design-system-guidance.md +177 -0
  27. package/reference/design-systems-catalog.md +151 -0
  28. package/reference/framer-motion-patterns.md +411 -0
  29. package/reference/gestalt.md +219 -0
  30. package/reference/iconography.md +231 -0
  31. package/reference/motion.md +102 -0
  32. package/reference/palette-catalog.md +82 -0
  33. package/reference/performance.md +304 -0
  34. package/reference/registry.json +257 -27
  35. package/reference/review-format.md +2 -2
  36. package/reference/start-interview.md +84 -0
  37. package/reference/style-vocabulary.md +62 -0
  38. package/reference/surfaces.md +114 -0
  39. package/reference/typography.md +80 -0
  40. package/reference/visual-hierarchy-layout.md +306 -0
  41. package/scripts/lib/detect-ui-root.cjs +187 -0
  42. package/scripts/lib/start-findings-engine.cjs +405 -0
  43. package/skills/start/SKILL.md +166 -0
@@ -0,0 +1,304 @@
1
+ # Performance — Reference Guide
2
+
3
+ Performance is a design constraint, not an engineering afterthought. Every millisecond of delay in LCP is a measurable reduction in conversion rate; every layout shift during page load erodes user trust. This reference establishes authoritative performance budgets, measurement targets, and implementation rules for all project types handled by the get-design-done framework.
4
+
5
+ ---
6
+
7
+ ## 1. Core Web Vitals Targets by Project Type
8
+
9
+ Google's Core Web Vitals are the industry-standard performance metrics for user experience. They measure loading (LCP), interactivity (INP), and visual stability (CLS). Understanding the thresholds and how they vary by project type is essential for setting appropriate design constraints during the planning phase.
10
+
11
+ ### Universal Thresholds
12
+
13
+ | Metric | Good | Needs Improvement | Poor |
14
+ |--------|------|-------------------|------|
15
+ | LCP (Largest Contentful Paint) | ≤2.5s | 2.5–4.0s | >4.0s |
16
+ | INP (Interaction to Next Paint) | ≤200ms | 200–500ms | >500ms |
17
+ | CLS (Cumulative Layout Shift) | ≤0.1 | 0.1–0.25 | >0.25 |
18
+ | TTFB (Time to First Byte) | ≤800ms | 800ms–1.8s | >1.8s |
19
+
20
+ ### SaaS / Dashboard Applications
21
+
22
+ Authenticated dashboard applications carry more JavaScript, more real-time data subscriptions, and more complex component trees than public pages. LCP tolerance is relaxed to ≤3.0s because users have a high motivation to wait (they are trying to accomplish a work task) and the LCP element is often a data-heavy chart or table that legitimately takes time to render. However, INP must be held to ≤200ms strictly — dashboards involve dense interaction patterns (filter, sort, paginate, drill down) and a sluggish response loop destroys the power-user experience.
23
+
24
+ ### Marketing / Landing Pages
25
+
26
+ Conversion-critical pages have zero tolerance for perceived slowness. LCP must reach ≤2.0s because first impressions determine bounce rate, and bounce rate directly impacts conversion. CLS must be ≤0.05 (half the general threshold) because layout pop during hero section rendering — caused by web font loading, lazy image dimensions, or server-side-rendered content shifting — destroys the premium impression marketing pages are designed to create. Every 100ms of LCP improvement correlates with measurable conversion lift in e-commerce and SaaS trials.
27
+
28
+ ### E-Commerce
29
+
30
+ | Metric | Target | Rationale |
31
+ |--------|--------|-----------|
32
+ | LCP | ≤2.5s | Product images are the LCP element — optimize aggressively |
33
+ | CLS | ≤0.1 | Price and "Add to Cart" button must not jump as images load |
34
+ | INP | ≤200ms | Cart interactions, quantity updates, and variant selection must feel instant |
35
+
36
+ Cart and checkout flows are revenue-critical paths where a 500ms interaction delay demonstrably increases abandonment. Prioritize INP on product pages and checkout funnels above other optimization work.
37
+
38
+ ### Documentation Sites
39
+
40
+ | Metric | Target | Rationale |
41
+ |--------|--------|-----------|
42
+ | LCP | ≤3.0s | Docs users are high-intent; tolerate slightly longer loads |
43
+ | CLS | ≤0.1 | Code blocks and long-form content must not reflow after load |
44
+ | TTFB | ≤600ms | Docs are often statically generated — TTFB should approach CDN speed |
45
+
46
+ Documentation sites benefit from aggressive static generation and CDN distribution. TTFB at ≤600ms is achievable with proper static export (Next.js, Astro, Docusaurus) and CDN edge caching.
47
+
48
+ ---
49
+
50
+ ## 2. Critical CSS Strategy
51
+
52
+ The browser must parse and execute CSS before it can paint pixels. CSS that blocks rendering is the most impactful optimization target after eliminating render-blocking JavaScript. The goal is to get the above-the-fold experience to paint within the first TCP round trip (≤14KB compressed).
53
+
54
+ **Inline above-the-fold styles:** Identify the CSS rules that affect visible content within the initial viewport — typically layout grid, hero component, navigation bar, and typography declarations. Inline these rules in a `<style>` block in the `<head>`. Keep this block under 14KB compressed, which corresponds to approximately 40–60KB uncompressed depending on your gzip ratio.
55
+
56
+ **Defer non-critical CSS with preload:** Load the full stylesheet asynchronously to prevent it from blocking rendering:
57
+
58
+ ```html
59
+ <link rel="preload" href="/styles/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
60
+ <noscript><link rel="stylesheet" href="/styles/main.css"></noscript>
61
+ ```
62
+
63
+ This pattern preloads the stylesheet at high priority (ensuring it is fetched before it is needed) while not blocking rendering. The `onload` handler promotes the `rel` from `preload` to `stylesheet` once the file is ready, applying styles without a flash of unstyled content.
64
+
65
+ **CSS containment for performance isolation:** Use `contain: layout style` on components that are visually self-contained (cards, sidebars, modals). Containment tells the browser that layout and style changes inside the component cannot affect elements outside it, enabling the browser to skip recalculation of the rest of the page tree when internal changes occur. This is particularly valuable for frequently-updated dashboard widgets and animated components.
66
+
67
+ ---
68
+
69
+ ## 3. Image Budgets
70
+
71
+ Images are typically the single largest contributor to LCP and total page weight. Every image decision — format, dimensions, lazy-loading strategy, and priority — directly affects Core Web Vitals.
72
+
73
+ **Format requirements:**
74
+ - **Photos and complex rasters:** WebP as primary format, AVIF as progressive enhancement where browser support allows. Never ship JPEG or PNG for photos in new projects. AVIF achieves 20–50% smaller file sizes than WebP at equivalent visual quality; use it where CMS and CDN pipelines support it.
75
+ - **Icons and logos:** SVG only. Never rasterize icons for web delivery — SVGs are resolution-independent, style-inheriting, and typically smaller than equivalent PNG at display sizes.
76
+ - **Illustrations:** SVG if illustration complexity allows; WebP for complex multi-color illustrations that would produce large SVG files.
77
+
78
+ **Responsive images with `srcset`:**
79
+
80
+ ```html
81
+ <img
82
+ src="/images/hero.webp"
83
+ srcset="/images/hero-480.webp 480w, /images/hero-960.webp 960w, /images/hero-1920.webp 1920w"
84
+ sizes="(max-width: 640px) 100vw, (max-width: 1280px) 80vw, 1200px"
85
+ alt="[descriptive alt text]"
86
+ width="1920"
87
+ height="1080"
88
+ />
89
+ ```
90
+
91
+ Always specify `width` and `height` attributes. These allow the browser to reserve the correct space before the image loads, eliminating CLS from image loading. The `sizes` attribute tells the browser what display size to expect at each breakpoint so it can select the optimal `srcset` candidate.
92
+
93
+ **Lazy loading below-the-fold images:** Apply `loading="lazy"` to all images that are not visible in the initial viewport. This defers their network requests until the user scrolls toward them, reducing initial page weight significantly on image-heavy pages.
94
+
95
+ **The LCP image must never be lazy-loaded.** The LCP image — typically the hero image or first product image — must load as fast as possible. Apply `fetchpriority="high"` to signal the browser to deprioritize other resources in favor of this image:
96
+
97
+ ```html
98
+ <img
99
+ src="/images/hero.webp"
100
+ fetchpriority="high"
101
+ loading="eager"
102
+ alt="[descriptive alt text]"
103
+ width="1200"
104
+ height="600"
105
+ />
106
+ ```
107
+
108
+ ---
109
+
110
+ ## 4. Animation Frame Budget
111
+
112
+ Smooth animation requires a consistent 60 frames per second, which means each frame must complete in ≤16.67 milliseconds. Exceeding this budget causes visible frame drops ("jank") that make interfaces feel cheap and unresponsive.
113
+
114
+ **Frame budget allocation:**
115
+
116
+ | Phase | Budget | What fits |
117
+ |-------|--------|-----------|
118
+ | JavaScript execution | ≤10ms | Style recalculation triggers, event handlers, React renders |
119
+ | Rendering pipeline | ≤6ms | Layout, paint, composite |
120
+ | **Total** | **≤16.67ms** | One 60fps frame |
121
+
122
+ **Never animate layout-triggering properties.** Properties like `width`, `height`, `margin`, `padding`, `top`, `left`, `right`, `bottom`, `border-width`, and `font-size` force the browser to recalculate layout for the entire affected subtree on every animation frame. This is guaranteed to exceed the 10ms JS budget on all but the simplest pages.
123
+
124
+ **Only animate `transform` and `opacity`.** These two properties are composited by the GPU independently of the browser's main thread layout system. An animation that only changes `transform` and `opacity` does not trigger layout or paint — it executes entirely on the compositor thread, achieving smooth 60fps even when the main thread is busy:
125
+
126
+ ```css
127
+ /* DO: GPU-composited, no layout cost */
128
+ .card-enter {
129
+ animation: card-enter 200ms ease-out;
130
+ }
131
+ @keyframes card-enter {
132
+ from { opacity: 0; transform: translateY(8px); }
133
+ to { opacity: 1; transform: translateY(0); }
134
+ }
135
+
136
+ /* DO NOT: forces layout recalculation every frame */
137
+ @keyframes card-enter-bad {
138
+ from { margin-top: 8px; }
139
+ to { margin-top: 0; }
140
+ }
141
+ ```
142
+
143
+ Use `will-change: transform, opacity` on elements that will be animated to promote them to their own compositor layer before the animation begins. Use this property sparingly — each compositor layer consumes GPU memory, and overuse causes memory pressure on mobile devices.
144
+
145
+ ---
146
+
147
+ ## 5. JavaScript Bundle Budgets
148
+
149
+ Bundle size is a proxy for parse time and execution time, both of which block interactivity. Every kilobyte of JavaScript must be justified against its user-visible value.
150
+
151
+ **Initial load budget:** The JavaScript required to render the first meaningful page interaction must be ≤170KB gzipped. This budget includes the framework runtime, routing, and any above-the-fold component logic. At average mobile connection speeds (≈1.5 Mbps download), 170KB gzipped represents approximately 900ms of transfer time — already a significant portion of a 2.5s LCP budget before parse and execution time is counted.
152
+
153
+ **Code splitting strategy:**
154
+ - **Route-level splitting:** Each page/route is a separate async chunk. Users only download code for the pages they visit.
155
+ - **Vendor chunk isolation:** Isolate `node_modules` dependencies into a separate chunk that can be cached independently of application code. Application code changes on every deploy; library code changes rarely.
156
+ - **Lazy component loading:** Use `React.lazy()` with `Suspense` for components that are not required for the initial render (modals, drawers, complex charts):
157
+
158
+ ```tsx
159
+ const DataChart = React.lazy(() => import('./DataChart'));
160
+
161
+ function Dashboard() {
162
+ return (
163
+ <Suspense fallback={<ChartSkeleton />}>
164
+ <DataChart />
165
+ </Suspense>
166
+ );
167
+ }
168
+ ```
169
+
170
+ **Never use synchronous `import()` in a render path.** Dynamic `import()` inside a React render function will fire on every render, creating network requests during rendering. Load dynamic imports in effects, event handlers, or route loaders.
171
+
172
+ **Icon library tree-shaking:** Icon libraries are the most common source of unintentional bundle bloat. A single barrel import (`import * as Icons from 'lucide-react'`) will include all 1,000+ icons in the bundle. Always use named imports: `import { ChevronRight, Search } from 'lucide-react'`. Configure your bundler to use `sideEffects: false` in `package.json` for icon packages to enable full tree-shaking.
173
+
174
+ ---
175
+
176
+ ## 6. Font Budgets
177
+
178
+ Web fonts are blocking resources in the critical rendering path. Every additional font family, weight, and style file adds to the payload that must load before text can be rendered.
179
+
180
+ **Maximum two font families per product.** One for headings/display, one for body and UI. This constraint is both a performance budget and a typographic discipline — every additional font family increases visual complexity and requires justification against a clear aesthetic goal.
181
+
182
+ **`font-display: swap` is required.** This CSS property instructs the browser to use a system fallback font immediately and swap in the web font when it loads. Without `swap`, text is invisible during font loading (FOIT — Flash of Invisible Text), which directly hurts LCP and user experience:
183
+
184
+ ```css
185
+ @font-face {
186
+ font-family: 'Inter';
187
+ src: url('/fonts/inter-variable.woff2') format('woff2-variations');
188
+ font-display: swap;
189
+ font-weight: 100 900;
190
+ }
191
+ ```
192
+
193
+ **Preload critical font weights:** The most visually prominent weight of the body font (typically 400) and the primary heading weight (600 or 700) should be preloaded:
194
+
195
+ ```html
196
+ <link rel="preload" href="/fonts/inter-400.woff2" as="font" type="font/woff2" crossorigin>
197
+ <link rel="preload" href="/fonts/inter-700.woff2" as="font" type="font/woff2" crossorigin>
198
+ ```
199
+
200
+ **Variable fonts for 3+ weights:** If a project uses three or more weights of a single typeface, use a variable font rather than separate weight files. One variable font file covers the entire weight axis and is typically smaller than three separate weight files combined. Variable fonts also enable smooth weight animations (`font-weight` transitions).
201
+
202
+ **Unicode subsetting:** Use the `unicode-range` descriptor to split fonts into subsets that load only when the characters in that range appear on the page:
203
+
204
+ ```css
205
+ @font-face {
206
+ font-family: 'Inter';
207
+ src: url('/fonts/inter-latin.woff2') format('woff2');
208
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153;
209
+ }
210
+ ```
211
+
212
+ **Total font payload target:** ≤100KB across all font files for the initial page load. Variable fonts for Latin character sets typically fall in the 50–80KB range for a single family.
213
+
214
+ ---
215
+
216
+ ## 7. Lighthouse CI Integration
217
+
218
+ Automated performance regression testing prevents gradual budget creep — small performance regressions accumulate unnoticed through routine development until the product is significantly slower than its target.
219
+
220
+ **GitHub Actions workflow:** Create `.github/workflows/lighthouse.yml` to run Lighthouse CI on every pull request against a staging deployment:
221
+
222
+ ```yaml
223
+ name: Lighthouse CI
224
+ on:
225
+ pull_request:
226
+ branches: [main]
227
+ jobs:
228
+ lighthouse:
229
+ runs-on: ubuntu-latest
230
+ steps:
231
+ - uses: actions/checkout@v4
232
+ - name: Run Lighthouse CI
233
+ uses: treosh/lighthouse-ci-action@v11
234
+ with:
235
+ urls: |
236
+ ${{ env.STAGING_URL }}
237
+ ${{ env.STAGING_URL }}/products
238
+ budgetPath: ./lighthouse-budget.json
239
+ uploadArtifacts: true
240
+ ```
241
+
242
+ **Budget configuration in `lighthouse-budget.json`:**
243
+
244
+ ```json
245
+ [{
246
+ "path": "/*",
247
+ "timings": [
248
+ { "metric": "largest-contentful-paint", "budget": 2500 },
249
+ { "metric": "interactive", "budget": 3500 },
250
+ { "metric": "cumulative-layout-shift", "budget": 0.1 }
251
+ ],
252
+ "resourceSizes": [
253
+ { "resourceType": "script", "budget": 170 },
254
+ { "resourceType": "font", "budget": 100 }
255
+ ],
256
+ "resourceCounts": [
257
+ { "resourceType": "third-party", "budget": 10 }
258
+ ]
259
+ }]
260
+ ```
261
+
262
+ **Block PRs on regression:** Configure the CI step to fail (blocking merge) when LCP regresses by more than 500ms compared to the base branch, or when the overall Lighthouse Performance score drops below 90. Regressions in accessibility and best practices scores below 90 should also be treated as blocking failures.
263
+
264
+ ---
265
+
266
+ ## 8. React Runtime Performance
267
+
268
+ React's rendering model is optimized by default, but naive usage patterns — particularly around object identity, memoization, and context — can introduce significant re-render cascades that degrade INP and animation smoothness.
269
+
270
+ **Source: nextlevelbuilder/ui-ux-pro-max-skill (MIT)**
271
+
272
+ ### `React.memo()`
273
+
274
+ Use `React.memo()` only when the React DevTools Profiler demonstrates that a component re-renders with identical props and the render takes ≥50ms. `React.memo()` adds overhead — a shallow prop comparison on every parent render — that only pays for itself when the avoided render cost exceeds the comparison cost. Never memoize components that receive primitive values (strings, numbers, booleans) as props; React's reconciler handles these efficiently without memoization.
275
+
276
+ ### `useMemo()`
277
+
278
+ Use `useMemo()` for computationally expensive derivations — sorting or filtering large arrays, running statistical calculations, or building complex objects from raw data — where the computation takes more than 1ms and the dependencies are stable across most renders. Do not use `useMemo()` to memoize simple object creation for the purpose of maintaining reference identity; instead, move the object outside the component or into a `useRef` if it is genuinely static.
279
+
280
+ ### `useCallback()`
281
+
282
+ Use `useCallback()` when a function is passed as a prop to a memoized child component and the function's creation would invalidate the child's memo on every parent render. `useCallback()` is not needed for event handlers attached directly to DOM elements (`onClick`, `onChange`) — the DOM does not compare function references. The cost of useCallback (closure creation + dependency comparison) is only justified when it prevents a measurable re-render cascade.
283
+
284
+ ### Re-render Root Causes
285
+
286
+ The two most common causes of unnecessary re-renders are (1) new object and array references created inline in JSX, and (2) Context value changes propagating to all consumers. Avoid `value={{ key: value }}` inline in Context providers — this creates a new object reference on every parent render, re-rendering all consumers. Memoize the context value with `useMemo()` or split contexts so consumers only subscribe to the slice of state they need.
287
+
288
+ Avoid anonymous arrow functions as props to performance-critical components: `<List onItemClick={() => handleClick(id)} />` creates a new function reference on every render of the parent.
289
+
290
+ ### Suspense Boundaries
291
+
292
+ Place Suspense boundaries at two levels: route-level (wrapping each page's lazy-loaded component tree) and per-expensive-async-boundary (wrapping individual data-fetching components that have independent loading states). The fallback UI must match the approximate layout dimensions of the loaded content — a fallback that occupies significantly different space than the loaded component will cause CLS when the content arrives.
293
+
294
+ ### React Server Components vs. Client Components
295
+
296
+ Use RSC (React Server Components) for data fetching, static markup generation, and components that do not require browser APIs or user interaction. RSC output is streamed as HTML — it adds zero JavaScript to the client bundle. Use client components (`'use client'`) only when browser APIs (localStorage, geolocation, IntersectionObserver) or event handlers (onClick, onChange) are required. Co-locate client components as deep in the component tree as possible so that only the interactive leaf nodes are included in the client bundle, not their entire parent subtrees.
297
+
298
+ ### Virtualization
299
+
300
+ Never render more than 100 list items into the DOM simultaneously. Beyond this threshold, DOM node count degrades scroll performance, memory consumption, and garbage collection pauses. Use `react-window` for fixed-size list virtualization or `@tanstack/virtual` for variable-height items, table virtualization, and grid layouts. Virtualization renders only the items currently visible in the viewport plus a configurable overscan buffer, keeping DOM node count constant regardless of list length.
301
+
302
+ ---
303
+
304
+ *Performance budgets defined here are enforced as acceptance criteria in `.design/STATE.md` must-haves for all phases involving UI implementation.*
@@ -3,32 +3,262 @@
3
3
  "version": 1,
4
4
  "generated_at": "2026-04-24T00:00:00.000Z",
5
5
  "entries": [
6
- { "name": "shared-preamble", "path": "reference/shared-preamble.md", "type": "preamble", "tier": "L0", "description": "L0 aggregator — imports meta-rules first and exposes Framework Identity + Ordering Convention + Pre-Warming" },
7
- { "name": "meta-rules", "path": "reference/meta-rules.md", "type": "meta-rules", "tier": "L0", "description": "Framework-invariant rules: Required Reading Discipline, Writes Protocol, Deviation Handling, Completion Markers, Context-Exhaustion & Budget awareness" },
8
- { "name": "cycle-handoff-preamble", "path": "reference/cycle-handoff-preamble.md", "type": "preamble", "description": "Framing prose for archived cycle material — read as reference, not as current request" },
9
- { "name": "retrieval-contract", "path": "reference/retrieval-contract.md", "type": "preamble", "description": "3-layer search → metadata → full-doc protocol with per-row token-cost labels" },
10
- { "name": "heuristics", "path": "reference/heuristics.md", "type": "heuristic", "tier": "L2", "description": "NNG heuristics + GDD-specific rubrics used by auditor / verifier" },
11
- { "name": "anti-patterns", "path": "reference/anti-patterns.md", "type": "heuristic", "tier": "L2", "description": "Catalog of design anti-patterns surfaced during audit" },
12
- { "name": "checklists", "path": "reference/checklists.md", "type": "heuristic", "tier": "L2", "description": "Per-category gate checklists" },
13
- { "name": "accessibility", "path": "reference/accessibility.md", "type": "heuristic", "description": "WCAG + focus + keyboard-nav heuristics referenced by a11y-mapper" },
14
- { "name": "debugger-philosophy", "path": "reference/debugger-philosophy.md", "type": "heuristic", "description": "Philosophy guide for systematic-debugging agents" },
15
- { "name": "parallelism-rules", "path": "reference/parallelism-rules.md", "type": "heuristic", "description": "Rules for serial/parallel agent dispatch and Touches conflict detection" },
16
- { "name": "priority-matrix", "path": "reference/priority-matrix.md", "type": "heuristic", "description": "Severity × Effort priority-score formula used by gap prioritizers" },
17
- { "name": "project-skills-guide", "path": "reference/project-skills-guide.md", "type": "heuristic", "description": "Guide for authoring project-skill artifacts (sketch/spike wrap-ups)" },
18
- { "name": "audit-scoring", "path": "reference/audit-scoring.md", "type": "output-contract", "description": "6-pillar + 7-category audit score rubric and output schema" },
19
- { "name": "review-format", "path": "reference/review-format.md", "type": "output-contract", "description": "Format of code-review output documents" },
20
- { "name": "authority-feeds", "path": "reference/authority-feeds.md", "type": "authority-feed", "description": "Whitelist of design-authority feed sources for the watcher" },
21
- { "name": "motion", "path": "reference/motion.md", "type": "motion", "description": "Motion vocabulary seed (extended in Phase 18)" },
22
- { "name": "typography", "path": "reference/typography.md", "type": "heuristic", "description": "Typography-system heuristics used by visual-hierarchy-mapper" },
23
- { "name": "ai-native-tool-interface","path": "reference/ai-native-tool-interface.md","type": "surfaces", "description": "AI-native tool interface contract used across connections" },
24
- { "name": "intel-schema", "path": "reference/intel-schema.md", "type": "schema", "description": "Schema documentation for .design/intel/ files" },
25
- { "name": "config-schema", "path": "reference/config-schema.md", "type": "schema", "description": "Schema documentation for .design/config.json" },
26
- { "name": "DEPRECATIONS", "path": "reference/DEPRECATIONS.md", "type": "schema", "description": "Deprecation records and redirect mappings" },
27
- { "name": "STATE-TEMPLATE", "path": "reference/STATE-TEMPLATE.md", "type": "schema", "description": "Template for .design/STATE.md scaffolded by /gdd:scan" },
28
- { "name": "model-prices", "path": "reference/model-prices.md", "type": "data", "description": "Anthropic model pricing table used by the telemetry aggregator" },
29
- { "name": "model-tiers", "path": "reference/model-tiers.md", "type": "data", "description": "Per-agent default tier map and rationale" },
30
- { "name": "figma-sandbox", "path": "reference/figma-sandbox.md", "type": "defaults", "description": "Four Figma plugin-sandbox pitfalls encoded as hard rules" },
31
- { "name": "mcp-budget.default", "path": "reference/mcp-budget.default.json", "type": "defaults", "description": "Default MCP per-task budget (calls + consecutive-timeout thresholds)" },
32
- { "name": "protected-paths.default", "path": "reference/protected-paths.default.json","type": "defaults", "description": "Default glob list the plugin refuses to Edit/Write/mutate-via-Bash without override" }
6
+ {
7
+ "name": "shared-preamble",
8
+ "path": "reference/shared-preamble.md",
9
+ "type": "preamble",
10
+ "tier": "L0",
11
+ "description": "L0 aggregator \u2014 imports meta-rules first and exposes Framework Identity + Ordering Convention + Pre-Warming"
12
+ },
13
+ {
14
+ "name": "meta-rules",
15
+ "path": "reference/meta-rules.md",
16
+ "type": "meta-rules",
17
+ "tier": "L0",
18
+ "description": "Framework-invariant rules: Required Reading Discipline, Writes Protocol, Deviation Handling, Completion Markers, Context-Exhaustion & Budget awareness"
19
+ },
20
+ {
21
+ "name": "cycle-handoff-preamble",
22
+ "path": "reference/cycle-handoff-preamble.md",
23
+ "type": "preamble",
24
+ "description": "Framing prose for archived cycle material \u2014 read as reference, not as current request"
25
+ },
26
+ {
27
+ "name": "retrieval-contract",
28
+ "path": "reference/retrieval-contract.md",
29
+ "type": "preamble",
30
+ "description": "3-layer search \u2192 metadata \u2192 full-doc protocol with per-row token-cost labels"
31
+ },
32
+ {
33
+ "name": "heuristics",
34
+ "path": "reference/heuristics.md",
35
+ "type": "heuristic",
36
+ "tier": "L2",
37
+ "description": "NNG heuristics + GDD-specific rubrics used by auditor / verifier"
38
+ },
39
+ {
40
+ "name": "anti-patterns",
41
+ "path": "reference/anti-patterns.md",
42
+ "type": "heuristic",
43
+ "tier": "L2",
44
+ "description": "Catalog of design anti-patterns surfaced during audit"
45
+ },
46
+ {
47
+ "name": "checklists",
48
+ "path": "reference/checklists.md",
49
+ "type": "heuristic",
50
+ "tier": "L2",
51
+ "description": "Per-category gate checklists"
52
+ },
53
+ {
54
+ "name": "accessibility",
55
+ "path": "reference/accessibility.md",
56
+ "type": "heuristic",
57
+ "description": "WCAG + focus + keyboard-nav heuristics referenced by a11y-mapper"
58
+ },
59
+ {
60
+ "name": "debugger-philosophy",
61
+ "path": "reference/debugger-philosophy.md",
62
+ "type": "heuristic",
63
+ "description": "Philosophy guide for systematic-debugging agents"
64
+ },
65
+ {
66
+ "name": "parallelism-rules",
67
+ "path": "reference/parallelism-rules.md",
68
+ "type": "heuristic",
69
+ "description": "Rules for serial/parallel agent dispatch and Touches conflict detection"
70
+ },
71
+ {
72
+ "name": "priority-matrix",
73
+ "path": "reference/priority-matrix.md",
74
+ "type": "heuristic",
75
+ "description": "Severity \u00d7 Effort priority-score formula used by gap prioritizers"
76
+ },
77
+ {
78
+ "name": "project-skills-guide",
79
+ "path": "reference/project-skills-guide.md",
80
+ "type": "heuristic",
81
+ "description": "Guide for authoring project-skill artifacts (sketch/spike wrap-ups)"
82
+ },
83
+ {
84
+ "name": "audit-scoring",
85
+ "path": "reference/audit-scoring.md",
86
+ "type": "output-contract",
87
+ "description": "6-pillar + 7-category audit score rubric and output schema"
88
+ },
89
+ {
90
+ "name": "review-format",
91
+ "path": "reference/review-format.md",
92
+ "type": "output-contract",
93
+ "description": "Format of code-review output documents"
94
+ },
95
+ {
96
+ "name": "authority-feeds",
97
+ "path": "reference/authority-feeds.md",
98
+ "type": "authority-feed",
99
+ "description": "Whitelist of design-authority feed sources for the watcher"
100
+ },
101
+ {
102
+ "name": "motion",
103
+ "path": "reference/motion.md",
104
+ "type": "motion",
105
+ "description": "Motion vocabulary seed (extended in Phase 18)"
106
+ },
107
+ {
108
+ "name": "typography",
109
+ "path": "reference/typography.md",
110
+ "type": "heuristic",
111
+ "description": "Typography-system heuristics used by visual-hierarchy-mapper"
112
+ },
113
+ {
114
+ "name": "ai-native-tool-interface",
115
+ "path": "reference/ai-native-tool-interface.md",
116
+ "type": "surfaces",
117
+ "description": "AI-native tool interface contract used across connections"
118
+ },
119
+ {
120
+ "name": "intel-schema",
121
+ "path": "reference/intel-schema.md",
122
+ "type": "schema",
123
+ "description": "Schema documentation for .design/intel/ files"
124
+ },
125
+ {
126
+ "name": "config-schema",
127
+ "path": "reference/config-schema.md",
128
+ "type": "schema",
129
+ "description": "Schema documentation for .design/config.json"
130
+ },
131
+ {
132
+ "name": "DEPRECATIONS",
133
+ "path": "reference/DEPRECATIONS.md",
134
+ "type": "schema",
135
+ "description": "Deprecation records and redirect mappings"
136
+ },
137
+ {
138
+ "name": "STATE-TEMPLATE",
139
+ "path": "reference/STATE-TEMPLATE.md",
140
+ "type": "schema",
141
+ "description": "Template for .design/STATE.md scaffolded by /gdd:scan"
142
+ },
143
+ {
144
+ "name": "model-prices",
145
+ "path": "reference/model-prices.md",
146
+ "type": "data",
147
+ "description": "Anthropic model pricing table used by the telemetry aggregator"
148
+ },
149
+ {
150
+ "name": "model-tiers",
151
+ "path": "reference/model-tiers.md",
152
+ "type": "data",
153
+ "description": "Per-agent default tier map and rationale"
154
+ },
155
+ {
156
+ "name": "figma-sandbox",
157
+ "path": "reference/figma-sandbox.md",
158
+ "type": "defaults",
159
+ "description": "Four Figma plugin-sandbox pitfalls encoded as hard rules"
160
+ },
161
+ {
162
+ "name": "mcp-budget.default",
163
+ "path": "reference/mcp-budget.default.json",
164
+ "type": "defaults",
165
+ "description": "Default MCP per-task budget (calls + consecutive-timeout thresholds)"
166
+ },
167
+ {
168
+ "name": "protected-paths.default",
169
+ "path": "reference/protected-paths.default.json",
170
+ "type": "defaults",
171
+ "description": "Default glob list the plugin refuses to Edit/Write/mutate-via-Bash without override"
172
+ },
173
+ {
174
+ "name": "start-interview",
175
+ "path": "reference/start-interview.md",
176
+ "type": "preamble",
177
+ "description": "Locked 5-question interview consumed by /gdd:start (Phase 14.7) \u2014 pain, target-area, budget, framework/DS confirmation, Figma/canvas workflow"
178
+ },
179
+ {
180
+ "name": "framer-motion-patterns",
181
+ "path": "reference/framer-motion-patterns.md",
182
+ "type": "heuristic",
183
+ "description": "Framer Motion implementation: spring/tween, AnimatePresence, variants, gestures, a11y"
184
+ },
185
+ {
186
+ "name": "iconography",
187
+ "path": "reference/iconography.md",
188
+ "type": "heuristic",
189
+ "description": "Icon sizing, metaphors, library catalog, touch targets, animation"
190
+ },
191
+ {
192
+ "name": "performance",
193
+ "path": "reference/performance.md",
194
+ "type": "heuristic",
195
+ "description": "Core Web Vitals budgets, JS/font/image budgets, React runtime perf"
196
+ },
197
+ {
198
+ "name": "design-systems-catalog",
199
+ "path": "reference/design-systems-catalog.md",
200
+ "type": "taxonomy",
201
+ "description": "Quick-reference index of 18 major design systems"
202
+ },
203
+ {
204
+ "name": "brand-voice",
205
+ "path": "reference/brand-voice.md",
206
+ "type": "heuristic",
207
+ "description": "Voice axes, archetypes, tone-by-context, industry-context palettes"
208
+ },
209
+ {
210
+ "name": "visual-hierarchy-layout",
211
+ "path": "reference/visual-hierarchy-layout.md",
212
+ "type": "heuristic",
213
+ "description": "Z-order, whitespace, grids, F/Z patterns, 24 landing archetypes"
214
+ },
215
+ {
216
+ "name": "gestalt",
217
+ "path": "reference/gestalt.md",
218
+ "type": "heuristic",
219
+ "description": "8 Gestalt principles with scoring rubrics and grep signatures"
220
+ },
221
+ {
222
+ "name": "design-system-guidance",
223
+ "path": "reference/design-system-guidance.md",
224
+ "type": "heuristic",
225
+ "description": "Token versioning, multi-brand arch, governance, maturity rubric 0-5"
226
+ },
227
+ {
228
+ "name": "palette-catalog",
229
+ "path": "reference/palette-catalog.md",
230
+ "type": "palette",
231
+ "description": "40+ industry-vertical color palettes (WCAG verified, UUPM MIT)"
232
+ },
233
+ {
234
+ "name": "style-vocabulary",
235
+ "path": "reference/style-vocabulary.md",
236
+ "type": "style-vocabulary",
237
+ "description": "67 UI aesthetics with keywords, effects, best-for, era (UUPM MIT)"
238
+ },
239
+ {
240
+ "name": "palettes-data",
241
+ "path": "reference/data/palettes.csv",
242
+ "type": "data",
243
+ "description": "CSV data sibling for palette-catalog.md"
244
+ },
245
+ {
246
+ "name": "styles-data",
247
+ "path": "reference/data/styles.csv",
248
+ "type": "data",
249
+ "description": "CSV data sibling for style-vocabulary.md"
250
+ },
251
+ {
252
+ "name": "surfaces",
253
+ "path": "reference/surfaces.md",
254
+ "type": "surfaces",
255
+ "description": "Concentric radius, optical alignment, 3-layer shadow, image outlines, hit areas"
256
+ },
257
+ {
258
+ "name": "google-fonts-data",
259
+ "path": "reference/data/google-fonts.csv",
260
+ "type": "data",
261
+ "description": "Google Fonts catalog (representative sample of 1923-row UUPM data set)"
262
+ }
33
263
  ]
34
264
  }
@@ -42,9 +42,9 @@ Also wrong:
42
42
 
43
43
  ## When to use this format
44
44
 
45
- - **Any review of existing code or design.** `impeccable-audit`, `impeccable-critique`, `design:design-critique`, `design:accessibility-review` — all produce outputs that can be rendered as this table.
45
+ - **Any review of existing code or design.** `design:design-critique`, `design:accessibility-review` — all produce outputs that can be rendered as this table.
46
46
  - **Responding to "review this" / "what do you think of this."**
47
- - **After `Skill(impeccable-polish)` runs** — present the diff as a table.
47
+ - **After `/gdd:fast` or `/gdd:design` applies a polish pass** — present the diff as a table.
48
48
  - **Documenting design-system migrations** (old token → new token, with why).
49
49
 
50
50
  ## When NOT to use this format