@friedbotstudio/create-baseline 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +222 -0
  3. package/bin/cli.js +247 -0
  4. package/obj/template/.claude/agents/swarm-worker.md +52 -0
  5. package/obj/template/.claude/bin/LICENSE +201 -0
  6. package/obj/template/.claude/bin/NOTICE +48 -0
  7. package/obj/template/.claude/commands/approve-spec.md +29 -0
  8. package/obj/template/.claude/commands/approve-swarm.md +27 -0
  9. package/obj/template/.claude/commands/grant-commit.md +19 -0
  10. package/obj/template/.claude/commands/init-project.md +191 -0
  11. package/obj/template/.claude/hooks/artifact_template_guard.sh +141 -0
  12. package/obj/template/.claude/hooks/consent_gate_grant.sh +89 -0
  13. package/obj/template/.claude/hooks/destructive_cmd_guard.sh +42 -0
  14. package/obj/template/.claude/hooks/env_guard.sh +36 -0
  15. package/obj/template/.claude/hooks/git_commit_guard.sh +93 -0
  16. package/obj/template/.claude/hooks/harness_continuation.sh +121 -0
  17. package/obj/template/.claude/hooks/lib/__pycache__/resume_writer.cpython-314.pyc +0 -0
  18. package/obj/template/.claude/hooks/lib/common.sh +328 -0
  19. package/obj/template/.claude/hooks/lib/resume_writer.py +341 -0
  20. package/obj/template/.claude/hooks/lint_runner.sh +55 -0
  21. package/obj/template/.claude/hooks/memory_pre_compact.sh +36 -0
  22. package/obj/template/.claude/hooks/memory_session_start.sh +244 -0
  23. package/obj/template/.claude/hooks/memory_stop.sh +173 -0
  24. package/obj/template/.claude/hooks/plantuml_syntax_guard.sh +161 -0
  25. package/obj/template/.claude/hooks/process_lifecycle_guard.sh +89 -0
  26. package/obj/template/.claude/hooks/setup_guard.sh +50 -0
  27. package/obj/template/.claude/hooks/spec_approval_guard.sh +81 -0
  28. package/obj/template/.claude/hooks/spec_design_calls_guard.sh +183 -0
  29. package/obj/template/.claude/hooks/spec_diagram_presence_guard.sh +141 -0
  30. package/obj/template/.claude/hooks/swarm_approval_guard.sh +39 -0
  31. package/obj/template/.claude/hooks/swarm_boundary_guard.sh +136 -0
  32. package/obj/template/.claude/hooks/tdd_order_guard.sh +176 -0
  33. package/obj/template/.claude/hooks/test_runner.sh +75 -0
  34. package/obj/template/.claude/hooks/tests/fixtures/ac008_byte_equal_reference.txt +12 -0
  35. package/obj/template/.claude/hooks/tests/memory_session_start_test.sh +285 -0
  36. package/obj/template/.claude/hooks/track_guard.sh +127 -0
  37. package/obj/template/.claude/hooks/verify_pass_guard.sh +88 -0
  38. package/obj/template/.claude/memory/README.md +108 -0
  39. package/obj/template/.claude/memory/_pending.md +15 -0
  40. package/obj/template/.claude/memory/_resume.md +12 -0
  41. package/obj/template/.claude/memory/conventions.md +26 -0
  42. package/obj/template/.claude/memory/decisions.md +29 -0
  43. package/obj/template/.claude/memory/landmarks.md +26 -0
  44. package/obj/template/.claude/memory/landmines.md +27 -0
  45. package/obj/template/.claude/memory/libraries.md +27 -0
  46. package/obj/template/.claude/memory/pending-questions.md +28 -0
  47. package/obj/template/.claude/project.json +221 -0
  48. package/obj/template/.claude/settings.json +110 -0
  49. package/obj/template/.claude/skills/archive/SKILL.md +48 -0
  50. package/obj/template/.claude/skills/archive/archive.sh +145 -0
  51. package/obj/template/.claude/skills/audit-baseline/SKILL.md +80 -0
  52. package/obj/template/.claude/skills/audit-baseline/audit.sh +919 -0
  53. package/obj/template/.claude/skills/brd/SKILL.md +44 -0
  54. package/obj/template/.claude/skills/brd/template.md +83 -0
  55. package/obj/template/.claude/skills/chore/SKILL.md +99 -0
  56. package/obj/template/.claude/skills/claude-automation-recommender/LICENSE +202 -0
  57. package/obj/template/.claude/skills/claude-automation-recommender/NOTICE +69 -0
  58. package/obj/template/.claude/skills/claude-automation-recommender/SKILL.md +358 -0
  59. package/obj/template/.claude/skills/claude-automation-recommender/references/hooks-patterns.md +226 -0
  60. package/obj/template/.claude/skills/claude-automation-recommender/references/mcp-servers.md +263 -0
  61. package/obj/template/.claude/skills/claude-automation-recommender/references/plugins-reference.md +98 -0
  62. package/obj/template/.claude/skills/claude-automation-recommender/references/skills-reference.md +408 -0
  63. package/obj/template/.claude/skills/claude-automation-recommender/references/subagent-templates.md +181 -0
  64. package/obj/template/.claude/skills/code-structure/SKILL.md +204 -0
  65. package/obj/template/.claude/skills/commit/SKILL.md +21 -0
  66. package/obj/template/.claude/skills/copywriting/SKILL.md +252 -0
  67. package/obj/template/.claude/skills/copywriting/evals/evals.json +111 -0
  68. package/obj/template/.claude/skills/copywriting/references/ai-writing-detection.md +200 -0
  69. package/obj/template/.claude/skills/copywriting/references/copy-frameworks.md +344 -0
  70. package/obj/template/.claude/skills/copywriting/references/natural-transitions.md +272 -0
  71. package/obj/template/.claude/skills/design-ui/SKILL.md +175 -0
  72. package/obj/template/.claude/skills/design-ui/references/design-vs-development.md +89 -0
  73. package/obj/template/.claude/skills/design-ui/references/intent-table.md +64 -0
  74. package/obj/template/.claude/skills/design-ui/references/orchestration.md +121 -0
  75. package/obj/template/.claude/skills/design-ui/references/state-machine.md +125 -0
  76. package/obj/template/.claude/skills/document/SKILL.md +66 -0
  77. package/obj/template/.claude/skills/documentation/SKILL.md +50 -0
  78. package/obj/template/.claude/skills/harness/SKILL.md +169 -0
  79. package/obj/template/.claude/skills/humanizer/SKILL.md +489 -0
  80. package/obj/template/.claude/skills/humanizer/references/ai-writing-detection.md +208 -0
  81. package/obj/template/.claude/skills/impeccable/PROJECT_NOTES.md +22 -0
  82. package/obj/template/.claude/skills/impeccable/SKILL.md +153 -0
  83. package/obj/template/.claude/skills/impeccable/agents/openai.yaml +4 -0
  84. package/obj/template/.claude/skills/impeccable/reference/adapt.md +190 -0
  85. package/obj/template/.claude/skills/impeccable/reference/animate.md +173 -0
  86. package/obj/template/.claude/skills/impeccable/reference/audit.md +134 -0
  87. package/obj/template/.claude/skills/impeccable/reference/bolder.md +113 -0
  88. package/obj/template/.claude/skills/impeccable/reference/brand.md +104 -0
  89. package/obj/template/.claude/skills/impeccable/reference/clarify.md +174 -0
  90. package/obj/template/.claude/skills/impeccable/reference/cognitive-load.md +106 -0
  91. package/obj/template/.claude/skills/impeccable/reference/color-and-contrast.md +105 -0
  92. package/obj/template/.claude/skills/impeccable/reference/colorize.md +154 -0
  93. package/obj/template/.claude/skills/impeccable/reference/craft.md +138 -0
  94. package/obj/template/.claude/skills/impeccable/reference/critique.md +213 -0
  95. package/obj/template/.claude/skills/impeccable/reference/delight.md +302 -0
  96. package/obj/template/.claude/skills/impeccable/reference/distill.md +111 -0
  97. package/obj/template/.claude/skills/impeccable/reference/document.md +427 -0
  98. package/obj/template/.claude/skills/impeccable/reference/extract.md +70 -0
  99. package/obj/template/.claude/skills/impeccable/reference/harden.md +347 -0
  100. package/obj/template/.claude/skills/impeccable/reference/heuristics-scoring.md +234 -0
  101. package/obj/template/.claude/skills/impeccable/reference/interaction-design.md +195 -0
  102. package/obj/template/.claude/skills/impeccable/reference/layout.md +141 -0
  103. package/obj/template/.claude/skills/impeccable/reference/live.md +513 -0
  104. package/obj/template/.claude/skills/impeccable/reference/motion-design.md +99 -0
  105. package/obj/template/.claude/skills/impeccable/reference/onboard.md +234 -0
  106. package/obj/template/.claude/skills/impeccable/reference/optimize.md +258 -0
  107. package/obj/template/.claude/skills/impeccable/reference/overdrive.md +130 -0
  108. package/obj/template/.claude/skills/impeccable/reference/personas.md +178 -0
  109. package/obj/template/.claude/skills/impeccable/reference/polish.md +232 -0
  110. package/obj/template/.claude/skills/impeccable/reference/product.md +62 -0
  111. package/obj/template/.claude/skills/impeccable/reference/quieter.md +99 -0
  112. package/obj/template/.claude/skills/impeccable/reference/responsive-design.md +114 -0
  113. package/obj/template/.claude/skills/impeccable/reference/shape.md +136 -0
  114. package/obj/template/.claude/skills/impeccable/reference/spatial-design.md +100 -0
  115. package/obj/template/.claude/skills/impeccable/reference/teach.md +137 -0
  116. package/obj/template/.claude/skills/impeccable/reference/typeset.md +124 -0
  117. package/obj/template/.claude/skills/impeccable/reference/typography.md +159 -0
  118. package/obj/template/.claude/skills/impeccable/reference/ux-writing.md +107 -0
  119. package/obj/template/.claude/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  120. package/obj/template/.claude/skills/impeccable/scripts/command-metadata.json +94 -0
  121. package/obj/template/.claude/skills/impeccable/scripts/design-parser.mjs +820 -0
  122. package/obj/template/.claude/skills/impeccable/scripts/detect-csp.mjs +198 -0
  123. package/obj/template/.claude/skills/impeccable/scripts/is-generated.mjs +69 -0
  124. package/obj/template/.claude/skills/impeccable/scripts/live-accept.mjs +465 -0
  125. package/obj/template/.claude/skills/impeccable/scripts/live-browser.js +4684 -0
  126. package/obj/template/.claude/skills/impeccable/scripts/live-inject.mjs +436 -0
  127. package/obj/template/.claude/skills/impeccable/scripts/live-poll.mjs +187 -0
  128. package/obj/template/.claude/skills/impeccable/scripts/live-server.mjs +679 -0
  129. package/obj/template/.claude/skills/impeccable/scripts/live-wrap.mjs +395 -0
  130. package/obj/template/.claude/skills/impeccable/scripts/live.mjs +247 -0
  131. package/obj/template/.claude/skills/impeccable/scripts/load-context.mjs +93 -0
  132. package/obj/template/.claude/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  133. package/obj/template/.claude/skills/impeccable/scripts/pin.mjs +214 -0
  134. package/obj/template/.claude/skills/implement/SKILL.md +83 -0
  135. package/obj/template/.claude/skills/intake/SKILL.md +46 -0
  136. package/obj/template/.claude/skills/intake/template.md +61 -0
  137. package/obj/template/.claude/skills/integrate/SKILL.md +62 -0
  138. package/obj/template/.claude/skills/memory-flush/SKILL.md +172 -0
  139. package/obj/template/.claude/skills/memory-flush/sweep.py +286 -0
  140. package/obj/template/.claude/skills/memory-flush/tests/run.sh +327 -0
  141. package/obj/template/.claude/skills/prose/SKILL.md +119 -0
  142. package/obj/template/.claude/skills/rca/SKILL.md +42 -0
  143. package/obj/template/.claude/skills/rca/template.md +83 -0
  144. package/obj/template/.claude/skills/research/SKILL.md +75 -0
  145. package/obj/template/.claude/skills/scenario/SKILL.md +64 -0
  146. package/obj/template/.claude/skills/scout/SKILL.md +72 -0
  147. package/obj/template/.claude/skills/security/SKILL.md +75 -0
  148. package/obj/template/.claude/skills/simplify/SKILL.md +67 -0
  149. package/obj/template/.claude/skills/spec/SKILL.md +69 -0
  150. package/obj/template/.claude/skills/spec/template.md +274 -0
  151. package/obj/template/.claude/skills/spec-diagram-review/SKILL.md +81 -0
  152. package/obj/template/.claude/skills/spec-lint/SKILL.md +55 -0
  153. package/obj/template/.claude/skills/spec-lint/lint.sh +218 -0
  154. package/obj/template/.claude/skills/spec-render/SKILL.md +45 -0
  155. package/obj/template/.claude/skills/spec-render/render.sh +109 -0
  156. package/obj/template/.claude/skills/spec-traceability-review/SKILL.md +72 -0
  157. package/obj/template/.claude/skills/swarm-dispatch/SKILL.md +212 -0
  158. package/obj/template/.claude/skills/swarm-dispatch/swarm_merge.sh +154 -0
  159. package/obj/template/.claude/skills/swarm-plan/SKILL.md +90 -0
  160. package/obj/template/.claude/skills/swarm-plan/validate.sh +181 -0
  161. package/obj/template/.claude/skills/tdd/SKILL.md +100 -0
  162. package/obj/template/.claude/skills/technical-tutorials/SKILL.md +569 -0
  163. package/obj/template/.claude/skills/technical-tutorials/references/audience-context-README.md +53 -0
  164. package/obj/template/.claude/skills/technical-tutorials/references/audience-context.md +246 -0
  165. package/obj/template/.claude/skills/technical-tutorials/references/audience-example.md +175 -0
  166. package/obj/template/.claude/skills/technical-tutorials/references/audience-template.md +152 -0
  167. package/obj/template/.claude/skills/triage/SKILL.md +55 -0
  168. package/obj/template/.claude/skills/verify/SKILL.md +74 -0
  169. package/obj/template/.mcp.json +24 -0
  170. package/obj/template/CLAUDE.md +327 -0
  171. package/obj/template/docs/init/seed.md +585 -0
  172. package/obj/template/manifest.json +214 -0
  173. package/package.json +48 -0
  174. package/src/.mcp.template.json +24 -0
  175. package/src/.npmrc.template +2 -0
  176. package/src/CLAUDE.template.md +327 -0
  177. package/src/agents/swarm-worker.template.md +51 -0
  178. package/src/cli/conflict.js +31 -0
  179. package/src/cli/doctor.js +152 -0
  180. package/src/cli/install.js +93 -0
  181. package/src/cli/io.js +27 -0
  182. package/src/cli/manifest.js +38 -0
  183. package/src/cli/mcp.js +54 -0
  184. package/src/cli/merge.js +107 -0
  185. package/src/cli/plantuml.js +121 -0
  186. package/src/cli/util.js +10 -0
  187. package/src/memory/_pending.template.md +15 -0
  188. package/src/memory/_resume.template.md +12 -0
  189. package/src/memory/conventions.template.md +26 -0
  190. package/src/memory/decisions.template.md +29 -0
  191. package/src/memory/landmarks.template.md +26 -0
  192. package/src/memory/landmines.template.md +27 -0
  193. package/src/memory/libraries.template.md +27 -0
  194. package/src/memory/pending-questions.template.md +28 -0
  195. package/src/project.template.json +221 -0
  196. package/src/seed.template.md +585 -0
  197. package/src/settings.template.json +110 -0
