@bastani/atomic 0.9.11-alpha.6 → 0.9.11-alpha.7

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 (140) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/package.json +1 -1
  5. package/dist/builtin/web-access/package.json +1 -1
  6. package/dist/builtin/workflows/package.json +1 -1
  7. package/dist/builtin/workflows/skills/impeccable/SKILL.md +33 -129
  8. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +11 -3
  9. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +26 -0
  10. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +35 -0
  11. package/dist/builtin/workflows/skills/impeccable/reference/android.md +1 -1
  12. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +72 -189
  13. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +10 -9
  14. package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
  15. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +19 -108
  16. package/dist/builtin/workflows/skills/impeccable/reference/clarify.md +59 -253
  17. package/dist/builtin/workflows/skills/impeccable/reference/colorize.md +51 -222
  18. package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +45 -0
  19. package/dist/builtin/workflows/skills/impeccable/reference/craft.md +3 -121
  20. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +28 -20
  21. package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +97 -0
  22. package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +23 -0
  23. package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +32 -0
  24. package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  25. package/dist/builtin/workflows/skills/impeccable/reference/delight.md +47 -279
  26. package/dist/builtin/workflows/skills/impeccable/reference/distill.md +2 -2
  27. package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +53 -0
  28. package/dist/builtin/workflows/skills/impeccable/reference/document.md +60 -73
  29. package/dist/builtin/workflows/skills/impeccable/reference/harden.md +1 -12
  30. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +17 -4
  31. package/dist/builtin/workflows/skills/impeccable/reference/init.md +64 -163
  32. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +1 -1
  33. package/dist/builtin/workflows/skills/impeccable/reference/layout.md +52 -153
  34. package/dist/builtin/workflows/skills/impeccable/reference/live.md +44 -32
  35. package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +105 -0
  36. package/dist/builtin/workflows/skills/impeccable/reference/{product.md → operate.md} +6 -5
  37. package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +4 -4
  38. package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -4
  39. package/dist/builtin/workflows/skills/impeccable/reference/polish.md +68 -212
  40. package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
  41. package/dist/builtin/workflows/skills/impeccable/reference/routing.md +18 -0
  42. package/dist/builtin/workflows/skills/impeccable/reference/shape.md +38 -144
  43. package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +48 -269
  44. package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +38 -0
  45. package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +1 -1
  46. package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +584 -0
  47. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +117 -9
  48. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +486 -59
  49. package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +16 -45
  50. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +96 -10
  51. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +143 -26
  52. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +181 -12
  53. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +3187 -182
  54. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +102 -7
  55. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +282 -70
  56. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +183 -15
  57. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +22 -7
  58. package/dist/builtin/workflows/skills/impeccable/scripts/detector/findings.mjs +7 -1
  59. package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +16 -2
  60. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +155 -42
  61. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2988 -155
  62. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/constants.mjs +11 -0
  63. package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +336 -0
  64. package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +232 -0
  65. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +90 -10
  66. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +410 -78
  67. package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +25 -8
  68. package/dist/builtin/workflows/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
  69. package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +165 -0
  70. package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +329 -0
  71. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +20 -5
  72. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-paths.mjs +16 -8
  73. package/dist/builtin/workflows/skills/impeccable/scripts/lib/provider.mjs +1 -0
  74. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +455 -0
  75. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
  76. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +457 -0
  77. package/dist/builtin/workflows/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
  78. package/dist/builtin/workflows/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
  79. package/dist/builtin/workflows/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
  80. package/dist/builtin/workflows/skills/impeccable/scripts/live/completion.mjs +10 -1
  81. package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +15 -0
  82. package/dist/builtin/workflows/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
  83. package/dist/builtin/workflows/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
  84. package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +109 -32
  85. package/dist/builtin/workflows/skills/impeccable/scripts/live/source-lock.mjs +105 -0
  86. package/dist/builtin/workflows/skills/impeccable/scripts/live/source-search.mjs +105 -0
  87. package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +8 -6
  88. package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
  89. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +208 -68
  90. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +563 -112
  91. package/dist/builtin/workflows/skills/impeccable/scripts/live-commit-manual-edits.mjs +3 -0
  92. package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +198 -13
  93. package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +24 -6
  94. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +6 -1
  95. package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +44 -14
  96. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +398 -33
  97. package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +9 -5
  98. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +81 -67
  99. package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +7 -2
  100. package/dist/builtin/workflows/skills/impeccable/scripts/palette.mjs +76 -81
  101. package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +2 -2
  102. package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +890 -0
  103. package/dist/builtin/workflows/skills/impeccable/scripts/surface-brief.mjs +74 -0
  104. package/dist/builtin/workflows/src/extension/index.bundle.mjs +201 -22
  105. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +23 -9
  106. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +1 -0
  107. package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +20 -5
  108. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +10 -0
  109. package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +86 -0
  110. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +6 -2
  111. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +19 -13
  112. package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +8 -0
  113. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +16 -0
  114. package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +121 -0
  115. package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +42 -0
  116. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +16 -0
  117. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +4 -0
  118. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  119. package/dist/modes/interactive/components/chat-session-host-actions.js +2 -14
  120. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  121. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  122. package/dist/modes/interactive/components/chat-session-host-events.js +9 -0
  123. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  124. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +25 -0
  125. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  126. package/dist/modes/interactive/components/chat-session-host-runtime.js +53 -0
  127. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  128. package/dist/modes/interactive/components/chat-session-host.d.ts +13 -0
  129. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  130. package/dist/modes/interactive/components/chat-session-host.js +22 -1
  131. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  132. package/dist/modes/interactive/interactive-agent-events.js +9 -3
  133. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  134. package/docs/tui.md +7 -2
  135. package/docs/workflows.md +1 -1
  136. package/npm-shrinkwrap.json +23 -23
  137. package/package.json +2 -2
  138. package/dist/builtin/workflows/skills/impeccable/reference/brand.md +0 -108
  139. package/dist/builtin/workflows/skills/impeccable/reference/codex.md +0 -105
  140. package/dist/builtin/workflows/skills/impeccable/reference/interaction-design.md +0 -189
@@ -1,257 +1,86 @@
1
1
  > **Additional context needed**: existing brand colors.
2
2
 
