@hegemonart/get-design-done 1.19.5 → 1.19.6

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.
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "Get Design Done — 5-stage agent-orchestrated design pipeline with 9 connections, handoff-first workflow, bidirectional Figma write-back, 22+ specialized agents, queryable knowledge layer (intel store, dependency analysis, learnings extraction), and a self-improvement loop (reflector, frontmatter + budget feedback, global-skills layer). Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation (auto-tag + GitHub Release + release-time smoke test).",
8
- "version": "1.19.5"
8
+ "version": "1.19.6"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "get-design-done",
13
13
  "source": "./",
14
14
  "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), Claude Design handoff, bidirectional Figma write-back, and a queryable intel store (.design/intel/) for dependency and learnings queries. Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings. Ships 35-component benchmark corpus with pipeline integration (auditor conformance, executor pre-flight, doc-writer scaffold, pattern-mapper convergence). Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, variable-font loading, image optimization, CSS Grid + container queries, advanced motion vocabulary, platform design patterns (iOS/Android/web/visionOS), RTL/CJK/cultural adaptations, IA catalog, form UX patterns, data-visualization matrix, and user-research methodology, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation. Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression.",
15
- "version": "1.19.5",
15
+ "version": "1.19.6",
16
16
  "author": {
17
17
  "name": "hegemonart"
18
18
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "get-design-done",
3
3
  "short_name": "gdd",
4
- "version": "1.19.5",
4
+ "version": "1.19.6",
5
5
  "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), handoff-first workflow via Claude Design bundles, bidirectional Figma write-back (annotations, Code Connect), queryable intel store (`.design/intel/`) for O(1) design surface lookups, and self-improvement loop (reflector agent, frontmatter + budget feedback, global-skills layer at `~/.claude/gdd/global-skills/`). Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings, reflect, apply-reflections. Ships 35-component benchmark corpus (Waves 1–5) with pipeline integration: auditor conformance scoring, executor spec pre-flight, doc-writer scaffold, pattern-mapper convergence detector. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, variable-font loading, image optimization, CSS Grid + container queries, advanced motion vocabulary (RN MIT easings/spring/interpolate + hyperframes transition taxonomy), platform design patterns (iOS/Android/web/visionOS), RTL/CJK/cultural adaptations, information architecture catalog, form UX patterns (Wroblewski label research), data-visualization matrix (25 chart types, Okabe-Ito palette), and user-research methodology, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows, lint + schema + frontmatter + stale-ref + shellcheck + gitleaks + injection-scan + blocking size-budget) and release automation (auto-tag + GitHub Release + release-time smoke test). Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression.",
6
6
  "author": {
7
7
  "name": "hegemonart",
package/CHANGELOG.md CHANGED
@@ -4,6 +4,36 @@ All notable changes to get-design-done are documented here. Versions follow [sem
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.19.6] — 2026-04-24
8
+
9
+ ### Added — Design Philosophy Layer
10
+
11
+ Adds a generative reasoning spine on top of the defensive (anti-patterns) and descriptive (heuristics) layers. Purely additive knowledge + lens integration — no new agents, skills, or commands.
12
+
13
+ **New `reference/first-principles.md`:** 3-invariant framework (body / attention / memory) with grep-able principle→code pairs and a reducibility test for every design element. Wired into `design-discussant` as Step 0.5 — three invariant questions prepended to the brief-stage interview; answers recorded as `[Invariant]` D-XX decisions in STATE.md.
14
+
15
+ **New `reference/emotional-design.md`:** Don Norman's visceral / behavioral / reflective three-level framework as a cross-cutting scoring lens. Per-level scoring rubrics (1–4) and a cross-level conflict table. Wired into `design-auditor` (Step 4.5 Emotional Design Overlay appended to DESIGN-AUDIT.md) and `design-reflector` (visceral/behavioral divergence check in Section 1).
16
+
17
+ **New `reference/component-authoring.md`:** Emil Kowalski / Sonner 6-principle component quality standard — P-01 Minimal API, P-02 Composability, P-03 Defaults, P-04 Animation as State, P-05 Accessibility First, P-06 Edge Honesty — with grep-able audit signals and an ARIA contract table by component type. Wired into design-auditor (Pillar 7 sub-check), design-discussant (`--spec` mode question), and design-verifier must-have checklist.
18
+
19
+ **`reference/heuristics.md` extended:** Added Peak-End Rule, Loss Aversion, Cognitive Load Theory (intrinsic / extraneous / germane), Aesthetic-Usability Effect, Doherty Threshold (400ms), and Flow (Csikszentmihalyi) — completing the psychology foundations layer.
20
+
21
+ **`reference/motion-advanced.md`:** Disney's 12 Principles UX mapping stub replaced with full authoring — all 12 principles translated to interface motion with code examples (Squash and Stretch, Anticipation, Staging, Straight Ahead vs Pose to Pose, Follow Through, Slow In/Slow Out, Arcs, Secondary Action, Timing, Exaggeration, Solid Drawing, Appeal).
22
+
23
+ **`reference/checklists.md`:** Added Rams Lens (10 questions mapping Dieter Rams's principles) and Sonner / Component-Authoring Lens (6 P-0N questions) as post-audit self-checks.
24
+
25
+ **`reference/shared-preamble.md`:** Added Design Philosophy Layer block pointing to the three new reference files — ensures all agents are aware of the philosophy spine.
26
+
27
+ **`reference/authority-feeds.md`:** Added `jnd.org` (Don Norman) and `vitsoe.com` (Dieter Rams / Vitsœ) as named-practitioner feeds. Feed count: 26 → 28.
28
+
29
+ **`design-auditor`:** Required reading expanded with `reference/emotional-design.md` and `reference/component-authoring.md`. Step 4.5 (Emotional Design Overlay) added to execution steps.
30
+
31
+ **`design-discussant`:** Step 0.5 (First-Principles Invariants) prepends three invariant questions during brief/discover stage.
32
+
33
+ **`design-reflector`:** Section 1 extended with four principles-check prompts: reducibility, memory-load, peak-end, and error-redemption.
34
+
35
+ ---
36
+
7
37
  ## [1.19.5] — 2026-04-24
8
38
 
9
39
  ### Added — Cross-Cycle Memory: Recall, Checkpoints, Experience Archive
@@ -62,6 +62,8 @@ Minimum expected files:
62
62
  - `reference/data-visualization.md` — chart-choice matrix, color-blind palettes, axis conventions (use for chart-heavy projects)
63
63
  - `reference/rtl-cjk-cultural.md` — RTL mirroring, CJK typography, cultural color meanings (use when i18n or multi-locale is in scope)
64
64
  - `reference/information-architecture.md` — nav pattern catalog, menu-depth rules, wayfinding (use when nav structure is in scope)
65
+ - `reference/emotional-design.md` — Norman's visceral/behavioral/reflective cross-cutting lens; apply after pillar scoring as an informational overlay (see Emotional Design Overlay section below)
66
+ - `reference/component-authoring.md` (if present) — Kowalski/Sonner P-01–P-06 principles; apply as sub-check within Pillar 7 (Micro-Polish) for component-heavy UIs
65
67
 
66
68
  ---
67
69
 
@@ -334,6 +336,16 @@ For each of the 7 pillars:
334
336
 
335
337
  Write `.design/DESIGN-AUDIT.md` using the output format below.
336
338
 
339
+ ### Step 4.5: Emotional Design Overlay
340
+
341
+ After pillar scoring, apply the three-level lens from `reference/emotional-design.md`:
342
+
343
+ 1. **Visceral** — map Pillar 3 (Color) + Pillar 2 (Visual Hierarchy) → does the aesthetic surface convey the intended emotional register within 3 seconds?
344
+ 2. **Behavioral** — map Pillar 6 (Experience Design) + H-01/H-09 signals → does feedback arrive within 400ms? Are errors human-readable?
345
+ 3. **Reflective** — is there a designed peak moment in the primary flow? Does brand voice carry through to empty states?
346
+
347
+ Emit a `## Emotional Design Overlay` section in DESIGN-AUDIT.md (informational; does not affect /28 score). Flag any cross-level conflict (e.g., high behavioral + low visceral) as a priority finding.
348
+
337
349
  ### Step 5: Emit Completion Marker
338
350
 
339
351
  After writing the file, emit `## AUDIT COMPLETE` as the final line of the response.
@@ -32,6 +32,20 @@ The spawning prompt supplies `<required_reading>`. Read every listed file before
32
32
 
33
33
  If `<connections>` in STATE.md shows `figma: available`, read the `prefix=` field on that line (call it `{P}`). Then `ToolSearch({ query: "figma get_variable_defs", max_results: 5 })` and call `{P}get_variable_defs`. For each returned variable, draft a *tentative* D-XX decision (mark "tentative — confirm with user"). Silently skip on any error. Do NOT grep the codebase.
34
34
 
35
+ ## Step 0.5 — First-Principles Invariants (brief stage only)
36
+
37
+ If `<stage>` in the spawning prompt is `brief` or `discover`, prepend these three invariant questions **before** the main design interview. Record answers as D-XX decisions prefixed `[Invariant]` in STATE.md.
38
+
39
+ Read `reference/first-principles.md` before asking. Questions to ask (one at a time, using `AskUserQuestion`):
40
+
41
+ 1. **Body invariant** — "Are there accessibility requirements for motor-impaired users, or will this be used primarily on mobile devices? (This affects minimum touch target sizes and input method assumptions.)"
42
+ 2. **Attention invariant** — "What is the single most important action a user should take on the primary screen? (This will be the only element styled as a primary action.)"
43
+ 3. **Memory invariant** — "Are there any multi-step flows where users must carry information from one screen to the next? (This determines whether we need progress indicators or inline context cues.)"
44
+
45
+ After recording all three answers, apply the **Reducibility Test** framing: note in STATE.md which design elements are invariant-justified (body/attention/memory) and which are decorative.
46
+
47
+ Skip this step if: `<stage>` is not `brief`/`discover`, if `<mode>` is `--from-handoff` (handoff decisions already encode invariants), or if D-XX decisions prefixed `[Invariant]` already exist in STATE.md.
48
+
35
49
  ## Step 1 — Mode dispatch
36
50
 
37
51
  Inspect the orchestrator prompt for `<mode>`:
@@ -51,6 +51,16 @@ Write these sections in order. If source data is missing, write the section head
51
51
 
52
52
  Compare `.design/DESIGN-VERIFICATION.md` gaps to `.design/DESIGN-PLAN.md` acceptance criteria. List decisions that deviated from plan, unexpected cost spikes (agent cost > 2× typical), agents that ran > 3× their `typical-duration-seconds`. One bullet per surprise; cite cycle slug and evidence.
53
53
 
54
+ After listing standard surprises, apply the **Four Principles Checks** from `reference/emotional-design.md` and `reference/first-principles.md`:
55
+
56
+ **Reducibility check** — Did any executed task add elements that fail the reducibility test (body / attention / memory justification absent)? If DESIGN-PLAN.md tasks added >3 visual elements none of which appear in DESIGN-VERIFICATION.md acceptance criteria, flag as "possible decorative accumulation."
57
+
58
+ **Memory-load check** — Does DESIGN-VERIFICATION.md show any H-06 (Recognition > Recall) gap? If yes, flag: "Memory invariant violation — users may need to remember context between screens." Cite the specific gap.
59
+
60
+ **Peak-End check** — Scan DESIGN-PLAN.md and DESIGN-VERIFICATION.md for evidence of a designed peak moment (a completion screen, a celebration, a distinct success state). If none found, flag: "No peak moment designed — reflective-level experience may score low. Consider adding a designed end state."
61
+
62
+ **Error-redemption check** — Scan DESIGN-VERIFICATION.md for H-09 (Error Recovery) score. If score < 3, flag: "Error-redemption gap — error states do not guide users to resolution. This is a behavioral-level failure that also damages the reflective level (users remember bad endings)."
63
+
54
64
  ### 2. Recurring Decisions
55
65
 
56
66
  Scan STATE.md `<decisions>` block for D-XX codes. Cross-reference `.design/learnings/` files from prior cycles if present. Flag decisions that: (a) appeared in multiple sessions of the same cycle, or (b) appear under the same keyword in learnings from ≥2 prior cycles. These are candidates for `reference/` additions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hegemonart/get-design-done",
3
- "version": "1.19.5",
3
+ "version": "1.19.6",
4
4
  "description": "A Claude Code plugin for systematic design improvement",
5
5
  "author": "Hegemon",
6
6
  "homepage": "https://github.com/hegemonart/get-design-done",
@@ -89,7 +89,16 @@
89
89
  "experience-archive",
90
90
  "recall",
91
91
  "relevance-counter",
92
- "record-contract"
92
+ "record-contract",
93
+ "first-principles",
94
+ "emotional-design",
95
+ "component-authoring",
96
+ "disney-12-principles",
97
+ "peak-end-rule",
98
+ "loss-aversion",
99
+ "cognitive-load",
100
+ "doherty-threshold",
101
+ "rams-lens"
93
102
  ],
94
103
  "skills": [
95
104
  "SKILL.md"
@@ -4,8 +4,8 @@
4
4
  >
5
5
  > **Anti-slop thesis:** No Dribbble. No Behance. No LinkedIn. No generic trending aggregators. See `.planning/PROJECT.md` and `.planning/phases/13.2-external-authority-watcher/13.2-CONTEXT.md` §D-08.
6
6
 
7
- **Last reviewed:** 2026-04-19
8
- **Feed count:** 26 (updated each time a feed is added or removed)
7
+ **Last reviewed:** 2026-04-24
8
+ **Feed count:** 28 (updated each time a feed is added or removed)
9
9
 
10
10
  ---
11
11
 
@@ -46,6 +46,8 @@
46
46
  - **[Scott Jehl](https://scottjehl.com/)** — `kind: named-practitioner` · `url: https://scottjehl.com/feed/` · `cadence-hint: monthly` · *Progressive enhancement and web performance; long-form durable analysis.*
47
47
  - **[Heydon Pickering](https://heydonworks.com/)** — `kind: named-practitioner` · `url: https://heydonworks.com/feed.xml` · `cadence-hint: irregular` · *Accessibility-first component design; Inclusive Components author.*
48
48
  - **[Una Kravets](https://una.im/)** — `kind: named-practitioner` · `url: https://una.im/feed.xml` · `cadence-hint: monthly` · *Chrome DevRel on CSS; surfaces and explains new platform capabilities.*
49
+ - **[Don Norman — jnd.org](https://jnd.org/)** — `kind: named-practitioner` · `url: https://jnd.org/feed/` · `cadence-hint: monthly` · *Don Norman's essays on emotional design, affordances, cognitive design, and human-centered AI. Primary source for `reference/emotional-design.md`.*
50
+ - **[Vitsœ — Dieter Rams](https://www.vitsoe.com/gb/about/good-design)** — `kind: named-practitioner` · `url: https://www.vitsoe.com/feed` · `cadence-hint: irregular` · *Canonical source for Rams's 10 Principles of Good Design. Published by Vitsœ, who worked directly with Rams at Braun. Primary source for the Rams Lens in `reference/checklists.md`.*
49
51
 
50
52
  ## User-added Are.na channels (user-extensible)
51
53
 
@@ -162,3 +162,33 @@ Use this checklist after the main design review for pixel-level craft verificati
162
162
  - [ ] No `transition: all` anywhere (see BAN-12 transition-all)
163
163
  - [ ] No `will-change: all` anywhere (see BAN-13 will-change-all)
164
164
  - [ ] `prefers-reduced-motion` respected via `MotionConfig` or `useReducedMotion()`
165
+
166
+ ---
167
+
168
+ ## Rams Lens — 10 Design Questions
169
+
170
+ Dieter Rams's 10 principles of good design (Vitsœ/Braun, 1970s–80s) applied as a self-audit lens. Each question maps to one principle.
171
+
172
+ - [ ] **Innovative** — Does this design solve the problem in a way that was not possible or obvious before?
173
+ - [ ] **Useful** — Does every element serve the primary function? Nothing decorative that doesn't earn its place?
174
+ - [ ] **Aesthetic** — Is the visual appearance the minimum necessary for legibility and emotional resonance?
175
+ - [ ] **Understandable** — Can the user figure out how to use this without reading documentation or a tooltip?
176
+ - [ ] **Unobtrusive** — Does the design stay in the background and let the content or task take focus?
177
+ - [ ] **Honest** — Does the design not imply capabilities, quality, or status that the product doesn't have?
178
+ - [ ] **Long-lasting** — Is this design free of trend-dependent choices (gradients, micro-styles) that will age in 12 months?
179
+ - [ ] **Thorough** — Have edge cases been considered and handled (empty states, error states, loading states, overflow text)?
180
+ - [ ] **Environmentally friendly** — Is the performance footprint minimal? (image sizes, JS bundle, font weight)
181
+ - [ ] **As little design as possible** — If you removed 20% of the design decisions, would the product be worse? If not, remove them.
182
+
183
+ ---
184
+
185
+ ## Sonner / Component-Authoring Lens — 6 Questions
186
+
187
+ Emil Kowalski's component-authoring principles applied as a per-component self-audit. Full reference: `reference/component-authoring.md`.
188
+
189
+ - [ ] **P-01 API surface** — Does this component work correctly in 1 line with zero configuration?
190
+ - [ ] **P-02 Composability** — Does this component compose via slots/children, not via style-configuration props?
191
+ - [ ] **P-03 Defaults** — Are the defaults so sensible that most consumers never need to pass any props?
192
+ - [ ] **P-04 Animation** — Does every animation in this component communicate a state change? No decorative loops?
193
+ - [ ] **P-05 Accessibility** — Does this component have a complete ARIA contract before any visual styling?
194
+ - [ ] **P-06 Edge honesty** — Are known failure modes documented with `// KNOWN:` or `// EDGE:` comments?
@@ -0,0 +1,184 @@
1
+ # Component Authoring Principles
2
+
3
+ Source: Emil Kowalski's work on Sonner, Vaul, and cmdk — synthesised from his published writing and talks. See also: `reference/framer-motion-patterns.md`, `reference/motion-advanced.md`.
4
+
5
+ Use this file when authoring, reviewing, or auditing UI components. The 6 principles apply as a lens during code review and design verification. Each principle has a grep-able audit signal.
6
+
7
+ ---
8
+
9
+ ## The 6 Principles
10
+
11
+ ### P-01: Minimal API Surface
12
+
13
+ > Expose only what the consumer needs. Every prop is a contract you must maintain forever.
14
+
15
+ A component with the right API surface works in 1 line for 80% of cases and 3 lines for 95% of cases. A component that requires 7 props for basic usage has too much surface.
16
+
17
+ **Audit signal:**
18
+ ```bash
19
+ # Count required (non-optional) props in a component interface
20
+ grep -E "^\s+\w+: " src/components/Button.tsx | grep -v "?" | wc -l
21
+ ```
22
+
23
+ **Thresholds:**
24
+ - ≤5 props total: excellent
25
+ - 6–9 props total: acceptable if logically grouped
26
+ - ≥10 props: flag for decomposition
27
+
28
+ **Pattern — variant over prop explosion:**
29
+ ```tsx
30
+ // BAD — prop explosion
31
+ <Button color="blue" size="md" rounded={true} shadow={true} uppercase={false} />
32
+
33
+ // GOOD — variant collapses 5 props to 1
34
+ <Button variant="primary" size="md" />
35
+ ```
36
+
37
+ ---
38
+
39
+ ### P-02: Composability Over Configuration
40
+
41
+ > Components should compose, not configure. Accepting `backgroundColor` or `textColor` is a sign the abstraction boundary is wrong.
42
+
43
+ The right abstraction lets consumers build what they need by combining small pieces, not by passing increasingly specific configuration. Slot-based APIs > configuration-object APIs.
44
+
45
+ **Audit signal:**
46
+ ```bash
47
+ # Configuration props that should be design tokens instead
48
+ grep -rE "(backgroundColor|textColor|borderRadius|fontSize)=" src/components/ --include="*.tsx"
49
+ ```
50
+
51
+ **Pattern — slot composition:**
52
+ ```tsx
53
+ // BAD — too much configuration
54
+ <Card title="Hello" subtitle="World" icon="user" rightContent={<Badge />} />
55
+
56
+ // GOOD — slot composition; parent controls layout
57
+ <Card>
58
+ <Card.Header>
59
+ <Card.Icon><UserIcon /></Card.Icon>
60
+ <Card.Title>Hello</Card.Title>
61
+ <Card.Subtitle>World</Card.Subtitle>
62
+ <Badge />
63
+ </Card.Header>
64
+ </Card>
65
+ ```
66
+
67
+ ---
68
+
69
+ ### P-03: Sensible Defaults
70
+
71
+ > The zero-config case should work and look correct. Options are for exceptions.
72
+
73
+ A component with sensible defaults doesn't require the consumer to know its internals. The defaults encode the design system's opinion about what "normal" looks like.
74
+
75
+ **Audit signal:**
76
+ ```bash
77
+ # Props with no default values (every prop is required = red flag)
78
+ grep -E "^\s+\w+: " src/components/Toast.tsx | grep -v "?" | wc -l
79
+ ```
80
+
81
+ **The Sonner model:** `<Toaster />` with zero props renders a toast system that follows the OS color scheme, positions correctly on all viewports, stacks properly, and auto-dismisses at a sensible duration. All options exist — but the zero-prop case works.
82
+
83
+ **Anti-pattern:** Required props for things with a logical default (e.g., `position` on a modal that should always default to `center`).
84
+
85
+ ---
86
+
87
+ ### P-04: Animation as State Communication
88
+
89
+ > Transitions communicate state change. They are not decoration. An animation that fires without a state change is noise.
90
+
91
+ Every motion in a component should answer: "What did the system just do?" If the animation doesn't have a clear answer, remove it.
92
+
93
+ **Audit signal:**
94
+ ```bash
95
+ # Animations not tied to state change (decorative loops = red flag)
96
+ grep -rE "animate.*loop|animation.*infinite|keyframes.*repeat" src/components/ --include="*.tsx"
97
+ ```
98
+
99
+ **The Sonner model:**
100
+ - Toast enters → communicates: "event occurred"
101
+ - Toast stacks → communicates: "multiple events queued"
102
+ - Toast exits → communicates: "event acknowledged or expired"
103
+ - No animation fires without a state change triggering it
104
+
105
+ **Thresholds:**
106
+ - All animations tied to state: excellent
107
+ - ≤1 decorative animation (e.g., a loading shimmer): acceptable
108
+ - ≥2 decorative animations: flag for review
109
+
110
+ See `reference/motion-advanced.md` for implementation patterns.
111
+
112
+ ---
113
+
114
+ ### P-05: Accessibility Before Visuals
115
+
116
+ > If a component isn't accessible by keyboard and screen reader, it isn't done. Accessibility is not a post-processing step.
117
+
118
+ Build the ARIA contract before the visual. The visual is a rendering of the semantic layer, not the other way around.
119
+
120
+ **Audit signal:**
121
+ ```bash
122
+ # Interactive divs/spans without ARIA role (missing semantic contract)
123
+ grep -rE "<(div|span)[^>]*onClick" src/components/ --include="*.tsx" | grep -v "role="
124
+ ```
125
+
126
+ **Required ARIA contracts by component type:**
127
+
128
+ | Component | Required attributes |
129
+ |---|---|
130
+ | Dialog / Modal | `role="dialog"`, `aria-modal="true"`, `aria-labelledby` |
131
+ | Combobox / Select | `role="combobox"`, `aria-expanded`, `aria-controls` |
132
+ | Menu | `role="menu"`, `role="menuitem"`, keyboard trap |
133
+ | Toast / Alert | `role="status"` (polite) or `role="alert"` (assertive) |
134
+ | Toggle / Switch | `role="switch"`, `aria-checked` |
135
+ | Tabs | `role="tablist"`, `role="tab"`, `role="tabpanel"`, `aria-selected` |
136
+ | Tooltip | `role="tooltip"`, `aria-describedby` on trigger |
137
+
138
+ ---
139
+
140
+ ### P-06: Edge Case Honesty
141
+
142
+ > Document the cases where the component fails. If you know it breaks with strings longer than 30 characters, say so.
143
+
144
+ Undocumented edge cases become production bugs. A component spec that acknowledges failure modes is more trustworthy than one that claims universal correctness.
145
+
146
+ **Audit signal:**
147
+ ```bash
148
+ # Look for documented edge cases
149
+ grep -rE "// KNOWN:|// EDGE:|// LIMIT:" src/components/ --include="*.tsx"
150
+ ```
151
+
152
+ **Template for component edge case documentation:**
153
+ ```tsx
154
+ // KNOWN: Toast title truncates at ~80 chars on 320px viewport; use short titles
155
+ // KNOWN: Stacking > 5 toasts simultaneously is unsupported; excess toasts are queued
156
+ // EDGE: If `duration` is set to Infinity, a visible dismiss button is required
157
+ ```
158
+
159
+ The presence of these comments is a quality signal, not a code smell. It means the author thought about the boundary conditions.
160
+
161
+ ---
162
+
163
+ ## Lens Application in Audits
164
+
165
+ When auditing a component, apply these six principles as a checklist:
166
+
167
+ | Principle | Pass condition | Fail condition |
168
+ |---|---|---|
169
+ | P-01 Minimal API | ≤9 props; zero-config case works | ≥10 props; required props for things with defaults |
170
+ | P-02 Composability | Slot-based composition; no style props | `backgroundColor`/`textColor` props present |
171
+ | P-03 Defaults | Zero-prop case renders correctly | Most props required for basic usage |
172
+ | P-04 Animation | All motion tied to state change | Decorative loops or orphaned animations present |
173
+ | P-05 Accessibility | ARIA contract complete; keyboard navigable | `onClick` on `div`; missing `role`; no keyboard trap |
174
+ | P-06 Edge honesty | Known limits documented with `// KNOWN:` | No documentation of failure modes |
175
+
176
+ ---
177
+
178
+ ## Wiring
179
+
180
+ **design-auditor:** Apply as an optional sub-check within Pillar 7 (Micro-Polish) for component-heavy UIs. Cite principle ID (P-01 through P-06) in findings.
181
+
182
+ **design-discussant:** In `--spec` mode, ask one component-authoring question per component under review: "For [ComponentName]: does the API surface expose only what consumers need, or are there configuration props that reveal implementation details?"
183
+
184
+ **design-verifier:** When verifying component-library phases, include P-01 through P-06 in the must-have checklist as a component quality gate.
@@ -0,0 +1,124 @@
1
+ # Emotional Design — Norman's Three Levels
2
+
3
+ Source: Don Norman, *Emotional Design: Why We Love (or Hate) Everyday Things* (2004). See also: `jnd.org`.
4
+
5
+ Use this file as a **cross-cutting scoring lens** in design audits and reflections. The three levels apply simultaneously to every design decision — they are not sequential stages.
6
+
7
+ ---
8
+
9
+ ## The Three Levels
10
+
11
+ ### Visceral Level
12
+
13
+ > The immediate, pre-cognitive, automatic reaction to sensory input.
14
+
15
+ The visceral level operates before the user thinks. It is driven by appearance, proportion, colour, texture — the aesthetic surface. A user who says "I don't know why, but this feels cheap" is responding at the visceral level.
16
+
17
+ **What it governs:**
18
+ - First impression within 50ms of page load (aesthetic-usability effect)
19
+ - Color palettes and their emotional valence
20
+ - Typography weight, roundness, and whitespace generosity
21
+ - Illustration style, photography tone, iconography personality
22
+ - Whether motion feels fluid or mechanical
23
+
24
+ **Audit signals:**
25
+ - Does the visual system convey the intended emotional register within 3 seconds?
26
+ - Are there conflicting visceral signals? (e.g., playful illustration + harsh red error banners)
27
+ - Does the `style-vocabulary.md` aesthetic type match the product's emotional promise?
28
+
29
+ **Scoring rubric (visceral):**
30
+
31
+ | Score | Evidence |
32
+ |---|---|
33
+ | 4 | Emotional register clear within 3s; no conflicting signals; references a named design authority |
34
+ | 3 | Clear emotional intent; 1–2 minor conflicts (e.g., one off-brand icon) |
35
+ | 2 | Ambiguous emotional register; mixed signals across surfaces |
36
+ | 1 | No discernible emotional intent; generic or template appearance |
37
+
38
+ ---
39
+
40
+ ### Behavioral Level
41
+
42
+ > The experience of use — whether actions feel controllable, predictable, and rewarding.
43
+
44
+ The behavioral level is what UX heuristics primarily address. It covers usability, feedback, error recovery, and responsiveness. A user who says "This is frustrating to use" is responding at the behavioral level.
45
+
46
+ **What it governs:**
47
+ - Interaction feedback (loading states, error messages, success confirmations)
48
+ - Control and reversibility (undo, cancel, back navigation)
49
+ - Response latency — the Doherty Threshold: feedback within 400ms
50
+ - Error prevention and recovery
51
+ - Learnability and consistency across screens
52
+
53
+ **Audit signals:**
54
+ - Can the user always tell what the system is doing? (H-01 Visibility)
55
+ - Are errors expressed as human problems with solutions? (H-09 Error Recovery)
56
+ - Is every action reversible within 5 seconds?
57
+ - Does the system respond within 400ms (Doherty Threshold)?
58
+
59
+ **Scoring rubric (behavioral):**
60
+
61
+ | Score | Evidence |
62
+ |---|---|
63
+ | 4 | All states visible; errors human + actionable; Doherty Threshold met; all destructive actions reversible |
64
+ | 3 | Most states covered; 1–2 feedback gaps that don't block task completion |
65
+ | 2 | Notable feedback gaps; some irreversible actions without warning |
66
+ | 1 | System status invisible; errors developer-facing; no undo for destructive actions |
67
+
68
+ ---
69
+
70
+ ### Reflective Level
71
+
72
+ > The conscious, post-use evaluation — meaning, narrative, and self-image.
73
+
74
+ The reflective level is where brand identity, storytelling, and pride of ownership live. A user who says "I love showing this tool to colleagues" is responding at the reflective level. This level takes the longest to build and the longest to repair when damaged.
75
+
76
+ **What it governs:**
77
+ - Whether the product aligns with the user's self-image
78
+ - Brand narrative consistency across all touchpoints
79
+ - Delight and surprise moments — not gimmicks; earned moments
80
+ - The **Peak** moment in the Peak-End Rule: the highest positive moment in the flow
81
+ - Long-term loyalty and word-of-mouth referral
82
+
83
+ **Audit signals:**
84
+ - Is there an identifiable "peak" moment in the primary user flow?
85
+ - Does the brand voice (from `brand-voice.md`) carry through to microcopy and empty states?
86
+ - Is there a designed completion state that communicates personality?
87
+ - Does the product give users a story to tell? (e.g., a completion screen, an achievement, a shareable output)
88
+
89
+ **Scoring rubric (reflective):**
90
+
91
+ | Score | Evidence |
92
+ |---|---|
93
+ | 4 | Identifiable designed peak moment; brand voice consistent from entry to completion; users have a story to tell |
94
+ | 3 | Brand voice present in most surfaces; peak moment implicit but not deliberately designed |
95
+ | 2 | Brand voice inconsistent; no designed peak; product is functional but forgettable |
96
+ | 1 | Generic experience; no emotional arc; could be any product in the category |
97
+
98
+ ---
99
+
100
+ ## Cross-Cutting Lens Application
101
+
102
+ Apply this lens as a **secondary overlay** after scoring the primary audit pillars. For each of the three levels:
103
+
104
+ 1. Identify 1–2 evidence items from the primary audit (e.g., Pillar 3 Color → Visceral Level)
105
+ 2. Note conflicts between levels (e.g., Behavioral score 4 but Visceral score 1 = technically functional but aesthetically repellent)
106
+ 3. Flag the weakest level as the highest-leverage improvement opportunity
107
+
108
+ **Common cross-level conflict patterns:**
109
+
110
+ | Conflict pattern | Diagnosis | Remedy |
111
+ |---|---|---|
112
+ | High behavioral, low visceral | Technically usable but aesthetically generic | Audit against `style-vocabulary.md`; commit to a stronger aesthetic type |
113
+ | High visceral, low behavioral | Beautiful but broken | Fix H-01, H-09 violations first — UX before aesthetics |
114
+ | High visceral + behavioral, low reflective | Polished but forgettable | Design a peak moment; review `brand-voice.md` emotional arc |
115
+
116
+ ---
117
+
118
+ ## Wiring
119
+
120
+ **design-auditor:** After pillar scoring, apply emotional-design lens as a cross-cutting overlay. Add `## Emotional Design Overlay` section to `DESIGN-AUDIT.md` with scores for all three levels and any cross-level conflict notes.
121
+
122
+ **design-reflector:** In Section 1 (What Surprised Us), flag if visceral vs behavioral scores diverge by ≥2 points — this is a leading indicator of the "beautiful but broken" pattern.
123
+
124
+ **design-discussant:** In `--spec` mode, include one reflective-level confidence-scored question: "What story does this product help the user tell about themselves?"
@@ -0,0 +1,89 @@
1
+ # First Principles — Invariant Design Constraints
2
+
3
+ > These are the three invariants that no design decision can override. They are facts about human biology and cognition, not preferences or conventions. Every design choice is downstream of these three constraints.
4
+
5
+ Use during the brief/discover stage (`design-discussant`) as a sanity check: does the proposed direction respect all three invariants? Use during verify as a reducibility check: can each element be removed without breaking the user's ability to complete their goal?
6
+
7
+ ---
8
+
9
+ ## Invariant 1: Body
10
+
11
+ The user has a physical body with physiological limits. No amount of design skill overrides human motor physiology.
12
+
13
+ **Principle → Code pairs:**
14
+
15
+ | Principle | Code Pattern |
16
+ |---|---|
17
+ | Touch targets must accommodate tremor and fat-finger error | `min-h-[44px] min-w-[44px]` on all interactive elements |
18
+ | Precision degrades with distance (Fitts's Law) | Destructive actions separated from primary actions by ≥24px or significantly smaller |
19
+ | Scroll fatigue is real | Sticky headers + back-to-top anchor for content > 3 viewport heights |
20
+ | Physical feedback confirms action | `scale(0.96)` press feedback on all clickable surfaces |
21
+ | Eye strain limits reading distance | Body text ≥16px; line-length 60–75ch |
22
+
23
+ **Reducibility check:** Can the user complete this task without a mouse? Without a precise pointer? On a 4-inch screen in a moving vehicle?
24
+
25
+ ---
26
+
27
+ ## Invariant 2: Attention
28
+
29
+ Attention is finite and non-renewable per unit of time. Every element on screen competes for the same fixed budget.
30
+
31
+ **Principle → Code pairs:**
32
+
33
+ | Principle | Code Pattern |
34
+ |---|---|
35
+ | Attention capacity: 5–9 items (Miller's Law) | Navigation: ≤7 top-level items; dropdown > 7 items gets search |
36
+ | Decision cost grows with choice count (Hick's Law) | Pricing: ≤3 tiers; feature lists: ≤4 items per group |
37
+ | One primary action per screen | Single `.btn-primary` per viewport; all others `.btn-secondary` or `.btn-ghost` |
38
+ | Animation hijacks attention | Motion only on state change; no decorative looping animations |
39
+ | Progressive disclosure reduces overload | Advanced options behind disclosure trigger, not visible by default |
40
+
41
+ **Reducibility check:** If you removed 30% of the elements on this screen, would task completion rate drop? If not, remove them.
42
+
43
+ ---
44
+
45
+ ## Invariant 3: Memory
46
+
47
+ Working memory holds approximately 7 items and degrades rapidly within seconds. Design that requires users to remember things between screens fails.
48
+
49
+ **Principle → Code pairs:**
50
+
51
+ | Principle | Code Pattern |
52
+ |---|---|
53
+ | Recognition over recall (H-06) | Visible navigation labels, not icon-only; breadcrumbs on deep paths |
54
+ | Context must be preserved | Multi-step forms: prior-step summary visible; form state not cleared on back-navigate |
55
+ | Error memory fades fast | Inline validation: errors adjacent to the field that caused them |
56
+ | Completion status reduces anxiety | Progress indicators: `Step 2 of 4`; Zeigarnik Effect — show percentage done |
57
+ | Last action should be reversible | Undo available for destructive/irreversible actions within 5 seconds |
58
+
59
+ **Reducibility check:** Does this screen require the user to remember something from a previous screen? If yes, surface that context inline.
60
+
61
+ ---
62
+
63
+ ## The Reducibility Test
64
+
65
+ For any proposed design element, apply in order:
66
+
67
+ 1. **Body test** — Is this element reachable by a person with limited motor precision on a small screen?
68
+ 2. **Attention test** — Does this element earn its place by directly supporting the primary task?
69
+ 3. **Memory test** — Does this element surface context the user would otherwise need to remember?
70
+
71
+ If an element fails all three tests, it is purely decorative. Decorative elements are not forbidden — but they are not invariant-justified, and they are the first candidates for removal when performance or clarity is at risk.
72
+
73
+ ---
74
+
75
+ ## Wiring to Design Discussant
76
+
77
+ When `design-discussant` runs the brief stage, it prepends this invariants question before the main interview:
78
+
79
+ > "Before we discuss the design direction, let me confirm three constraints: (1) Are there any accessibility requirements for motor-impaired users? (2) Is the primary use case on mobile or desktop — or both? (3) Are there any multi-step flows where the user must carry context between screens?"
80
+
81
+ Answers are recorded as D-XX decisions prefixed `[Invariant]` in STATE.md.
82
+
83
+ ---
84
+
85
+ ## Relationship to Other References
86
+
87
+ - `reference/heuristics.md` — H-01 through H-10 are the behavioral-level expression of Invariants 2 and 3
88
+ - `reference/emotional-design.md` — Invariant 1 (Body) maps to the Visceral level; Invariants 2–3 map to the Behavioral level
89
+ - `reference/component-authoring.md` — P-01 through P-06 are the component-level expression of all three invariants
@@ -181,6 +181,76 @@ People **remember incomplete tasks** better than completed ones. Implications:
181
181
 
182
182
  ---
183
183
 
184
+ ## Peak-End Rule
185
+
186
+ Users judge an experience primarily by how it felt at its most intense moment (the **peak**) and how it ended — not by the average across the whole session. Implications:
187
+ - Design a deliberate positive peak in every primary flow (e.g., a celebratory completion screen, an instant result, a delightful empty state).
188
+ - The **end state** of a flow matters disproportionately: the last screen the user sees shapes their memory of the whole interaction.
189
+ - Reduce negative peaks first (error states, loading hangs) — they weigh heavier than neutral moments.
190
+ - A long frustrating form followed by a satisfying completion screen is remembered more positively than a mildly annoying end to an otherwise smooth flow.
191
+
192
+ ---
193
+
194
+ ## Loss Aversion
195
+
196
+ Users feel the pain of loss approximately **twice as strongly** as the pleasure of an equivalent gain (Kahneman & Tversky). Implications:
197
+ - Frame CTAs around what users keep/save, not what they gain: "Don't lose your progress" over "Save your work."
198
+ - Subscription cancellation flows that show what the user will lose (features, data, streak) leverage loss aversion ethically to reduce churn — but only if the stated losses are real.
199
+ - Free trial countdowns ("3 days left") trigger loss aversion more effectively than benefit reminders.
200
+ - Destructive action confirmations should name what is lost: "Delete this project and all 47 files?" not just "Are you sure?"
201
+
202
+ ---
203
+
204
+ ## Cognitive Load Theory
205
+
206
+ Working memory is limited to approximately **7 ± 2 chunks** simultaneously (Miller, 1956) and degrades under conditions of stress, distraction, or novelty. Cognitive Load Theory (Sweller, 1988) distinguishes three types:
207
+
208
+ | Type | Definition | Design implication |
209
+ |---|---|---|
210
+ | **Intrinsic** | Load inherent to the task itself (complexity of the domain) | Cannot be reduced; must be scaffolded |
211
+ | **Extraneous** | Load imposed by poor design (navigation, unclear labels, visual noise) | Eliminate this completely |
212
+ | **Germane** | Load that builds understanding (learning, pattern recognition) | Preserve and support |
213
+
214
+ Practical rules:
215
+ - Every element of visual noise is extraneous load — remove it.
216
+ - New UI patterns create extraneous load (Jakob's Law); use platform conventions.
217
+ - Chunk complex tasks into steps of ≤3 decisions each.
218
+ - Error messages that require decoding ("Error 422") create extraneous load; plain language removes it.
219
+
220
+ ---
221
+
222
+ ## Aesthetic-Usability Effect
223
+
224
+ Users perceive **aesthetically pleasing designs as more usable**, even when functionality is identical — and this perception persists through initial usability problems. Implications:
225
+ - A polished visual appearance buys tolerance for minor UX rough edges in early releases.
226
+ - This effect is strongest on first impression; it degrades over time as behavioral friction compounds.
227
+ - The effect can mask genuine usability problems in user testing if participants rate overall satisfaction rather than task completion.
228
+ - Do NOT use the aesthetic-usability effect as a reason to defer fixing usability problems — it explains tolerance, not satisfaction.
229
+
230
+ ---
231
+
232
+ ## Doherty Threshold
233
+
234
+ A system that responds within **400ms** keeps users in a state of flow. Response times above 400ms cause users to shift attention, leading to a productivity drop that compounds with task complexity. Named after W.J. Doherty and R.H. Thadhani (IBM, 1982). Implications:
235
+ - Interactive responses (button click → visible feedback) must be ≤400ms.
236
+ - For operations > 400ms, show optimistic UI immediately and settle in the background.
237
+ - For operations > 1000ms, use a progress indicator.
238
+ - For operations > 10s, provide a way to continue other tasks (async notification on complete).
239
+ - Loading spinners that appear within 400ms reduce perceived wait; those that appear late increase it.
240
+
241
+ ---
242
+
243
+ ## Flow (Csikszentmihalyi)
244
+
245
+ Users enter a **flow state** when task difficulty matches their skill level exactly — high enough to engage, low enough to feel achievable. Flow is characterized by complete absorption, loss of time awareness, and intrinsic motivation. Implications:
246
+ - Progressive difficulty: onboarding tasks should be trivially easy; expert tasks should provide just enough challenge.
247
+ - Interruptions break flow permanently for that session; avoid modal interruptions in high-focus workflows.
248
+ - Clear goals + immediate feedback are the two design levers for inducing flow (H-01, H-05).
249
+ - Forms designed for flow: one question per screen, immediate validation, visible progress.
250
+ - Notification design: distinguish ambient notifications (don't break flow) from critical interruptions (must break flow).
251
+
252
+ ---
253
+
184
254
  ## How to Score During Verification
185
255
 
186
256
  For each NNG heuristic (H-01 through H-10), rate 0–4:
@@ -746,9 +746,198 @@ Fresh eyes catch what in-the-moment iteration misses. Animations feel correct wh
746
746
 
747
747
  ## Disney's 12 Principles — UX Mapping
748
748
 
749
- <!-- STUB: Disney's 12 Principles UX mapping Phase 19.6 will author this section -->
750
- <!-- Cross-reference: reference/motion-easings.md, reference/motion-spring.md -->
749
+ Original source: Frank Thomas & Ollie Johnston, *The Illusion of Life: Disney Animation* (1981). The 12 principles were developed for hand-drawn character animation; the UX mappings below translate each to interface motion.
751
750
 
752
- *This section is reserved for Phase 19.6 (Design Philosophy Layer). A full UX mapping of all 12 principles will be authored there and this stub will be replaced.*
751
+ ---
752
+
753
+ ### 1. Squash and Stretch
754
+
755
+ **Animation:** Objects deform under force — squash on impact, stretch during fast movement.
756
+
757
+ **UX mapping:** Scale feedback communicates physical weight and responsiveness.
758
+ ```tsx
759
+ // Press: squash slightly (wider, shorter)
760
+ // Release: snap back through scale(1.05) → scale(1)
761
+ <motion.button
762
+ whileTap={{ scaleX: 1.05, scaleY: 0.95 }}
763
+ transition={{ type: "spring", stiffness: 500, damping: 30 }}
764
+ />
765
+ ```
766
+ **Rule:** Constrain squash/stretch to ≤5% deviation — more reads as glitchy, not physical.
767
+
768
+ ---
769
+
770
+ ### 2. Anticipation
771
+
772
+ **Animation:** A small preparatory motion before the main action (e.g., a character bending knees before jumping).
773
+
774
+ **UX mapping:** Preview animations prime the user for what's about to happen.
775
+ ```tsx
776
+ // Drawer that "breathes" slightly before opening
777
+ <motion.div
778
+ animate={isOpen ? { x: 0 } : { x: -8 }}
779
+ initial={{ x: -8 }}
780
+ transition={{ type: "spring", stiffness: 300, damping: 24 }}
781
+ />
782
+ ```
783
+ **Rule:** Anticipation delays should be ≤80ms; longer delays read as lag, not anticipation.
784
+
785
+ ---
786
+
787
+ ### 3. Staging
788
+
789
+ **Animation:** Present one idea at a time; the primary action draws the eye; secondary elements are subordinate.
790
+
791
+ **UX mapping:** One primary motion per state change. All other motion is either absent or staggered to follow.
792
+ - Never animate two elements of equal visual weight simultaneously
793
+ - Use stagger to create a reading order for entering content
794
+ - The element the user acted on should move first
795
+
796
+ ---
797
+
798
+ ### 4. Straight Ahead vs Pose to Pose
799
+
800
+ **Animation:** Straight-ahead: draw each frame in sequence. Pose-to-pose: define key positions and interpolate.
801
+
802
+ **UX mapping:** All CSS transitions and spring animations are pose-to-pose by definition — you define start and end states. This means:
803
+ - Transitions retarget smoothly when interrupted (see CSS Transitions vs Keyframes section above)
804
+ - The in-between frames are computed by the engine, not designed
805
+ - Design the **poses** (states) carefully; the interpolation handles itself
806
+
807
+ ---
808
+
809
+ ### 5. Follow Through and Overlapping Action
810
+
811
+ **Animation:** Parts of an object continue moving after the main action stops; related elements finish at slightly different times.
812
+
813
+ **UX mapping:** Stagger exit animations and let secondary elements settle slightly after primary.
814
+ ```tsx
815
+ // List exit: items stagger out with slight delay between each
816
+ const container = {
817
+ exit: { transition: { staggerChildren: 0.04, staggerDirection: -1 } },
818
+ };
819
+ const item = {
820
+ exit: { opacity: 0, y: -8, transition: { duration: 0.2 } },
821
+ };
822
+ ```
823
+ **Rule:** Follow-through delay ≤60ms per level. Beyond this, the UI feels sluggish.
824
+
825
+ ---
826
+
827
+ ### 6. Slow In and Slow Out
828
+
829
+ **Animation:** Objects accelerate from rest and decelerate to a stop; they are never at constant velocity.
830
+
831
+ **UX mapping:** Never use `linear` easing for UI transitions. Always use a curve that starts slow, speeds up, and decelerates.
832
+ ```css
833
+ /* The standard Material/web ease — correct for most UI */
834
+ transition: transform 0.24s cubic-bezier(0.4, 0, 0.2, 1);
835
+
836
+ /* Enter (slow in) */
837
+ transition: transform 0.24s cubic-bezier(0, 0, 0.2, 1);
838
+
839
+ /* Exit (slow out) */
840
+ transition: transform 0.2s cubic-bezier(0.4, 0, 1, 1);
841
+ ```
842
+ **Rule:** `linear` easing is only valid for: scroll-driven animations tied to position, and progress bar fills.
843
+
844
+ ---
845
+
846
+ ### 7. Arcs
847
+
848
+ **Animation:** Objects in the real world move in slight arcs, not straight lines.
849
+
850
+ **UX mapping:** For spatial transitions (element moving from one position to another), a slight arc feels more natural than a straight-line translate. Achieved by animating both axes with slightly different timing:
851
+ ```tsx
852
+ <motion.div
853
+ initial={{ x: -40, y: 10, opacity: 0 }}
854
+ animate={{ x: 0, y: 0, opacity: 1 }}
855
+ transition={{
856
+ x: { type: "spring", stiffness: 300, damping: 28 },
857
+ y: { type: "spring", stiffness: 300, damping: 28, delay: 0.04 },
858
+ opacity: { duration: 0.2 },
859
+ }}
860
+ />
861
+ ```
862
+ **Rule:** Arcs apply only to spatial motion. Opacity, scale, and color changes do not arc.
863
+
864
+ ---
865
+
866
+ ### 8. Secondary Action
867
+
868
+ **Animation:** A supporting action that reinforces the primary one (e.g., a character's hair bouncing while they walk).
869
+
870
+ **UX mapping:** A small supplementary animation that confirms and amplifies the main interaction.
871
+ - Toast notification: icon pulses briefly after the toast appears (secondary action confirming the event)
872
+ - Success state: checkmark draws itself after the confirmation color appears
873
+ - Delete: item fades + the list count badge decrements with a small number-flip animation
874
+
875
+ **Rule:** Secondary actions must complete before or simultaneously with the primary — never after. They reinforce, not extend.
876
+
877
+ ---
878
+
879
+ ### 9. Timing
880
+
881
+ **Animation:** Duration communicates physical weight. Fast = light and snappy. Slow = heavy and significant.
882
+
883
+ **UX mapping:**
884
+
885
+ | Duration | Use for |
886
+ |---|---|
887
+ | 80–120ms | Micro-interactions: hover states, active states, icon swaps |
888
+ | 150–200ms | Standard component transitions: dropdowns, tooltips, toasts |
889
+ | 220–300ms | Page-level state changes, drawer open/close, modal appear |
890
+ | 300–500ms | Full-page route transitions |
891
+ | > 500ms | Reserved for intentionally cinematic moments only |
892
+
893
+ **Rule:** Match duration to the visual weight of the element. A small icon swap at 300ms feels lethargic; a full-page transition at 80ms feels jarring.
894
+
895
+ ---
896
+
897
+ ### 10. Exaggeration
898
+
899
+ **Animation:** Push key poses slightly beyond reality for emphasis and clarity.
900
+
901
+ **UX mapping:** Slight overshoot in spring animations communicates energy and intention.
902
+ ```tsx
903
+ // Slight overshoot via underdamped spring — not bouncy, but alive
904
+ <motion.div
905
+ animate={{ scale: 1 }}
906
+ transition={{ type: "spring", stiffness: 400, damping: 22, mass: 0.8 }}
907
+ />
908
+ // Peak scale ≈ 1.03–1.05 before settling — imperceptible consciously, felt physically
909
+ ```
910
+ **Rule:** Exaggeration in UI should be invisible when you're looking for it. If users notice the bounce, it's too much. Target spring `bounce` values of 0.1–0.2.
911
+
912
+ ---
913
+
914
+ ### 11. Solid Drawing
915
+
916
+ **Animation:** Characters have weight, depth, and obey perspective; they feel three-dimensional.
917
+
918
+ **UX mapping:** UI elements should feel visually grounded — not floating. Shadows, depth layering, and transform-origin choices communicate which layer an element lives on.
919
+ - Drawers and sheets slide from an edge — they feel physically attached
920
+ - Modals emerge from center or from the triggering element — they float above the page
921
+ - Tooltips appear near the cursor — they are attached to the pointer
922
+ - `transform-origin` must match where the element conceptually emerges from
923
+
924
+ ---
925
+
926
+ ### 12. Appeal
927
+
928
+ **Animation:** Characters have a quality that makes the audience want to watch them — not necessarily cute, but interesting.
929
+
930
+ **UX mapping:** Animation has personality that is consistent with the product's brand.
931
+
932
+ | Product type | Animation personality |
933
+ |---|---|
934
+ | Financial / serious tools | Crisp, minimal, sub-150ms, no bounce |
935
+ | Consumer apps | Warm, slightly slower, gentle ease-out |
936
+ | Playful / creative tools | Spring physics, slight overshoot, expressive icon animations |
937
+ | Data dashboards | Smooth, purposeful, transitions that reveal data sequentially |
938
+
939
+ **Rule:** Animation personality must be decided once per product and applied consistently. Mixed personalities (snappy in one area, bouncy in another) destroy cohesion.
940
+
941
+ ---
753
942
 
754
943
  See also: `reference/motion-easings.md`, `reference/motion-spring.md`, `reference/framer-motion-patterns.md`
@@ -3,6 +3,27 @@
3
3
  "version": 1,
4
4
  "generated_at": "2026-04-24T00:00:00.000Z",
5
5
  "entries": [
6
+ {
7
+ "name": "component-authoring",
8
+ "path": "reference/component-authoring.md",
9
+ "type": "heuristic",
10
+ "phase": 19.6,
11
+ "description": "Kowalski/Sonner 6-principle component quality standard (P-01 Minimal API, P-02 Composability, P-03 Defaults, P-04 Animation as State, P-05 Accessibility First, P-06 Edge Honesty) with grep-able audit signals"
12
+ },
13
+ {
14
+ "name": "emotional-design",
15
+ "path": "reference/emotional-design.md",
16
+ "type": "heuristic",
17
+ "phase": 19.6,
18
+ "description": "Don Norman's visceral/behavioral/reflective three-level cross-cutting scoring lens with per-level rubrics and cross-level conflict patterns"
19
+ },
20
+ {
21
+ "name": "first-principles",
22
+ "path": "reference/first-principles.md",
23
+ "type": "heuristic",
24
+ "phase": 19.6,
25
+ "description": "3-invariant framework (body/attention/memory) with grep-able principle→code pairs and reducibility test; wired into design-discussant brief stage"
26
+ },
6
27
  {
7
28
  "name": "DEPRECATIONS",
8
29
  "path": "reference/DEPRECATIONS.md",
@@ -26,6 +26,16 @@ Do not reorder. Do not inline this preamble. Do not splice dynamic content ahead
26
26
 
27
27
  The `/gdd:warm-cache` command (ships in Plan 10.1-02) pre-warms this identical prefix in the Anthropic cache before a design sprint, so the first real agent spawn of the sprint is already a cache hit on the shared-preamble bytes. You do not need to do anything special to participate — just keep the import directive at the top of your body.
28
28
 
29
+ ## Design Philosophy Layer (Phase 19.6)
30
+
31
+ The framework is anchored to three design philosophy references that agents may read during brief, audit, and verify stages:
32
+
33
+ - `reference/first-principles.md` — 3-invariant framework (body, attention, memory); reducibility test for every design element
34
+ - `reference/emotional-design.md` — Norman's visceral / behavioral / reflective cross-cutting scoring lens
35
+ - `reference/component-authoring.md` — Kowalski/Sonner 6-principle component quality standard (P-01 through P-06)
36
+
37
+ These references encode *why* the heuristics and anti-patterns exist — not rules to follow, but constraints derived from human biology and cognition. Agents that read these files apply them as lenses, not checklists.
38
+
29
39
  ---
30
40
 
31
41
  *Imported by: every file under `agents/*.md` (except `agents/README.md`). Maintained as part of Phase 10.1 (OPT-07) and Phase 14.5 (L0/L2 split). Edits to this file affect every agent simultaneously — verify across the full agent suite before committing.*