@@ -0,0 +1,272 @@
1
+ # Natural Transitions
2
+
3
+ Transitional phrases to guide readers through your content. Good signposting improves readability, user engagement, and helps search engines understand content structure.
4
+
5
+ Adapted from: University of Manchester Academic Phrasebank (2023), Plain English Campaign, web content best practices
6
+
7
+ ---
8
+
9
+ ## Contents
10
+ - Previewing Content Structure
11
+ - Introducing a New Topic
12
+ - Referring Back
13
+ - Moving Between Sections
14
+ - Indicating Addition
15
+ - Indicating Contrast
16
+ - Indicating Similarity
17
+ - Indicating Cause and Effect
18
+ - Giving Examples
19
+ - Emphasising Key Points
20
+ - Providing Evidence (neutral attribution, expert quotes, supporting claims)
21
+ - Summarising Sections
22
+ - Concluding Content
23
+ - Question-Based Transitions
24
+ - List Introductions
25
+ - Hedging Language
26
+ - Best Practice Guidelines
27
+ - Transitions to Avoid (AI Tells)
28
+
29
+ ## Previewing Content Structure
30
+
31
+ Use to orient readers and set expectations:
32
+
33
+ - Here's what we'll cover...
34
+ - This guide walks you through...
35
+ - Below, you'll find...
36
+ - We'll start with X, then move to Y...
37
+ - First, let's look at...
38
+ - Let's break this down step by step.
39
+ - The sections below explain...
40
+
41
+ ---
42
+
43
+ ## Introducing a New Topic
44
+
45
+ - When it comes to X,...
46
+ - Regarding X,...
47
+ - Speaking of X,...
48
+ - Now let's talk about X.
49
+ - Another key factor is...
50
+ - X is worth exploring because...
51
+
52
+ ---
53
+
54
+ ## Referring Back
55
+
56
+ Use to connect ideas and reinforce key points:
57
+
58
+ - As mentioned earlier,...
59
+ - As we covered above,...
60
+ - Remember when we discussed X?
61
+ - Building on that point,...
62
+ - Going back to X,...
63
+ - Earlier, we explained that...
64
+
65
+ ---
66
+
67
+ ## Moving Between Sections
68
+
69
+ - Now let's look at...
70
+ - Next up:...
71
+ - Moving on to...
72
+ - With that covered, let's turn to...
73
+ - Now that you understand X, here's Y.
74
+ - That brings us to...
75
+
76
+ ---
77
+
78
+ ## Indicating Addition
79
+
80
+ - Also,...
81
+ - Plus,...
82
+ - On top of that,...
83
+ - What's more,...
84
+ - Another benefit is...
85
+ - Beyond that,...
86
+ - In addition,...
87
+ - There's also...
88
+
89
+ **Note:** Use "moreover" and "furthermore" sparingly. They can sound AI-generated when overused.
90
+
91
+ ---
92
+
93
+ ## Indicating Contrast
94
+
95
+ - However,...
96
+ - But,...
97
+ - That said,...
98
+ - On the flip side,...
99
+ - In contrast,...
100
+ - Unlike X, Y...
101
+ - While X is true, Y...
102
+ - Despite this,...
103
+
104
+ ---
105
+
106
+ ## Indicating Similarity
107
+
108
+ - Similarly,...
109
+ - Likewise,...
110
+ - In the same way,...
111
+ - Just like X, Y also...
112
+ - This mirrors...
113
+ - The same applies to...
114
+
115
+ ---
116
+
117
+ ## Indicating Cause and Effect
118
+
119
+ - So,...
120
+ - This means...
121
+ - As a result,...
122
+ - That's why...
123
+ - Because of this,...
124
+ - This leads to...
125
+ - The outcome?...
126
+ - Here's what happens:...
127
+
128
+ ---
129
+
130
+ ## Giving Examples
131
+
132
+ - For example,...
133
+ - For instance,...
134
+ - Here's an example:...
135
+ - Take X, for instance.
136
+ - Consider this:...
137
+ - A good example is...
138
+ - To illustrate,...
139
+ - Like when...
140
+ - Say you want to...
141
+
142
+ ---
143
+
144
+ ## Emphasising Key Points
145
+
146
+ - Here's the key takeaway:...
147
+ - The important thing is...
148
+ - What matters most is...
149
+ - Don't miss this:...
150
+ - Pay attention to...
151
+ - This is critical:...
152
+ - The bottom line?...
153
+
154
+ ---
155
+
156
+ ## Providing Evidence
157
+
158
+ Use when citing sources, data, or expert opinions:
159
+
160
+ ### Neutral attribution
161
+ - According to [Source],...
162
+ - [Source] reports that...
163
+ - Research shows that...
164
+ - Data from [Source] indicates...
165
+ - A study by [Source] found...
166
+
167
+ ### Expert quotes
168
+ - As [Expert] puts it,...
169
+ - [Expert] explains,...
170
+ - In the words of [Expert],...
171
+ - [Expert] notes that...
172
+
173
+ ### Supporting claims
174
+ - This is backed by...
175
+ - Evidence suggests...
176
+ - The numbers confirm...
177
+ - This aligns with findings from...
178
+
179
+ ---
180
+
181
+ ## Summarising Sections
182
+
183
+ - To recap,...
184
+ - Here's the short version:...
185
+ - In short,...
186
+ - The takeaway?...
187
+ - So what does this mean?...
188
+ - Let's pull this together:...
189
+ - Quick summary:...
190
+
191
+ ---
192
+
193
+ ## Concluding Content
194
+
195
+ - Wrapping up,...
196
+ - The bottom line is...
197
+ - Here's what to do next:...
198
+ - To sum up,...
199
+ - Final thoughts:...
200
+ - Ready to get started?...
201
+ - Now it's your turn.
202
+
203
+ **Note:** Avoid "In conclusion" at the start of a paragraph. It's overused and signals AI writing.
204
+
205
+ ---
206
+
207
+ ## Question-Based Transitions
208
+
209
+ Useful for conversational tone and featured snippet optimization:
210
+
211
+ - So what does this mean for you?
212
+ - But why does this matter?
213
+ - How do you actually do this?
214
+ - What's the catch?
215
+ - Sound complicated? It's not.
216
+ - Wondering where to start?
217
+ - Still not sure? Here's the breakdown.
218
+
219
+ ---
220
+
221
+ ## List Introductions
222
+
223
+ For numbered lists and step-by-step content:
224
+
225
+ - Here's how to do it:
226
+ - Follow these steps:
227
+ - The process is straightforward:
228
+ - Here's what you need to know:
229
+ - Key things to consider:
230
+ - The main factors are:
231
+
232
+ ---
233
+
234
+ ## Hedging Language
235
+
236
+ For claims that need qualification or aren't absolute:
237
+
238
+ - may, might, could
239
+ - tends to, generally
240
+ - often, usually, typically
241
+ - in most cases
242
+ - it appears that
243
+ - evidence suggests
244
+ - this can help
245
+ - many experts believe
246
+
247
+ ---
248
+
249
+ ## Best Practice Guidelines
250
+
251
+ 1. **Match tone to audience**: B2B content can be slightly more formal; B2C often benefits from conversational transitions
252
+ 2. **Vary your transitions**: Repeating the same phrase gets noticed (and not in a good way)
253
+ 3. **Don't over-signpost**: Trust your reader; every sentence doesn't need a transition
254
+ 4. **Use for scannability**: Transitions at paragraph starts help skimmers navigate
255
+ 5. **Keep it natural**: Read aloud; if it sounds forced, simplify
256
+ 6. **Front-load key info**: Put the important word or phrase early in the transition
257
+
258
+ ---
259
+
260
+ ## Transitions to Avoid (AI Tells)
261
+
262
+ These phrases are overused in AI-generated content:
263
+
264
+ - "That being said,..."
265
+ - "It's worth noting that..."
266
+ - "At its core,..."
267
+ - "In today's digital landscape,..."
268
+ - "When it comes to the realm of..."
269
+ - "This begs the question..."
270
+ - "Let's delve into..."
271
+
272
+ See the seo-audit skill's `references/ai-writing-detection.md` for a complete list of AI writing tells.
@@ -0,0 +1,175 @@
1
+ ---
2
+ name: design-ui
3
+ owner: baseline
4
+ description: Orchestrates `impeccable` for every design task inside a workflow phase. Captures intent in natural language, classifies it (design / development / copy), translates design intents into a sequence of impeccable subcommand invocations, runs them in main context with state persistence at `.claude/state/design/<slug>.json`, and returns a structured report. ALWAYS invokes `impeccable` under the hood for the underlying design move; never picks aesthetic direction itself; never writes product code directly. Per CLAUDE.md Article X.2, all design tasks in workflow phases route through this skill.
5
+ ---
6
+
7
+ # design-ui — the impeccable orchestrator
8
+
9
+ You are the routing layer between workflow phases and the vendored `impeccable` skill. Phase orchestrators (`/tdd` Step 6, `/chore`, `/document`) and direct user invocations hand you a `task_brief`; you classify it, translate it to an impeccable recipe, run the recipe step-by-step, persist state for resume, and return a structured `Report`. Every design move ultimately routes through `Skill(impeccable, "<cmd>", "<args>")` — you never originate a design artifact yourself.
10
+
11
+ This skill is **first-party and freely editable**. The skill it orchestrates (`impeccable`) is **vendored Apache 2.0 and never edited**.
12
+
13
+ ## Architectural commitments
14
+
15
+ These are not preferences. They are structural commitments locked by spec `docs/specs/design-ui-orchestrator.md` and constitutional commitment CLAUDE.md Article X.2:
16
+
17
+ - **You ALWAYS invoke impeccable.** Every design move goes through `Skill(impeccable, …)`. No exceptions, no shortcuts.
18
+ - **You NEVER pick aesthetic direction.** Register, palette, type scale, motion vocabulary — all decided inside impeccable's subcommands in main context. You decide *which* subcommand to invoke, not *what* design to produce.
19
+ - **You NEVER write product code.** Files under `app/`, `site-src/`, `components/`, `src/` — all flow through impeccable's writing subcommands (`craft`, `polish`, refines, enhances, fixes). You write only thin glue: state JSON, brief snapshots, audit snapshots.
20
+ - **You ALWAYS classify before acting.** A misrouted `task_brief` (development or copy concern) returns immediately with `final_state: "not_a_design_task"` and a pointer to the correct lane. Design tasks proceed; everything else stops at Stage 0.
21
+
22
+ ## Mandatory first step
23
+
24
+ Invoke `Skill(code-structure)` before writing any file — even the thin-glue ones. The layer model applies: SKILL.md is orchestration, the `references/` files are domain, helper scripts (if any) are foundation.
25
+
26
+ ## Inputs the caller must provide (the `task_brief`)
27
+
28
+ ```jsonc
29
+ {
30
+ "concern": "design", // REQUIRED, fixed literal. Stage 0 asserts this.
31
+ "intent": "<natural-language>", // REQUIRED. The design ask in plain English.
32
+ "slug": "<kebab-case>" | null, // OPTIONAL. If null, derived from intent's first noun phrase.
33
+ "target_files": ["<path>", ...] | "—", // REQUIRED. Paths under design treatment. "—" for surface-less intents.
34
+ "write_set": ["<glob>", ...], // REQUIRED. The broader scope the design move may touch.
35
+ "register_override": "brand" | "product" | null, // OPTIONAL. Overrides PRODUCT.md for this call.
36
+ "references": ["<url-or-path>", ...] // OPTIONAL. Inspiration sources (URLs, image paths).
37
+ }
38
+ ```
39
+
40
+ If `concern` is missing or any of `intent` / `target_files` / `write_set` are missing for a non-surface-less recipe, **stop and ask** — do not infer. Stage 1 (capture) refuses incomplete briefs.
41
+
42
+ ## The four stages
43
+
44
+ ### Stage 0 — Classify
45
+
46
+ Decide which lane this `task_brief` belongs to. The classification rule lives in [`references/design-vs-development.md`](references/design-vs-development.md): per-concern split between **design**, **development**, **copy** lanes.
47
+
48
+ Stage 0 evaluates two signals: (1) the intent string against the [`references/intent-table.md`](references/intent-table.md) rows, and (2) the `target_files` extensions as a tie-breaker.
49
+
50
+ If the classification is anything other than **design**, return immediately:
51
+
52
+ ```jsonc
53
+ {
54
+ "final_state": "not_a_design_task",
55
+ "correct_lane": "/tdd" | "/document",
56
+ "reason": "<plain-language rationale>",
57
+ "state_file": ".claude/state/design/<slug>.json"
58
+ }
59
+ ```
60
+
61
+ design-ui still writes a checkpoint state file even on misroute — the orchestration history is traceable.
62
+
63
+ ### Stage 1 — Capture
64
+
65
+ Once Stage 0 confirms `concern == "design"`:
66
+
67
+ 1. Verify `PRODUCT.md` exists at the project root. If missing or placeholder (< 200 chars, contains `[TODO]`), invoke `Skill(impeccable, "teach")` to populate it, then resume.
68
+ 2. Verify `DESIGN.md` exists. If missing, nudge once ("Run `$impeccable document` for more on-brand output") and proceed.
69
+ 3. Resolve the slug: use `task_brief.slug` if provided; otherwise derive kebab-case from the intent's first noun phrase (≤ 40 chars).
70
+ 4. Persist the initial state to `.claude/state/design/<slug>.json` per [`references/state-machine.md`](references/state-machine.md): `{slug, started_at, intent, register, state: "in_progress", step_index: 0}`.
71
+ 5. Verify `target_files` parents exist when applicable. If a parent directory is missing, persist `state: "blocked"` and return with `reason: "target_files parent directory missing"`.
72
+
73
+ ### Stage 2 — Translate
74
+
75
+ Look up the intent in [`references/intent-table.md`](references/intent-table.md). The first matching row wins. Each row produces:
76
+
77
+ - A **recipe**: an ordered list of impeccable subcommand names (from the vocabulary: `shape`, `craft`, `teach`, `document`, `extract`, `critique`, `audit`, `polish`, `bolder`, `quieter`, `distill`, `harden`, `onboard`, `animate`, `colorize`, `typeset`, `layout`, `delight`, `overdrive`, `clarify`, `adapt`, `optimize`, `live`).
78
+ - A **mode**: `auto` (single-step or atomic; execute without prompting) or `ask` (multi-step; surface the plan and await `proceed`).
79
+
80
+ For multi-step recipes (`mode == "ask"`), print the plan:
81
+
82
+ > "Recipe: `[shape, craft, audit]`. Proceed? (or describe an override)"
83
+
84
+ Wait for the user. On `proceed`, advance to Stage 3. On override, re-run Stage 2 with the adjusted intent. On refusal, persist `state: "blocked"` and return.
85
+
86
+ For single-step / atomic recipes (`mode == "auto"`), advance to Stage 3 without prompting.
87
+
88
+ If no row matches, the intent is ambiguous: surface to the user per the catch-all rule in `references/design-vs-development.md`.
89
+
90
+ ### Stage 3 — Orchestrate
91
+
92
+ Execute the recipe step-by-step per [`references/orchestration.md`](references/orchestration.md):
93
+
94
+ ```
95
+ for each step in recipe:
96
+ pre-checkpoint -> state JSON {step_index, next_cmd}
97
+ invoke -> Skill(impeccable, "<cmd>", "<args>")
98
+ capture -> read return value (output_path, files_written, score)
99
+ branch -> apply gates (see orchestration.md)
100
+ post-checkpoint -> state JSON {step_index++, invocations[], verifications[]}
101
+ ```
102
+
103
+ The orchestration gates:
104
+
105
+ - **Gate 1 — P0 blocks.** If the previous `audit` returns `P0 ≥ 1`, do NOT auto-chain to `polish`. Block and surface.
106
+ - **Gate 2 — P1 loops with cap 3.** If `P0 == 0` and `P1 ≥ 1`, run `polish` then re-audit. Loop up to 3 iterations. After iteration 3's final audit, if P1 > 0, terminate with `needs_human`. **No fourth iteration runs.**
107
+ - **Gate 3 — Recipe mode.** Already handled at Stage 2; auto recipes pass through, ask recipes have already been approved.
108
+ - **Gate 4 — Target-file existence.** Already verified at Stage 1; re-checked before any write step.
109
+ - **Gate 5 — Register conflict.** If `task_brief.register_override` mismatches `PRODUCT.md`, surface the conflict to the user before proceeding.
110
+
111
+ ### Stage 4 — Report
112
+
113
+ Return a structured `Report`:
114
+
115
+ ```jsonc
116
+ {
117
+ "slug": "<the slug>",
118
+ "intent": "<the intent>",
119
+ "recipe_executed": ["shape", "craft", "audit", "polish"],
120
+ "final_state": "complete" | "needs_human" | "blocked" | "not_a_design_task",
121
+ "files_touched": ["<path>", ...],
122
+ "verifications": { "audit_score": "19/20", "p0": 0, "p1": 0 },
123
+ "next_actions": ["<human-readable>"],
124
+ "state_file": ".claude/state/design/<slug>.json",
125
+ "thin_glue_written": ["docs/design/<slug>.brief.md", "docs/design/<slug>.audit.md"]
126
+ }
127
+ ```
128
+
129
+ The caller (workflow phase or user) reads `final_state` and acts per the policy in [`references/orchestration.md`](references/orchestration.md) (the caller-policy table).
130
+
131
+ ## What you write (thin glue only)
132
+
133
+ You write exactly these file kinds. Anything else is impeccable's territory.
134
+
135
+ | File | Role |
136
+ |---|---|
137
+ | `.claude/state/design/<slug>.json` | The live state checkpoint. Written before AND after each impeccable invocation. Shape in [`references/state-machine.md`](references/state-machine.md). |
138
+ | `docs/design/<slug>.brief.md` | Human-readable snapshot of impeccable `shape`'s output. Materialized after the `shape` step. |
139
+ | `docs/design/<slug>.audit.md` | Human-readable snapshot of impeccable `audit`'s report. Materialized after each `audit` step (overwritten — latest audit only). |
140
+
141
+ **Forbidden writes**:
142
+ - Product code (`app/**`, `site-src/**`, `components/**`, `src/**`, `**/*.tsx`, `**/*.jsx`, `**/*.vue`, `**/*.svelte`, `**/*.css`, `**/*.njk`) — these flow through impeccable's writing subcommands.
143
+ - `DESIGN.md` and `PRODUCT.md` — these flow through `impeccable teach` and `impeccable document`.
144
+ - `.claude/skills/impeccable/**` — vendored, untouchable per Article IX.
145
+ - `docs/specs/**` — `spec_approval_guard` blocks; specs are written by `Skill(spec)`.
146
+ - Anywhere outside the thin-glue contract above.
147
+
148
+ ## Where you plug into the workflow
149
+
150
+ - **`/tdd` Step 6** — Invokes `Skill(design-ui, task_brief)` once per declared row in the spec's `## Design calls` section, gated on the implement step's `write_set` intersecting `project.json → tdd.ui_globs`. Re-runs `verify` afterward.
151
+ - **`/chore`** — When a chore touches files under `tdd.ui_globs` for design reasons, the chore routes through design-ui.
152
+ - **`/document`** — When documentation includes UI surface renders (screenshots, component captures), `document` can drive design-ui for capture-time visual verification.
153
+ - **Direct user** — `Skill(design-ui, task_brief)` from main context for ad-hoc design work outside a workflow phase.
154
+
155
+ Per CLAUDE.md Article X.2, design tasks **inside a workflow phase** SHALL route through design-ui. Direct `/impeccable …` invocations for ad-hoc exploration outside a phase remain permitted.
156
+
157
+ ## Constraints (non-negotiable)
158
+
159
+ - **Always invoke impeccable for design moves.** No file-content design decisions made inline in this skill.
160
+ - **Always classify before acting.** Stage 0 runs first; misroutes return immediately.
161
+ - **Always persist state.** Every step has a pre- and post-checkpoint. A killed orchestration must be resumable.
162
+ - **Never edit the vendored `impeccable` skill.** Article IX vendoring discipline.
163
+ - **Never write product code.** Only the thin-glue paths above.
164
+ - **Never approve specs or write to `docs/specs/`.** Spec writing is `Skill(spec)`'s territory.
165
+ - **Never run `git commit` or `git push`.** Commits happen in `/commit`.
166
+ - **Honor the 3-iteration cap on `audit → polish` loops.** No fourth iteration runs. Terminate with `needs_human` per `references/orchestration.md`.
167
+ - **Honor P0 blocking.** Never auto-loop past a P0 finding. Surface and block.
168
+ - **Honor register overrides explicitly.** A `register_override` that conflicts with PRODUCT.md prompts the user; never silently accept.
169
+
170
+ ## References
171
+
172
+ - [`references/design-vs-development.md`](references/design-vs-development.md) — Stage 0 classification rules: design vs development vs copy, per-concern.
173
+ - [`references/intent-table.md`](references/intent-table.md) — Stage 2 translation table: ~21 intent patterns → impeccable recipes.
174
+ - [`references/orchestration.md`](references/orchestration.md) — Stage 3 gates, loop logic, caller-policy matrix.
175
+ - [`references/state-machine.md`](references/state-machine.md) — State file shape, terminal states, resume rule.
@@ -0,0 +1,89 @@
1
+ # Design vs development vs copy
2
+
3
+ Stage 0 of `design-ui` classifies an incoming `task_brief` into one of three lanes. Only the **design** lane proceeds through `design-ui`; the other two return early with `final_state: "not_a_design_task"` and a pointer to the correct lane.
4
+
5
+ The split is **per-concern**, not per-file. A single source file (say `app/settings/page.tsx`) may carry behavior, surface, and prose all at once; each concern routes through its own lane, and the same file gets touched by all three over the lifetime of the feature.
6
+
7
+ ## The three lanes
8
+
9
+ | Lane | Concerns | Routes through | Examples of intent phrasing |
10
+ |---|---|---|---|
11
+ | **Design** | Surface, motion, layout, typography, spacing, color, hierarchy, identity moments, register, visual accessibility (focus rings, contrast, motion-reduce) | `design-ui` → `impeccable` | "build a settings page that doesn't feel like a SaaS template" · "polish the FAQ" · "fix typography on `/cli/`" · "make the hero bolder" · "add motion to the buttons" · "adapt the docs for mobile" |
12
+ | **Development** | Behavior, event handlers, data flow, state machines, validation logic, business rules, API integration, error-handling logic, performance optimizations behind the surface | `/tdd` → `scenario` → `implement` → `verify` | "add input validation to the settings form" · "implement the save handler" · "add error retry to the save endpoint" · "fix the off-by-one in the pagination" · "add tests for the auth flow" |
13
+ | **Copy** | Body prose, marketing copy, README sections, documentation bodies, PR descriptions, microcopy when it's the prose itself (not the visual treatment) | `/document` → `prose` (which always invokes `humanizer`, conditionally invokes `copywriting` / `documentation` / `technical-tutorials`) | "rewrite the install instructions" · "improve the README" · "draft the launch announcement" · "polish the error messages' wording" |
14
+
15
+ ## Per-concern classification rule
16
+
17
+ When a `task_brief` arrives, Stage 0 evaluates **two signals** in order:
18
+
19
+ 1. **Intent string match** — see `references/intent-table.md`. Each row names an intent pattern and the lane it belongs to. The first matching row decides.
20
+ 2. **`target_files` heuristic** — if the intent is ambiguous (no row matches OR a row matches but the intent could also fit another lane), inspect `target_files`:
21
+ - All paths match `tdd.ui_globs` AND no logic-file extensions → **design**.
22
+ - All paths are logic files (`.ts`, `.js`, `.go`, `.py`, `.rs`, etc., excluding `.tsx` / `.jsx` / `.vue` / `.svelte`) → **development**.
23
+ - All paths are `.md` / `.mdx` and the intent mentions "write", "rewrite", "improve", "draft" → **copy**.
24
+ - Mixed → return to step 1 with the user surfaced; ask which concern they mean.
25
+
26
+ ## Overlap is normal — same file, three lanes
27
+
28
+ A single feature commonly cycles through all three lanes:
29
+
30
+ | Sequence | Lane | What lands |
31
+ |---|---|---|
32
+ | 1. `/tdd` writes failing tests for behavior, then implements them | Development | `app/settings/page.tsx` gets the onSubmit handler, validation logic, data binding |
33
+ | 2. `/tdd` Step 6 invokes `design-ui` per the spec's `## Design calls` | Design | Same file gets the type scale, spacing, motion, focus rings, hover states — via `impeccable craft` / `polish` |
34
+ | 3. `/document` invokes `prose` for any user-facing text the spec marks | Copy | Same file's button labels, headings, error messages get rewritten through `prose` → `humanizer` |
35
+
36
+ The lanes do not contend; they touch different parts of the same file. A button has:
37
+ - behavior (the `onClick` handler) — development
38
+ - surface (the size, padding, color, transition) — design
39
+ - copy (the label text the user reads) — copy
40
+
41
+ Each part routes to the lane that owns its concern.
42
+
43
+ ## Edge cases
44
+
45
+ ### Error states and loading states
46
+
47
+ The **logic** that decides "we are in an error state" / "we are loading" belongs to **development**. The **visual treatment** of those states (skeleton shape, error illustration, retry button placement, micro-animation) belongs to **design**. The **wording** of the error message belongs to **copy**.
48
+
49
+ ### Forms
50
+
51
+ Layout, label typography, focus rings, hover affordance, motion → **design**.
52
+ Validation logic (which fields are required, regex constraints), submit handler, server integration → **development**.
53
+ Field labels, helper text, validation error wording → **copy**.
54
+
55
+ ### A11y
56
+
57
+ Per WCAG 2.1 AA: focus rings, color contrast, motion-reduce honoring → **design**. Keyboard event handlers, `aria-*` attribute logic when it depends on state → **development**. Alt text and screen-reader copy → **copy**.
58
+
59
+ ### Tokens (design-system level)
60
+
61
+ "Extract reusable tokens from the brand" or "promote the code-window palette to tokens" — these are **design** intents (specifically the `extract` recipe via `impeccable extract`). They touch CSS variable declarations and the design system file; they are surface concerns, not behavior.
62
+
63
+ ### Performance
64
+
65
+ Visual performance (image loading, animation jank, layout shift, paint cost) — **design** via `impeccable optimize`.
66
+ Backend / data-fetching performance, query optimization, memoization for re-render avoidance — **development**.
67
+
68
+ ## Misroute handling
69
+
70
+ If Stage 0 classifies the intent as **development** or **copy** (not design), `design-ui` immediately returns:
71
+
72
+ ```jsonc
73
+ {
74
+ "final_state": "not_a_design_task",
75
+ "correct_lane": "/tdd" | "/document",
76
+ "reason": "<plain-language classification rationale>",
77
+ "state_file": ".claude/state/design/<slug>.json" // checkpoint written even on misroute
78
+ }
79
+ ```
80
+
81
+ The caller (a workflow phase or the user) reads `correct_lane` and re-routes. `design-ui` never silently passes a non-design brief through to `impeccable` — that would muddy impeccable's contract.
82
+
83
+ ## When in doubt
84
+
85
+ If the per-concern split is ambiguous *and* both signals (intent string + target_files) fail to resolve, surface to the user with a one-line question:
86
+
87
+ > "This task seems to span design and development: <intent>. Which concern are you asking about? (a) design — surface, motion, visual a11y; (b) development — behavior, logic, data; (c) both, in sequence — start with `/tdd` for behavior, then this skill for design."
88
+
89
+ Do not guess. The clean separation is what makes the lanes structural.
@@ -0,0 +1,64 @@
1
+ # Intent table — natural-language intent → impeccable recipe
2
+
3
+ Stage 2 of `design-ui` reads a `task_brief.intent` string and translates it to a sequence of `impeccable` subcommand invocations. This file is that translation table. Each row matches an intent pattern; the first match wins.
4
+
5
+ `impeccable` ships ~21 subcommands organized in five categories: Build (`shape`, `craft`, `teach`, `document`, `extract`), Evaluate (`critique`, `audit`), Refine (`polish`, `bolder`, `quieter`, `distill`, `harden`, `onboard`), Enhance (`animate`, `colorize`, `typeset`, `layout`, `delight`, `overdrive`), Fix (`clarify`, `adapt`, `optimize`), Iterate (`live`). Each recipe row below names commands by their exact vocabulary so `design-ui` can mechanically dispatch `Skill(impeccable, "<cmd>", "<args>")`.
6
+
7
+ ## Reading the table
8
+
9
+ Columns:
10
+ - **Intent pattern** — the regex / keyword the intent string is matched against. Case-insensitive.
11
+ - **Recipe** — the sequence of impeccable subcommands in order.
12
+ - **Mode** — `auto` (single-step or "atom"; no user approval needed) or `ask` (multi-step; surface the plan and await `proceed`).
13
+ - **Notes** — when this row earns vs. when a different row should match.
14
+
15
+ The "polish atom" (`audit → polish → audit`) is treated as a **single** step from the orchestrator's point of view: design-ui's Stage 3 runs it as one unit and loops internally (cap 3 — see `orchestration.md`). It is `auto` because the user already said "polish" — they don't need to re-approve the audit they implicitly invoked.
16
+
17
+ The "build atom" (`shape → craft → audit`) is multi-step and `ask`: `shape` produces a design brief that the user reviews before the destructive `craft` step writes code.
18
+
19
+ ## The table
20
+
21
+ | Intent pattern | Recipe | Mode | Notes |
22
+ |---|---|---|---|
23
+ | `/^build\b\|^create\b\|^add a\b/i` | shape → craft → audit | ask | Net-new surface. Multi-step → user approves the plan after `shape` before `craft` writes files. |
24
+ | `/^plan\b\|^sketch\b\|^explore\b/i` | shape | auto | Plan only; caller will implement themselves. Single step. |
25
+ | `/^review\b\|^score\b/i` | critique ∥ audit | auto | Parallel evaluation: critique (UX scoring) AND audit (technical). Read-only. |
26
+ | `/^polish\b\|^finish\b\|^ship\b/i` | audit → polish → audit | auto | Polish atom. Loops internally up to 3 iterations (orchestration.md). Single-step from the orchestrator's POV. |
27
+ | `/^make .+ bolder\b\|^amplify\b\|^louder\b/i` | bolder → audit → polish | ask | Refinement with verification. Multi-step. |
28
+ | `/^too aggressive\b\|^too loud\b\|^quieter\b\|^tone down\b/i` | quieter → audit → polish | ask | Opposite of bolder. |
29
+ | `/^distill\b\|^strip\b\|^reduce\b/i` | distill → audit → polish | ask | Remove complexity. |
30
+ | `/^harden\b\|^add error states\b\|^add loading states\b\|^add edge cases\b/i` | harden → audit | ask | Production-ready pass. |
31
+ | `/^typography\b\|^fix typography\b\|^typeset\b/i` | typeset → audit | ask | Targeted type-system pass. |
32
+ | `/^spacing\b\|^layout\b\|^fix spacing\b\|^rhythm\b/i` | layout → audit | ask | Targeted spacing / hierarchy pass. |
33
+ | `/^color\b\|^colorize\b\|^palette\b/i` | colorize → audit | ask | Targeted color / palette pass. |
34
+ | `/^add (motion\|animation)\b\|^animate\b/i` | animate → audit | ask | Motion pass with perf re-check. |
35
+ | `/^add delight\b\|^add personality\b\|^make it delightful\b/i` | delight → audit | ask | Personality moments. |
36
+ | `/^adapt\b\|^make .+ (mobile\|responsive)\b\|^responsive\b/i` | adapt → audit | ask | Multi-viewport pass. |
37
+ | `/^clarify\b\|^improve copy\b\|^rewrite (labels\|errors\|microcopy)\b/i` | clarify → audit | ask | UX writing pass; pairs with `prose` skill for body copy. |
38
+ | `/^optimize\b\|^perf\b\|^performance\b/i` | optimize → audit | ask | Visual perf pass (paint, layout shift, motion budget). |
39
+ | `/^onboard\b\|^first[- ]run\b\|^empty state\b\|^activation\b/i` | onboard → polish | ask | Activation-flow design. |
40
+ | `/^match (this )?reference\b\|^like the/i` | shape (with references) → craft → audit | ask | Inspiration-anchored build. `task_brief.references` populates the shape brief. |
41
+ | `/^iterate\b\|^variants\b\|^live\b/i` | live | auto | Visual variant exploration in the browser. Single step. |
42
+ | `/^extract\b\|^pull (out )?tokens\b\|^promote.+to tokens\b/i` | extract | auto | Token / component extraction. Single step. |
43
+ | `/^overdrive\b\|^push (past )?conventional\b/i` | overdrive → audit → polish | ask | Maximalism mode. Three steps, ask before running. |
44
+ | `(no match)` | — | — | Ambiguous intent; route to user clarification per `design-vs-development.md`. |
45
+
46
+ ## How a row is selected
47
+
48
+ 1. Lower-case the intent string, strip leading whitespace.
49
+ 2. Scan rows top-to-bottom. First regex that matches wins.
50
+ 3. If `target_files` is empty AND no row matches, the intent is surface-less; default recipe is `live` if the intent contains "browser" / "preview" / "iterate", else `extract` if "tokens" / "promote". Otherwise return `not_a_design_task` with a request for clarification.
51
+ 4. If a row matches but `target_files` is empty for an intent that normally needs a target (e.g., `polish`, `harden`), Stage 1 (capture) asks the user for `target_files` before Stage 2 (translate) commits.
52
+
53
+ ## Single-step vs multi-step (auto vs ask)
54
+
55
+ - **auto**: design-ui runs the recipe without surfacing it. Used when the user's intent is unambiguous AND the recipe is one impeccable subcommand OR a self-contained atom (audit→polish→audit treated as one unit for orchestrator purposes).
56
+ - **ask**: design-ui prints the plan ("Recipe: [shape, craft, audit]. Proceed? (or override)") and waits for the user to type `proceed` (or supply an override). Used for any recipe that's truly multi-step at the orchestrator level.
57
+
58
+ The mode column above reflects this distinction. Stage 3 (orchestrate) reads the mode and gates accordingly.
59
+
60
+ ## Adding a new row
61
+
62
+ If a future intent doesn't fit any row above, add a new one *here* before extending Stage 2 logic. The rule of thumb: the row must (a) name a known impeccable subcommand (no inventing new ones), (b) carry a recipe that ends in an evaluation step (`audit` or `critique`) for verification, and (c) classify cleanly as `auto` or `ask`.
63
+
64
+ Do not add rows that map to `Skill(design-ui, …)` recursively — design-ui is the orchestrator, not a target.