3
- Replace timid grayscale or single-accent designs with a strategic palette: pick a color strategy, choose a hue family that fits the brand, then apply color with intent. More color ≠ better. Strategic color beats rainbow vomit.
3
+ Introduce color as hierarchy, meaning, and atmosphere. Preserve confirmed brand and semantic conventions; do not replace a visual world under the guise of colorizing it.
4
4
 
5
5
  ---
6
6
 
7
- ## Register
7
+ ## Visitor mode
8
8
 
9
- Brand: palette IS voice. Pick a color strategy first per SKILL.md (Restrained / Committed / Full palette / Drenched) and follow its dosage. Committed, Full palette, and Drenched deliberately exceed the ≤10% rule; that rule is Restrained only. Unexpected combinations are allowed; a dominant color can own the page when the chosen strategy calls for it.
9
+ - **Persuade + Experience:** color may carry the voice and own large regions when the selected world calls for it.
10
+ - **Operate + Read:** color primarily encodes action, selection, status, wayfinding, and reading hierarchy. Rarity gives an accent force.
10
11
 
11
- Product: semantic-first and almost always Restrained. Accent color is reserved for primary action, current selection, and state indicators. Not decoration. Every color has a consistent meaning across every screen.
12
+ ## Audit before choosing
12
13
 
13
- ---
14
-
15
- ## Assess Color Opportunity
16
-
17
- Analyze the current state and identify opportunities:
18
-
19
- 1. **Understand current state**:
20
- - **Color absence**: Pure grayscale? Limited neutrals? One timid accent?
21
- - **Missed opportunities**: Where could color add meaning, hierarchy, or delight?
22
- - **Context**: What's appropriate for this domain and audience?
23
- - **Brand**: Are there existing brand colors we should use?
24
-
25
- 2. **Identify where color adds value**:
26
- - **Semantic meaning**: Success (green), error (red), warning (yellow/orange), info (blue)
27
- - **Hierarchy**: Drawing attention to important elements
28
- - **Categorization**: Different sections, types, or states
29
- - **Emotional tone**: Warmth, energy, trust, creativity
30
- - **Wayfinding**: Helping users navigate and understand structure
31
- - **Delight**: Moments of visual interest and personality
32
-
33
- If any of these are unclear from the codebase, STOP and use Codex's structured user-input/question tool when available; if unavailable, ask directly in chat to clarify what you cannot infer.
34
-
35
- **CRITICAL**: More color ≠ better. Strategic color beats rainbow vomit every time. Every color should have a purpose.
36
-
37
- ## Plan Color Strategy
38
-
39
- Create a purposeful color introduction plan:
40
-
41
- - **Color palette**: What colors match the brand/context? (Choose 2-4 colors max beyond neutrals)
42
- - **Dominant color**: Which color owns 60% of colored elements?
43
- - **Accent colors**: Which colors provide contrast and highlights? (30% and 10%)
44
- - **Application strategy**: Where does each color appear and why?
45
-
46
- **IMPORTANT**: Color should enhance hierarchy and meaning, not create chaos. Less is more when it matters more.
47
-
48
- ## Introduce Color Strategically
49
-
50
- Add color systematically across these dimensions:
51
-
52
- ### Semantic Color
53
- - **State indicators**:
54
- - Success: Green tones (emerald, forest, mint)
55
- - Error: Red/pink tones (rose, crimson, coral)
56
- - Warning: Orange/amber tones
57
- - Info: Blue tones (sky, ocean, indigo)
58
- - Neutral: Gray/slate for inactive states
59
-
60
- - **Status badges**: Colored backgrounds or borders for states (active, pending, completed, etc.)
61
- - **Progress indicators**: Colored bars, rings, or charts showing completion or health
14
+ Read DESIGN.md, tokens, assets, current themes, and representative states. Identify:
62
15
 
63
- ### Accent Color Application
64
- - **Primary actions**: Color the most important buttons/CTAs
65
- - **Links**: Add color to clickable text (maintain accessibility)
66
- - **Icons**: Colorize key icons for recognition and personality
67
- - **Headers/titles**: Add color to section headers or key labels
68
- - **Hover states**: Introduce color on interaction
16
+ - which colors are confirmed brand commitments;
17
+ - current surface, text, action, and semantic roles;
18
+ - places where grayscale obscures hierarchy or state;
19
+ - contrast failures and color-only communication;
20
+ - light/dark or data-visualization requirements;
21
+ - whether the task asks for more color or a new identity.
69
22
 
70
- ### Background & Surfaces
71
- - **Tinted backgrounds**: If you replace pure gray, tint toward the brand hue, not toward a generic-warm-or-cool pair. The default-warm-tint (`oklch(97% 0.01 60)` and its neighbors) is now the AI cream/sand giveaway. Be specific to the brand or stay neutral.
72
- - **Colored sections**: Use subtle background colors to separate areas
73
- - **Gradient backgrounds**: Add depth with subtle, intentional gradients (not generic purple-blue)
74
- - **Cards & surfaces**: Tint cards or surfaces toward the brand, not "for warmth" by reflex
23
+ If a new identity is required, use [new-work.md](new-work.md). Ask only when a binding brand decision cannot be inferred.
75
24
 
76
- **Use OKLCH for color**: It's perceptually uniform, meaning equal steps in lightness *look* equal. Great for generating harmonious scales.
25
+ ## Choose a strategy
77
26
 
78
- ### Data Visualization
79
- - **Charts & graphs**: Use color to encode categories or values
80
- - **Heatmaps**: Color intensity shows density or importance
81
- - **Comparison**: Color coding for different datasets or timeframes
27
+ Name the intended emotional temperature, dominant relationship, contrast range, and color dosage before editing. The strategy may be restrained or immersive; it must follow the brief and selected world rather than a fixed percentage rule.
82
28
 
83
- ### Borders & Accents
84
- - **Hairline borders**: 1px colored borders on full perimeter (not side-stripes; see the absolute ban on `border-left/right > 1px`)
85
- - **Underlines**: Color underlines for emphasis or active states
86
- - **Dividers**: Subtle colored dividers instead of gray lines
87
- - **Focus rings**: Colored focus indicators matching brand
88
- - **Surface tints**: A 4-8% background wash of the accent color instead of a stripe
29
+ Build roles, not a bag of swatches:
89
30
 
