@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.
- package/LICENSE +202 -0
- package/README.md +222 -0
- package/bin/cli.js +247 -0
- package/obj/template/.claude/agents/swarm-worker.md +52 -0
- package/obj/template/.claude/bin/LICENSE +201 -0
- package/obj/template/.claude/bin/NOTICE +48 -0
- package/obj/template/.claude/commands/approve-spec.md +29 -0
- package/obj/template/.claude/commands/approve-swarm.md +27 -0
- package/obj/template/.claude/commands/grant-commit.md +19 -0
- package/obj/template/.claude/commands/init-project.md +191 -0
- package/obj/template/.claude/hooks/artifact_template_guard.sh +141 -0
- package/obj/template/.claude/hooks/consent_gate_grant.sh +89 -0
- package/obj/template/.claude/hooks/destructive_cmd_guard.sh +42 -0
- package/obj/template/.claude/hooks/env_guard.sh +36 -0
- package/obj/template/.claude/hooks/git_commit_guard.sh +93 -0
- package/obj/template/.claude/hooks/harness_continuation.sh +121 -0
- package/obj/template/.claude/hooks/lib/__pycache__/resume_writer.cpython-314.pyc +0 -0
- package/obj/template/.claude/hooks/lib/common.sh +328 -0
- package/obj/template/.claude/hooks/lib/resume_writer.py +341 -0
- package/obj/template/.claude/hooks/lint_runner.sh +55 -0
- package/obj/template/.claude/hooks/memory_pre_compact.sh +36 -0
- package/obj/template/.claude/hooks/memory_session_start.sh +244 -0
- package/obj/template/.claude/hooks/memory_stop.sh +173 -0
- package/obj/template/.claude/hooks/plantuml_syntax_guard.sh +161 -0
- package/obj/template/.claude/hooks/process_lifecycle_guard.sh +89 -0
- package/obj/template/.claude/hooks/setup_guard.sh +50 -0
- package/obj/template/.claude/hooks/spec_approval_guard.sh +81 -0
- package/obj/template/.claude/hooks/spec_design_calls_guard.sh +183 -0
- package/obj/template/.claude/hooks/spec_diagram_presence_guard.sh +141 -0
- package/obj/template/.claude/hooks/swarm_approval_guard.sh +39 -0
- package/obj/template/.claude/hooks/swarm_boundary_guard.sh +136 -0
- package/obj/template/.claude/hooks/tdd_order_guard.sh +176 -0
- package/obj/template/.claude/hooks/test_runner.sh +75 -0
- package/obj/template/.claude/hooks/tests/fixtures/ac008_byte_equal_reference.txt +12 -0
- package/obj/template/.claude/hooks/tests/memory_session_start_test.sh +285 -0
- package/obj/template/.claude/hooks/track_guard.sh +127 -0
- package/obj/template/.claude/hooks/verify_pass_guard.sh +88 -0
- package/obj/template/.claude/memory/README.md +108 -0
- package/obj/template/.claude/memory/_pending.md +15 -0
- package/obj/template/.claude/memory/_resume.md +12 -0
- package/obj/template/.claude/memory/conventions.md +26 -0
- package/obj/template/.claude/memory/decisions.md +29 -0
- package/obj/template/.claude/memory/landmarks.md +26 -0
- package/obj/template/.claude/memory/landmines.md +27 -0
- package/obj/template/.claude/memory/libraries.md +27 -0
- package/obj/template/.claude/memory/pending-questions.md +28 -0
- package/obj/template/.claude/project.json +221 -0
- package/obj/template/.claude/settings.json +110 -0
- package/obj/template/.claude/skills/archive/SKILL.md +48 -0
- package/obj/template/.claude/skills/archive/archive.sh +145 -0
- package/obj/template/.claude/skills/audit-baseline/SKILL.md +80 -0
- package/obj/template/.claude/skills/audit-baseline/audit.sh +919 -0
- package/obj/template/.claude/skills/brd/SKILL.md +44 -0
- package/obj/template/.claude/skills/brd/template.md +83 -0
- package/obj/template/.claude/skills/chore/SKILL.md +99 -0
- package/obj/template/.claude/skills/claude-automation-recommender/LICENSE +202 -0
- package/obj/template/.claude/skills/claude-automation-recommender/NOTICE +69 -0
- package/obj/template/.claude/skills/claude-automation-recommender/SKILL.md +358 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/hooks-patterns.md +226 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/mcp-servers.md +263 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/plugins-reference.md +98 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/skills-reference.md +408 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/subagent-templates.md +181 -0
- package/obj/template/.claude/skills/code-structure/SKILL.md +204 -0
- package/obj/template/.claude/skills/commit/SKILL.md +21 -0
- package/obj/template/.claude/skills/copywriting/SKILL.md +252 -0
- package/obj/template/.claude/skills/copywriting/evals/evals.json +111 -0
- package/obj/template/.claude/skills/copywriting/references/ai-writing-detection.md +200 -0
- package/obj/template/.claude/skills/copywriting/references/copy-frameworks.md +344 -0
- package/obj/template/.claude/skills/copywriting/references/natural-transitions.md +272 -0
- package/obj/template/.claude/skills/design-ui/SKILL.md +175 -0
- package/obj/template/.claude/skills/design-ui/references/design-vs-development.md +89 -0
- package/obj/template/.claude/skills/design-ui/references/intent-table.md +64 -0
- package/obj/template/.claude/skills/design-ui/references/orchestration.md +121 -0
- package/obj/template/.claude/skills/design-ui/references/state-machine.md +125 -0
- package/obj/template/.claude/skills/document/SKILL.md +66 -0
- package/obj/template/.claude/skills/documentation/SKILL.md +50 -0
- package/obj/template/.claude/skills/harness/SKILL.md +169 -0
- package/obj/template/.claude/skills/humanizer/SKILL.md +489 -0
- package/obj/template/.claude/skills/humanizer/references/ai-writing-detection.md +208 -0
- package/obj/template/.claude/skills/impeccable/PROJECT_NOTES.md +22 -0
- package/obj/template/.claude/skills/impeccable/SKILL.md +153 -0
- package/obj/template/.claude/skills/impeccable/agents/openai.yaml +4 -0
- package/obj/template/.claude/skills/impeccable/reference/adapt.md +190 -0
- package/obj/template/.claude/skills/impeccable/reference/animate.md +173 -0
- package/obj/template/.claude/skills/impeccable/reference/audit.md +134 -0
- package/obj/template/.claude/skills/impeccable/reference/bolder.md +113 -0
- package/obj/template/.claude/skills/impeccable/reference/brand.md +104 -0
- package/obj/template/.claude/skills/impeccable/reference/clarify.md +174 -0
- package/obj/template/.claude/skills/impeccable/reference/cognitive-load.md +106 -0
- package/obj/template/.claude/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/obj/template/.claude/skills/impeccable/reference/colorize.md +154 -0
- package/obj/template/.claude/skills/impeccable/reference/craft.md +138 -0
- package/obj/template/.claude/skills/impeccable/reference/critique.md +213 -0
- package/obj/template/.claude/skills/impeccable/reference/delight.md +302 -0
- package/obj/template/.claude/skills/impeccable/reference/distill.md +111 -0
- package/obj/template/.claude/skills/impeccable/reference/document.md +427 -0
- package/obj/template/.claude/skills/impeccable/reference/extract.md +70 -0
- package/obj/template/.claude/skills/impeccable/reference/harden.md +347 -0
- package/obj/template/.claude/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/obj/template/.claude/skills/impeccable/reference/interaction-design.md +195 -0
- package/obj/template/.claude/skills/impeccable/reference/layout.md +141 -0
- package/obj/template/.claude/skills/impeccable/reference/live.md +513 -0
- package/obj/template/.claude/skills/impeccable/reference/motion-design.md +99 -0
- package/obj/template/.claude/skills/impeccable/reference/onboard.md +234 -0
- package/obj/template/.claude/skills/impeccable/reference/optimize.md +258 -0
- package/obj/template/.claude/skills/impeccable/reference/overdrive.md +130 -0
- package/obj/template/.claude/skills/impeccable/reference/personas.md +178 -0
- package/obj/template/.claude/skills/impeccable/reference/polish.md +232 -0
- package/obj/template/.claude/skills/impeccable/reference/product.md +62 -0
- package/obj/template/.claude/skills/impeccable/reference/quieter.md +99 -0
- package/obj/template/.claude/skills/impeccable/reference/responsive-design.md +114 -0
- package/obj/template/.claude/skills/impeccable/reference/shape.md +136 -0
- package/obj/template/.claude/skills/impeccable/reference/spatial-design.md +100 -0
- package/obj/template/.claude/skills/impeccable/reference/teach.md +137 -0
- package/obj/template/.claude/skills/impeccable/reference/typeset.md +124 -0
- package/obj/template/.claude/skills/impeccable/reference/typography.md +159 -0
- package/obj/template/.claude/skills/impeccable/reference/ux-writing.md +107 -0
- package/obj/template/.claude/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/obj/template/.claude/skills/impeccable/scripts/command-metadata.json +94 -0
- package/obj/template/.claude/skills/impeccable/scripts/design-parser.mjs +820 -0
- package/obj/template/.claude/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/obj/template/.claude/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-accept.mjs +465 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-browser.js +4684 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-inject.mjs +436 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-poll.mjs +187 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-server.mjs +679 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-wrap.mjs +395 -0
- package/obj/template/.claude/skills/impeccable/scripts/live.mjs +247 -0
- package/obj/template/.claude/skills/impeccable/scripts/load-context.mjs +93 -0
- package/obj/template/.claude/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/obj/template/.claude/skills/impeccable/scripts/pin.mjs +214 -0
- package/obj/template/.claude/skills/implement/SKILL.md +83 -0
- package/obj/template/.claude/skills/intake/SKILL.md +46 -0
- package/obj/template/.claude/skills/intake/template.md +61 -0
- package/obj/template/.claude/skills/integrate/SKILL.md +62 -0
- package/obj/template/.claude/skills/memory-flush/SKILL.md +172 -0
- package/obj/template/.claude/skills/memory-flush/sweep.py +286 -0
- package/obj/template/.claude/skills/memory-flush/tests/run.sh +327 -0
- package/obj/template/.claude/skills/prose/SKILL.md +119 -0
- package/obj/template/.claude/skills/rca/SKILL.md +42 -0
- package/obj/template/.claude/skills/rca/template.md +83 -0
- package/obj/template/.claude/skills/research/SKILL.md +75 -0
- package/obj/template/.claude/skills/scenario/SKILL.md +64 -0
- package/obj/template/.claude/skills/scout/SKILL.md +72 -0
- package/obj/template/.claude/skills/security/SKILL.md +75 -0
- package/obj/template/.claude/skills/simplify/SKILL.md +67 -0
- package/obj/template/.claude/skills/spec/SKILL.md +69 -0
- package/obj/template/.claude/skills/spec/template.md +274 -0
- package/obj/template/.claude/skills/spec-diagram-review/SKILL.md +81 -0
- package/obj/template/.claude/skills/spec-lint/SKILL.md +55 -0
- package/obj/template/.claude/skills/spec-lint/lint.sh +218 -0
- package/obj/template/.claude/skills/spec-render/SKILL.md +45 -0
- package/obj/template/.claude/skills/spec-render/render.sh +109 -0
- package/obj/template/.claude/skills/spec-traceability-review/SKILL.md +72 -0
- package/obj/template/.claude/skills/swarm-dispatch/SKILL.md +212 -0
- package/obj/template/.claude/skills/swarm-dispatch/swarm_merge.sh +154 -0
- package/obj/template/.claude/skills/swarm-plan/SKILL.md +90 -0
- package/obj/template/.claude/skills/swarm-plan/validate.sh +181 -0
- package/obj/template/.claude/skills/tdd/SKILL.md +100 -0
- package/obj/template/.claude/skills/technical-tutorials/SKILL.md +569 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-context-README.md +53 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-context.md +246 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-example.md +175 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-template.md +152 -0
- package/obj/template/.claude/skills/triage/SKILL.md +55 -0
- package/obj/template/.claude/skills/verify/SKILL.md +74 -0
- package/obj/template/.mcp.json +24 -0
- package/obj/template/CLAUDE.md +327 -0
- package/obj/template/docs/init/seed.md +585 -0
- package/obj/template/manifest.json +214 -0
- package/package.json +48 -0
- package/src/.mcp.template.json +24 -0
- package/src/.npmrc.template +2 -0
- package/src/CLAUDE.template.md +327 -0
- package/src/agents/swarm-worker.template.md +51 -0
- package/src/cli/conflict.js +31 -0
- package/src/cli/doctor.js +152 -0
- package/src/cli/install.js +93 -0
- package/src/cli/io.js +27 -0
- package/src/cli/manifest.js +38 -0
- package/src/cli/mcp.js +54 -0
- package/src/cli/merge.js +107 -0
- package/src/cli/plantuml.js +121 -0
- package/src/cli/util.js +10 -0
- package/src/memory/_pending.template.md +15 -0
- package/src/memory/_resume.template.md +12 -0
- package/src/memory/conventions.template.md +26 -0
- package/src/memory/decisions.template.md +29 -0
- package/src/memory/landmarks.template.md +26 -0
- package/src/memory/landmines.template.md +27 -0
- package/src/memory/libraries.template.md +27 -0
- package/src/memory/pending-questions.template.md +28 -0
- package/src/project.template.json +221 -0
- package/src/seed.template.md +585 -0
- 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.
|