90
- **NEVER**: `border-left` or `border-right` greater than 1px as a colored accent stripe. This is one of the three absolute bans in the parent skill. If you want to mark a card as "active" or "warning", use a full hairline border, a background tint, a leading glyph, or a numbered prefix. Not a side stripe.
31
+ - canvas and elevated surfaces;
32
+ - primary and secondary text;
33
+ - action, focus, and selection;
34
+ - borders and separators;
35
+ - success, warning, error, and information;
36
+ - data categories or scales when needed.
91
37
 
92
- ### Typography Color
93
- - **Colored headings**: Use brand colors for section headings (maintain contrast)
94
- - **Highlight text**: Color for emphasis or categories
95
- - **Labels & tags**: Small colored labels for metadata or categories
38
+ Use the project's existing color space. For a new web palette, prefer OKLCH because lightness and chroma can be adjusted predictably. Choose hue from product meaning and visual direction, never from a default category association.
96
39
 
97
- ### Decorative Elements
98
- - **Illustrations**: Add colored illustrations or icons
99
- - **Shapes**: Geometric shapes in brand colors as background elements
100
- - **Gradients**: Colorful gradient overlays or mesh backgrounds
101
- - **Blobs/organic shapes**: Soft colored shapes for visual interest
40
+ ## Apply at system scale
102
41
 
103
- ## Balance & Refinement
42
+ - Let the strongest color own a deliberate region or role instead of scattering tiny accents.
43
+ - Keep the primary action easy to find; do not spend its color on decoration.
44
+ - Tint neutrals only when the brand hue genuinely creates cohesion. Neutral gray is valid when it serves the world.
45
+ - On colored surfaces, derive secondary text from the foreground or surface hue rather than using washed-out generic gray.
46
+ - Keep semantic meanings consistent, but respect platform and domain conventions instead of assuming fixed hues.
47
+ - For data, use distinct lightness, chroma, shape, label, or pattern so color is not the only code.
48
+ - In dark mode, design surface elevation and contrast explicitly; do not invert the light theme mechanically.
49
+ - Define primitive values and semantic tokens when the project has a token system. Theme changes should normally remap semantic roles.
104
50
 
105
- Ensure color addition improves rather than overwhelms:
51
+ Decoration without a relationship to hierarchy, state, content, or the visual world is not a color strategy.
106
52
 
107
- ### Maintain Hierarchy
108
- - **Dominant color** (60%): Primary brand color or most used accent
109
- - **Secondary color** (30%): Supporting color for variety
110
- - **Accent color** (10%): High contrast for key moments
111
- - **Neutrals** (remaining): Gray/black/white for structure
53
+ ## Contrast and perception
112
54
 
113
- ### Accessibility
114
- - **Contrast ratios**: Ensure WCAG compliance (4.5:1 for text, 3:1 for UI components)
115
- - **Don't rely on color alone**: Use icons, labels, or patterns alongside color
116
- - **Test for color blindness**: Verify red/green combinations work for all users
55
+ Verify computed foreground/background pairs:
117
56
 
118
- ### Cohesion
119
- - **Consistent palette**: Use colors from defined palette, not arbitrary choices
120
- - **Systematic application**: Same color meanings throughout (green always = success)
121
- - **Temperature consistency**: Warm palette stays warm, cool stays cool
57
+ | Content | WCAG AA minimum |
58
+ |---|---|
59
+ | body text | 4.5:1 |
60
+ | large text | 3:1 |
61
+ | controls, icons, focus indicators | 3:1 |
122
62
 
123
- **NEVER**:
124
- - Use every color in the rainbow (choose 2-4 colors beyond neutrals)
125
- - Apply color randomly without semantic meaning
126
- - Put gray text on colored backgrounds. It looks washed out; use a darker shade of the background color or transparency instead
127
- - Violate WCAG contrast requirements
128
- - Use color as the only indicator (accessibility issue)
129
- - Make everything colorful (defeats the purpose)
130
- - Default to purple-blue gradients (AI slop aesthetic)
63
+ Do not rely on eyesight alone. Check interactive states, overlays, text on images, disabled content, and both themes. Simulate common vision deficiencies. Information conveyed by color also needs text, shape, iconography, or position.
131
64
 
132
- ## Verify Color Addition
65
+ When deriving OKLCH ramps, vary lightness and reduce chroma near white and black. Do not keep high chroma at extreme lightness merely to make the math uniform. Prefer explicit colors over chains of translucent overlays when alpha would make contrast context-dependent.
133
66
 
134
- Test that colorization improves the experience:
67
+ ## Verify
135
68
 
136
- - **Better hierarchy**: Does color guide attention appropriately?
137
- - **Clearer meaning**: Does color help users understand states/categories?
138
- - **More engaging**: Does the interface feel warmer and more inviting?
139
- - **Still accessible**: Do all color combinations meet WCAG standards?
140
- - **Not overwhelming**: Is color balanced and purposeful?
69
+ - Every color has a stable role or a world-specific atmospheric purpose.
70
+ - Attention lands on the intended action, content, or state.
71
+ - The palette works across quiet, dense, interactive, error, and empty states.
72
+ - Light and dark themes are each composed, not mechanically inverted.
73
+ - Contrast and non-color cues pass in all relevant states.
74
+ - The result is recognizably this product, not a generic “colorful” treatment.
141
75
 
142
76
  When the palette earns its place, hand off to `$impeccable polish` for the final pass.
143
77
 
144
78
  ## Live-mode signature params
145
79
 
146
- When invoked from live mode, each variant MUST declare a `color-amount` param so the user can dial between a restrained accent and a drenched surface without regeneration. Author the variant's CSS against `var(--p-color-amount, 0.5)`, typically as the alpha multiplier on backgrounds, or as a scaling factor on the chroma axis in an OKLCH expression. 0 = neutral/monochrome, 1 = full saturation / dominant coverage.
80
+ When invoked from live mode, every variant declares a `color-amount` parameter. Author CSS against `var(--p-color-amount, 0.5)` so the user can move from neutral to the variant's full color strategy without regeneration.
147
81
 
148
82
  ```json
149
83
  {"id":"color-amount","kind":"range","min":0,"max":1,"step":0.05,"default":0.5,"label":"Color amount"}
150
84
  ```
151
85
 
152
- Layer 1-2 variant-specific params on top: palette selection (`steps` with named options), temperature warmth, or tint vs. true color. See `reference/live.md` for the full params contract.
153
-
154
- ---
155
-
156
- ## Reference Material
157
-
158
- The sections below were previously `color-and-contrast.md` and live inline now so the colorize flow has its deep color reference in one place.
159
-
160
- ### Color & Contrast
161
-
162
- #### Color Spaces: Use OKLCH
163
-
164
- **Stop using HSL.** Use OKLCH (or LCH) instead. It's perceptually uniform, meaning equal steps in lightness *look* equal, unlike HSL where 50% lightness in yellow looks bright while 50% in blue looks dark.
165
-
166
- The OKLCH function takes three components: `oklch(lightness chroma hue)` where lightness is 0-100%, chroma is roughly 0-0.4, and hue is 0-360. To build a primary color and its lighter / darker variants, hold the chroma+hue roughly constant and vary the lightness, but **reduce chroma as you approach white or black**, because high chroma at extreme lightness looks garish.
167
-
168
- The hue you pick is a brand decision and should not come from a default. Do not reach for blue (hue 250) or warm orange (hue 60) by reflex; those are the dominant AI-design defaults, not the right answer for any specific brand.
169
-
170
- #### Building Functional Palettes
171
-
172
- ##### Tinted Neutrals
173
-
174
- **Pure gray is dead.** A neutral with zero chroma feels lifeless next to a colored brand. Add a tiny chroma value (0.005-0.015) to all your neutrals, hued toward whatever your brand color is. The chroma is small enough not to read as "tinted" consciously, but it creates subconscious cohesion between brand color and UI surfaces.
175
-
176
- The hue you tint toward should come from THIS project's brand, not from a "warm = friendly, cool = tech" formula. If your brand color is teal, your neutrals lean toward teal. If your brand color is amber, they lean toward amber. The point is cohesion with the SPECIFIC brand, not a stock palette.
177
-
178
- **Avoid** the trap of always tinting toward warm orange or always tinting toward cool blue. Those are the two laziest defaults and they create their own monoculture across projects.
179
-
180
- ##### Palette Structure
181
-
182
- A complete system needs:
183
-
184
- | Role | Purpose | Example |
185
- |------|---------|---------|
186
- | **Primary** | Brand, CTAs, key actions | 1 color, 3-5 shades |
187
- | **Neutral** | Text, backgrounds, borders | 9-11 shade scale |
188
- | **Semantic** | Success, error, warning, info | 4 colors, 2-3 shades each |
189
- | **Surface** | Cards, modals, overlays | 2-3 elevation levels |
190
-
191
- **Skip secondary/tertiary unless you need them.** Most apps work fine with one accent color. Adding more creates decision fatigue and visual noise.
192
-
193
- ##### The 60-30-10 Rule (Applied Correctly)
194
-
195
- This rule is about **visual weight**, not pixel count:
196
-
197
- - **60%**: Neutral backgrounds, white space, base surfaces
198
- - **30%**: Secondary colors: text, borders, inactive states
199
- - **10%**: Accent: CTAs, highlights, focus states
200
-
201
- The common mistake: using the accent color everywhere because it's "the brand color." Accent colors work *because* they're rare. Overuse kills their power.
202
-
203
- #### Contrast & Accessibility
204
-
205
- ##### WCAG Requirements
206
-
207
- | Content Type | AA Minimum | AAA Target |
208
- |--------------|------------|------------|
209
- | Body text | 4.5:1 | 7:1 |
210
- | Large text (18px+ or 14px bold) | 3:1 | 4.5:1 |
211
- | UI components, icons | 3:1 | 4.5:1 |
212
- | Non-essential decorations | None | None |
213
-
214
- ##### Dangerous Color Combinations
215
-
216
- These commonly fail contrast or cause readability issues:
217
-
218
- - Light gray text on white (the #1 accessibility fail)
219
- - Red text on green background (or vice versa): 8% of men can't distinguish these
220
- - Blue text on red background (vibrates visually)
221
- - Yellow text on white (almost always fails)
222
- - Thin light text on images (unpredictable contrast)
223
-
224
- ##### Testing
225
-
226
- Don't trust your eyes. Use tools:
227
-
228
- - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
229
- - Browser DevTools → Rendering → Emulate vision deficiencies
230
- - [Polypane](https://polypane.app/) for real-time testing
231
-
232
- #### Theming: Light & Dark Mode
233
-
234
- ##### Dark Mode Is Not Inverted Light Mode
235
-
236
- You can't just swap colors. Dark mode requires different design decisions:
237
-
238
- | Light Mode | Dark Mode |
239
- |------------|-----------|
240
- | Shadows for depth | Lighter surfaces for depth (no shadows) |
241
- | Dark text on light | Light text on dark (reduce font weight) |
242
- | Vibrant accents | Desaturate accents slightly |
243
- | White backgrounds | Either pure black or a deep surface that fits the brand (a brand-tinted near-black at oklch 12-18% works too) |
244
-
245
- In dark mode, depth comes from surface lightness, not shadow. Build a 3-step surface scale where higher elevations are lighter (e.g. 15% / 20% / 25% lightness). Use the SAME hue and chroma as your brand color (whatever it is for THIS project; do not reach for blue) and only vary the lightness. Reduce body text weight slightly (e.g. 350 instead of 400) because light text on dark reads as heavier than dark text on light.
246
-
247
- ##### Token Hierarchy
248
-
249
- Use two layers: primitive tokens (`--blue-500`) and semantic tokens (`--color-primary: var(--blue-500)`). For dark mode, only redefine the semantic layer; primitives stay the same.
250
-
251
- #### Alpha Is A Design Smell
252
-
253
- Heavy use of transparency (rgba, hsla) usually means an incomplete palette. Alpha creates unpredictable contrast, performance overhead, and inconsistency. Define explicit overlay colors for each context instead. Exception: focus rings and interactive states where see-through is needed.
254
-
255
- ---
256
-
257
- **Avoid**: Relying on color alone to convey information. Creating palettes without clear roles for each color. Skipping color blindness testing (8% of men affected).
86
+ Add at most two variant-specific parameters, such as palette, temperature, or tint behavior. Follow [live.md](live.md)'s parameter contract.
@@ -0,0 +1,45 @@
1
+ # Craft floor
2
+
3
+ Load this after the direction is settled, and build without announcing the checklist. A pinned brief or the committed visual world overrides anything here; your own habit does not. When the design hook is active it already enforces the mechanical checks below as you edit: act on its findings instead of re-auditing each rule.
4
+
5
+ ## Verify
6
+
7
+ Each of these is a check on the built result, not an intention. Run them together in the batched inspection rounds, not as separate screenshot trips; the checks share one render.
8
+
9
+ - **Contrast:** body and placeholder text ≥4.5:1, large text ≥3:1. On colored surfaces tint secondary text from that hue or the foreground; never gray.
10
+ - **Depth:** shadows carry an offset and a soft blur. A zero-offset colored halo is decoration.
11
+ - **Spacing:** tight groups, generous separation, more space above a heading than below it. Read the computed values.
12
+ - **Type:** body measure 65–75ch, display max 6rem, tracking floor -0.04em, balanced headings, obvious scale and weight steps. Run the real copy at every breakpoint and fix what overflows.
13
+ - **Motion:** one authored moment, not scattered effects and not one identical entrance on every section. Exponential ease-out from an already-visible default. Reach past transform and opacity: blur, backdrop-filter, clip-path, mask, and shadow belong to the palette when they stay smooth.
14
+ - **States:** hover, disabled, loading, error, empty. Plus real content, working controls, responsive composition, keyboard focus.
15
+ - **Copy:** the product's own language. Controls name their action; errors name the problem and the recovery.
16
+ - **Coverage:** every brief requirement present and findable within seconds.
17
+
18
+ ## Refuse
19
+
20
+ These are the category's defaults, not bans: the brief's own words can earn any of them. Reaching for one when the axis is free means you were not deciding; recognizing that means rewriting the element, not softening it.
21
+
22
+ Page scaffolds:
23
+
24
+ - Same-size cards of icon plus heading plus text as the page structure. Cards are the lazy container; nested cards are always wrong.
25
+ - The hero-metric template: big number, small label, supporting stats, accent.
26
+ - A kicker or eyebrow above a heading. This one is a ban, not a default: no brief earns it back. The heading carries its own weight; delete the label and let the heading speak.
27
+ - Section numbers (01 / 02 / 03) unless the sequence itself carries information the reader needs.
28
+ - A modal for a task that needs neither interruption nor protected focus.
29
+
30
+ Surface habits:
31
+
32
+ - Gradient text. Emphasis comes from weight or size.
33
+ - Glass and blur as decoration rather than as a specific effect.
34
+ - A colored `border-left` or `border-right` above 1px on cards, list items, callouts, or alerts.
35
+ - Sparklines, progress rings, and soft-shadowed rounded rectangles standing in for content.
36
+ - Monospace as a costume for "technical" rather than for code, data, or measurement.
37
+ - Light or dark picked by category. Pick it from the use scene: who, where, under what ambient light.
38
+
39
+ - Tracking stops at -0.04em. -0.02 to -0.03em usually reads better.
40
+ - Declare elevation once, border or shadow. A 1px border under a wide soft shadow is the ghost card. Card radii stay at 12–16px; pills are for small controls.
41
+ - Real illustration or none. Sketch-style SVG scenes, `loose-sketch` / `doodle` class names, and `feTurbulence` grain read as amateur.
42
+ - Backgrounds are surfaces, textured only from the subject's world. `repeating-linear-gradient` stripes and two-axis grid overlays need an actual canvas, map, blueprint, or measuring tool under them.
43
+ - Claims and configuration come from supplied truth; label illustrative values honestly. Naming a concept and then ironizing it is not a claim.
44
+
45
+ The floor holds the mechanics; it never picks the direction. With every check green, spend the page on the committed world, and when torn between refined and committed, commit.
@@ -1,123 +1,5 @@
1
- # Craft Flow
1
+ # Craft (deprecated alias)
2
2
 
3
- Build a feature with impeccable UX and UI quality: shape the design, land the visual direction, build real production code, inspect and improve in-browser until it meets a high-end studio bar.
3
+ `craft` is a deprecated alias for an ordinary request to make new visual work. It adds no setup, interview, checkpoint, tool, or quality behavior. Apply SKILL.md's normal routing: create missing PRODUCT.md through [init.md](init.md), then follow [new-work.md](new-work.md) for visual authority, world and surface decisions, implementation, and finish.
4
4
 
5
- Before writing code, you need: PRODUCT.md loaded, register identified and the matching reference loaded, and a confirmed design direction for this task (either from `shape` or supplied by the user). PRODUCT.md is project context, not a task-specific brief.
6
-
7
- Treat any approved visual direction (generated mock or stated reference) as a concrete contract for composition, hierarchy, density, atmosphere, signature motifs, and distinctive visual moves. Don't let mocks replace structure, copy, accessibility, or state design. But if the live result lacks the approved direction's major ingredients, the implementation is wrong.
8
-
9
- ### Gates: do not compress
10
-
11
- Craft has **multiple user gates**, not one. When the harness has native image generation (Codex via `image_gen`), the gate sequence before code is:
12
-
13
- 1. **Shape brief confirmed** (Step 1)
14
- 2. **Direction questions answered** (codex.md Step A)
15
- 3. **Palette confirmed** (codex.md Step B)
16
- 4. **One mock direction approved or delegated** (codex.md Step D)
17
-
18
- You must stop at every gate. **Shape confirmation alone is NOT a green light to start coding.** It is the green light to begin codex.md Step A. Compressing gates 2 through 4 because the shape brief felt complete is the dominant failure mode of this flow.
19
-
20
- When the harness lacks native image generation, gates 2-4 collapse into the brief itself, and shape confirmation does advance straight to code.
21
-
22
- ## Step 0: Project Foundation
23
-
24
- Before shape, before code: figure out what kind of project you're working in.
25
-
26
- Look at the working directory. Run `ls`. Check for:
27
-
28
- - An existing framework: `astro.config.mjs/ts`, `next.config.js/ts`, `nuxt.config.ts`, `svelte.config.js`, `vite.config.js/ts`, `package.json` with framework deps, `Cargo.toml` + Leptos/Yew, `Gemfile` + Rails. **If found, use it.** Do not start a parallel build, do not introduce a second framework, do not write to `dist/` or `build/` directly. Whatever pipeline the project has, respect it.
29
- - An existing component library or design system: `src/components/`, `app/components/`, a `tokens.css` / `theme.ts`, an `astro.config` `integrations`. Read what's there before adding to it.
30
- - An existing icon set: `lucide-react`, `@phosphor-icons/react`, `@iconify/*`, hand-rolled SVG sprites in `assets/icons/`. **Use what's already in the project**; don't introduce a second set.
31
-
32
- If the directory is empty (greenfield), don't pick a framework silently. Ask the user via the AskUserQuestion tool, with sensible defaults framed by the brief:
33
-
34
- ```text
35
- What should this be built on?
36
- - Astro (default for content-led brand sites, landing pages, marketing surfaces)
37
- - SvelteKit / Next.js / Nuxt (when the brief implies an app surface or significant interactivity)
38
- - Single index.html (one-shot demo, prototype, or a deliberately framework-free experiment)
39
- ```
40
-
41
- Default: Astro for brand briefs, the project's existing framework for product briefs. Ask once; don't re-ask mid-task.
42
-
43
- ## Step 1: Shape the Design
44
-
45
- Run $impeccable shape, passing along whatever feature description the user provided. Shape is **required** for craft; it is what produces a confirmed direction.
46
-
47
- Present the shape output and stop. Wait for the user to confirm, override, or course-correct before writing code.
48
-
49
- If the user already supplied a confirmed brief or ran shape separately, use it and skip this step.
50
-
51
- When the original prompt + PRODUCT.md already answer scope, content, and visual direction with no real ambiguity, the shape output can be **compact** (3-5 bullets stating what you're building and the visual lane, ending with one or two specific questions or "confirm or override"). The full 10-section structured brief is reserved for genuinely ambiguous, multi-screen, or stakeholder-heavy tasks. Don't pad a clear brief into a long one to look thorough; equally, don't skip the pause to look efficient.
52
-
53
- If the harness has native image generation (Codex), a compact shape's "confirm or override" advances to **Step 3 and the codex.md flow**, not to Step 4. Phrase the closing line accordingly: "Confirm or override; once we lock direction, I'll run a couple of palette and reference questions before generating any mocks." This stops the model from reading shape confirmation as code-green.
54
-
55
- ## Step 2: Load References
56
-
57
- Based on the design brief's "Recommended References" section, consult the relevant impeccable reference files. At minimum, always consult:
58
-
59
- - [layout.md](layout.md) for layout, spacing, grid, container queries, optical adjustments
60
- - [typeset.md](typeset.md) for type hierarchy, font selection, web font loading, OpenType features (Reference Material section)
61
-
62
- Then add references based on the brief's needs:
63
- - Complex interactions or forms? Consult [interaction-design.md](interaction-design.md)
64
- - Animation or transitions? Consult [animate.md](animate.md) (Reference Material covers motion materials, durations, easing, perceived performance)
65
- - Color-heavy or themed? Consult [colorize.md](colorize.md) (Reference Material covers OKLCH, palette structure, dark mode, contrast)
66
- - Responsive requirements? Consult [adapt.md](adapt.md) (Reference Material covers breakpoints, input methods, safe areas, responsive images)
67
- - Heavy on copy, labels, or errors? Consult [clarify.md](clarify.md) (Reference Material covers button labels, error formula, voice/tone, translation)
68
-
69
- ## Step 3: Visual Direction & Assets (Harness-Gated)
70
-
71
- If the harness has **native image generation** (currently Codex via `image_gen`), this step is mandatory. **Stop and load [codex.md](codex.md)**. It covers palette generation, mock exploration, the approval loop, mock-fidelity inventory, and asset slicing via the `impeccable_asset_producer` subagent. Follow Steps A-F in that file, then return here for Step 4.
72
-
73
- If the harness lacks native image generation, **state in one line that the visual-direction-by-generation step is being skipped because the harness lacks native image generation, then proceed**. The one-line announcement is required; it forces a conscious decision instead of letting the step quietly evaporate. The brief is your only visual reference. Implement directly from it, treating any named anchor references and the brief's "Design Direction" as the contract.
74
-
75
- Whether you generated mocks or not: don't replace required imagery with generic cards, bullets, emoji, fake metrics, decorative CSS panels, or filler copy. Image-led briefs (restaurants, hotels, magazines, photography, hobbyist communities, food, travel, fashion, product) need real or sourced imagery in the build, not CSS scenery.
76
-
77
- ## Step 4: Build to Production Quality
78
-
79
- **Precondition.** If Step 3 routed you to codex.md (native image generation available), Steps A through D in that file must be complete before any code: questions answered, palette confirmed, mocks generated, one direction approved or delegated. **Do not mention implementation, file paths, or patch plans until that's done.** A confirmed shape brief is not enough; the model that compressed those gates is the model that already failed this flow.
80
-
81
- Implement the feature following the design brief. Build in passes so structure, visual system, states, motion/media, and responsive behavior each get deliberate attention. The list below is the definition of done, not inspiration.
82
-
83
- ### Production bar
84
-
85
- - **Real content.** No placeholder copy, placeholder images, dead links, fake controls, or unused scaffold at presentation time.
86
- - **Preserve the approved mock's major ingredients.** Missing hero objects, world/product imagery, section structure, CTA/nav treatment, or distinctive motifs are blocking defects unless the user accepted the change.
87
- - **Semantic first.** Real headings, landmarks, labels, form associations, button/link semantics, accessible names, state announcements where needed.
88
- - **Deliberate spacing and alignment.** No default gaps, arbitrary margins, unbalanced whitespace, or accidental optical misalignment.
89
- - **Intentional typography.** Chosen loading strategy, clear hierarchy, readable measure, stable line breaks, no overflow at any width.
90
- - **Realistic state coverage.** Default, hover, focus-visible, active, disabled, loading, error, success, empty, overflow, long/short text, first-run.
91
- - **Finished interaction quality.** Keyboard paths, touch targets, feedback timing, scroll behavior, state transitions, no hover-only functionality.
92
- - **Coherent icon set.** Use the project's established set; otherwise pick one library or use accessible text. Don't mix.
93
- - **Respect the build pipeline.** Edit source files and run the project's build (`npm run build` or equivalent). Don't write to `build/` / `dist/` / `.next/` with `cat`, heredoc, or Bash redirects; that skips asset hashing, image optimization, code splitting, and CSS extraction, and produces output the dev server won't serve.
94
- - **Verify image URLs before referencing them.** Use image-search MCP or web-fetch when available; guessed photo IDs ship as broken-image placeholders. Without verification, prefer fewer images you're confident about.
95
- - **Optimized imagery and media.** Correct dimensions, useful alt text, lazy loading below the fold, modern formats when practical, responsive `srcset`/`picture` for raster, no project-referenced asset left outside the workspace.
96
- - **Premium motion.** Use atmospheric blur, filter, mask, shadow, reveal when they improve the experience. Avoid casual layout-property animation, bound expensive effects, verify smoothness in-browser, respect reduced motion, and avoid choreography that blocks task completion.
97
- - **Maintainable.** Reusable local patterns, clear component boundaries, project conventions. No rasterized UI text or one-off hacks when a local pattern exists.
98
- - **Technically clean.** Production build passes, no console errors, no avoidable layout shift, no needless dependencies, no broken asset paths.
99
- - **Ask when uncertain.** If a discovery materially changes the brief or approved direction, stop and ask. Don't guess.
100
-
101
- ## Step 5: Iterate Visually
102
-
103
- Look at what you built like a designer would. Your eyes are whatever the harness gives you: a connected browser, a screenshotting tool, Playwright, or asking the user. Use them for responsive testing (mobile, tablet, desktop minimum) and general visual validation.
104
-
105
- If your tool returns a file path, read the PNG back into the conversation. A screenshot you didn't read doesn't count.
106
-
107
- For long-form brand surfaces, inspect major sections individually. Thumbnails hide spacing, clipping, and cascade defects.
108
-
109
- After the first pass, write an honest critique against the brief, the approved mock's major ingredients (hero silhouette, motifs, imagery, nav/CTA, density), and impeccable's DON'Ts. Patch material defects and re-inspect. **Don't invent defects to demonstrate iteration.** A confident "first pass clean, shipping" beats a fake fix.
110
-
111
- Actively check: responsive behavior (composes, not shrinks), every state (empty / error / loading / edge), craft details (spacing, alignment, hierarchy, contrast, motion timing, focus), performance basics. The exit bar: defensible in a high-end studio review.
112
-
113
- Detector or QA output is defect evidence only; never proof the work is finished.
114
-
115
- ## Step 6: Present
116
-
117
- Present the result to the user:
118
- - Show the feature in its primary state
119
- - Summarize the browser/viewports checked and the most important fixes made after inspection
120
- - Walk through the key states (empty, error, responsive)
121
- - Explain design decisions that connect back to the design brief and, when used, the chosen north-star mock. Include any accepted deviations from the mock; do not hide unimplemented mock ingredients.
122
- - Note any remaining limitations or follow-up risks honestly
123
- - Ask: "What's working? What isn't?"
5
+ Do not tell users they need to invoke `craft`. Natural requests such as “build this feature,” “make a landing page,” or “redesign this screen” use the same flow.
@@ -19,11 +19,11 @@ Resolve one stable target, run two independent assessments, synthesize a design
19
19
  - "the homepage" -> `site/pages/index.astro` or `index.html`
20
20
  - "the settings modal" -> the primary component file
21
21
  - "this page" -> the current URL or source file
22
- 2. **Compute the slug**:
22
+ 2. **Confirm the target slugs cleanly**:
23
23
  ```bash
24
24
  node .agents/skills/impeccable/scripts/critique-storage.mjs slug "<resolved-path-or-url>"
25
25
  ```
26
- Keep it. If the command exits non-zero, skip persistence and trend for this run, but continue the critique.
26
+ Every later command also accepts the resolved target directly and derives the same slug internally; never hand-write a slug. If this exits non-zero, skip persistence and trend for this run, but continue the critique.
27
27
  3. **Read `.impeccable/critique/ignore.md`** if it exists. Drop matching findings silently; it is the only prior-run input critique consumes.
28
28
 
29
29
  ### Assessment Orchestration
@@ -52,13 +52,13 @@ If browser automation is available, each assessment creates its own new tab. Nev
52
52
  Read relevant source files and visually inspect the live page when browser automation is available. Think like a design director.
53
53
 
54
54
  Evaluate:
55
- - **AI slop**: Would someone believe "AI made this" immediately? Check all DON'T guidance from the parent Impeccable skill.
55
+ - **Design specificity**: Is the composition, interaction, and visual language grounded in this product, or could an unrelated product use it unchanged? Make this judgment before seeing detector output.
56
56
  - **Holistic design**: hierarchy, IA, emotional fit, discoverability, composition, typography, color, accessibility, states, copy, and edge cases.
57
57
  - **Cognitive load**: consult the [Cognitive Load Assessment](#cognitive-load-assessment) section below; report checklist failures and decision points with >4 visible options.
58
58
  - **Emotional journey**: peak-end rule, emotional valleys, reassurance at high-stakes moments.
59
- - **Nielsen heuristics**: consult the [Heuristics Scoring Guide](#heuristics-scoring-guide) section below; score all 10 heuristics 0-4.
59
+ - **Nielsen heuristics**: consult the [Heuristics Scoring Guide](#heuristics-scoring-guide) section below; score all 10 heuristics 0-4, marking any heuristic the mode-applicability rule allows as `n/a` instead of forcing a number.
60
60
 
61
- Return: AI slop verdict, heuristic scores, cognitive load, emotional journey, 2-3 strengths, 3-5 priority issues, persona red flags, minor observations, and provocative questions.
61
+ Return: design-specificity verdict, heuristic scores, cognitive load, emotional journey, 2-3 strengths, 3-5 priority issues, persona red flags, minor observations, and provocative questions.
62
62
 
63
63
  ### Assessment B: Detector + Browser Evidence
64
64
 
@@ -124,15 +124,19 @@ Present the Nielsen's 10 heuristics scores as a table:
124
124
  | 8 | Aesthetic and Minimalist Design | ? | |
125
125
  | 9 | Error Recovery | ? | |
126
126
  | 10 | Help and Documentation | ? | |
127
- | **Total** | | **??/40** | **[Rating band]** |
127
+ | **Total** | | **??/[applicable max]** | **[Rating band]** |
128
128
 
129
- Be honest with scores. A 4 means genuinely excellent. Most real interfaces score 20-32.
129
+ The applicable maximum is 4 times the number of heuristics you actually scored: **/40** when all ten apply, **/32** when two are `n/a`. Never print `/40` over a partial set.
130
130
 
131
- #### Anti-Patterns Verdict
131
+ Be honest with scores. A 4 means genuinely excellent. Most real interfaces score 20-32 out of 40.
132
132
 
133
- **Start here.** Does this look AI-generated?
133
+ **Mode applicability**: heuristics 7 (Flexibility and Efficiency) and 10 (Help and Documentation) may be scored `n/a` on Persuade and Experience surfaces (landing pages, campaigns, portfolios, bodies of work), as may any other heuristic that genuinely cannot apply to the surface under review. Write `n/a` in the Score cell with a one-line reason, and renormalize the total to the applicable maximum (e.g. **24/32** when two heuristics are n/a) so the rating band stays proportional. The persisted snapshot must record the applicable maximum and which heuristics were scored n/a.
134
134
 
135
- **LLM assessment**: Your own evaluation of AI slop tells. Cover overall aesthetic feel, layout sameness, generic composition, missed opportunities for personality.
135
+ #### Design Specificity Verdict
136
+
137
+ **Start here.** Does the result feel authored for this product, or category-interchangeable?
138
+
139
+ **LLM assessment**: Your unanchored evaluation of design specificity. Cover overall coherence, structural sameness, category-interchangeable choices, and missed opportunities for product character.
136
140
 
137
141
  **Deterministic scan**: Summarize what the automated detector found, with counts and file locations. Note any additional issues the detector caught that you missed, and flag any false positives.
138
142
 
@@ -194,30 +198,32 @@ Once the report above is finalized, write it to `.impeccable/critique/` so the u
194
198
 
195
199
  Skip this step if the Setup slug was null (vague or root-level target).
196
200
 
197
- 1. **Write the body to a temp file** so you can pipe it to the helper. Use the full critique report (heuristic table, anti-patterns verdict, priority issues, persona red flags, minor observations, and questions), but stop before the "Ask the User" / "Recommended Actions" sections that come later.
201
+ 1. **Write the body to a temp file** so you can pipe it to the helper. Use the full critique report (heuristic table, design-specificity verdict, priority issues, persona red flags, minor observations, and questions), but stop before the "Ask the User" / "Recommended Actions" sections that come later.
198
202
 
199
203
  Codex: exclude Run Notes from the temp body file; Run Notes are final-chat only because persistence, trend read, and temp cleanup happen after the snapshot write.
200
204
 
201
205
  2. **Pass the structured metadata** through `IMPECCABLE_CRITIQUE_META` (JSON), then run the write command:
202
206
  ```bash
203
- IMPECCABLE_CRITIQUE_META='{"target":"<user phrasing>","total_score":<n>,"p0_count":<n>,"p1_count":<n>}' \
204
- node .agents/skills/impeccable/scripts/critique-storage.mjs write <slug> <body-file>
207
+ IMPECCABLE_CRITIQUE_META='{"target":"<user phrasing>","total_score":<n>,"max_score":<n>,"na_heuristics":"<comma-separated numbers, or empty>","p0_count":<n>,"p1_count":<n>}' \
208
+ node .agents/skills/impeccable/scripts/critique-storage.mjs write "<resolved target>" <body-file>
205
209
  ```
206
- The helper prints the absolute path it wrote.
210
+ `max_score` is the applicable maximum from the heuristic table (40 when every heuristic applied), so a later run can tell a renormalized total from a full one. The helper prints the absolute path it wrote.
207
211
 
208
212
  3. **Delete the temp body file** after the write attempt completes, whether the write succeeded or failed. If deletion fails, mention `temp-file cleanup failed: <reason>` briefly in the final output, but do not block the critique.
209
213
 
210
214
  4. **Read the trend** for context:
211
215
  ```bash
212
- node .agents/skills/impeccable/scripts/critique-storage.mjs trend <slug> 5
216
+ node .agents/skills/impeccable/scripts/critique-storage.mjs trend "<resolved target>" 5
213
217
  ```
214
218
  This returns a JSON array of the last 5 frontmatter entries (including the one you just wrote).
215
219
 
216
220
  5. **Append a single line to the user-visible output**, after the report and before the questions:
217
221
 
218
- > **Trend for `<slug>` (last 5 runs): 24 → 28 → 32 → 29 → 32**
222
+ > **Trend for `<slug>` (last 5 runs): 24 → 28 → 32 → 29 → 32 (out of 40)**
219
223
  > Wrote `.impeccable/critique/<filename>`.
220
224
 
225
+ Read `max_score` on each trend entry. When every entry shares one maximum, state it once as above. When they differ, print each score with its own denominator (`24/32 → 30/40`) and note that the runs scored different heuristic sets, so the line is not a like-for-like comparison. Treat a missing `max_score` on an older entry as 40.
226
+
221
227
  If this is the first run for the slug, the trend is just one score; say so: "First run for this target, no trend yet."
222
228
 
223
229
  This is fire-and-forget. Do not show the user the helper's JSON output; only the human-readable trend line and the written path. Failures here should not block the rest of the flow; print the error and move on.
@@ -343,11 +349,11 @@ At any decision point, count the number of distinct options, actions, or pieces
343
349
  - **8+ items**: Overloaded; users will skip, misclick, or abandon
344
350
 
345
351
  **Practical applications**:
346
- - Navigation menus: ≤5 top-level items (group the rest under clear categories)
347
- - Form sections: ≤4 fields visible per group before a visual break
348
352
  - Action buttons: 1 primary, 1–2 secondary, group the rest in a menu
349
- - Dashboard widgets: ≤4 key metrics visible without scrolling
350
- - Pricing tiers: ≤3 options (more causes analysis paralysis)
353
+ - Navigation menus: ≤5 top-level items (group the rest under clear categories)
354
+ - Long-form articles: one reading path; gather related links into a single block at the end instead of scattering them mid-flow
355
+ - Documentation sidebars: ≤4 sibling choices visible per level before grouping kicks in
356
+ - Portfolio and gallery indexes: one decision per screen (which piece to open), not filter, sort, and tag controls all at once
351
357
 
352
358
  ---
353
359
 
@@ -607,6 +613,8 @@ Even if the system is usable without docs, help should be easy to find, task-foc
607
613
  | 12–19 | Poor | Major UX overhaul required; core experience broken |
608
614
  | 0–11 | Critical | Redesign needed; unusable in current state |
609
615
 
616
+ When heuristics were scored `n/a`, the maximum is lower than 40; read the band off the percentage instead of the raw number (90%+ Excellent, 70%+ Good, 50%+ Acceptable, 30%+ Poor, below that Critical). 24/32 is 75%, so Good.
617
+
610
618
  ---
611
619
 
612
620
  #### Issue Severity (P0–P3)