maestro-flow-one 0.2.7 → 0.2.8
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/maestro-flow/commands/lifecycle/analyze.md +2 -2
- package/maestro-flow/commands/lifecycle/brainstorm.md +1 -1
- package/maestro-flow/commands/lifecycle/impeccable.md +395 -50
- package/maestro-flow/commands/lifecycle/roadmap.md +1 -1
- package/package.json +1 -1
- package/maestro-flow/commands/lifecycle/ui-craft.md +0 -416
|
@@ -79,7 +79,7 @@ Phase 4: Output context.md for downstream plan --gaps
|
|
|
79
79
|
**Next-step routing on completion:**
|
|
80
80
|
|
|
81
81
|
Phase/Milestone scope:
|
|
82
|
-
- Go recommendation, UI work needed → `/maestro-
|
|
82
|
+
- Go recommendation, UI work needed → `/maestro-impeccable --chain build {target}`
|
|
83
83
|
- Go recommendation, ready to plan → `/maestro-plan` or `/maestro-plan {phase}`
|
|
84
84
|
- No-Go recommendation → revisit requirements or `/maestro-brainstorm {topic}`
|
|
85
85
|
|
|
@@ -129,5 +129,5 @@ Both modes (full + quick):
|
|
|
129
129
|
- [ ] Scope creep redirected to Deferred section
|
|
130
130
|
- [ ] Deferred items auto-created as issues (if any)
|
|
131
131
|
- [ ] Artifact registered in state.json with correct scope/milestone/phase
|
|
132
|
-
- [ ] Next step routed (
|
|
132
|
+
- [ ] Next step routed (impeccable/plan for Go, brainstorm for No-Go)
|
|
133
133
|
</success_criteria>
|
|
@@ -69,7 +69,7 @@ Auto mode:
|
|
|
69
69
|
- Project initialized, quick roadmap → Skill({ skill: "maestro-roadmap", args: "--from-brainstorm {session_id}" })
|
|
70
70
|
- Need deeper analysis first → Skill({ skill: "maestro-analyze", args: "{topic}" })
|
|
71
71
|
- `html-prototypes/` produced with 2+ files and user wants to browse → load `~/.maestro/workflows/brainstorm-visualize.md` and launch visualizer server (optional, user-triggered)
|
|
72
|
-
- DESIGN.md established during Step 3.5 → suggest: "Run `/maestro-
|
|
72
|
+
- DESIGN.md established during Step 3.5 → suggest: "Run `/maestro-impeccable <feature-description> --chain build` to build with the established design system"
|
|
73
73
|
|
|
74
74
|
Single role mode:
|
|
75
75
|
- More roles needed → Skill({ skill: "maestro-brainstorm", args: "{next_role} --session {session_id}" })
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: maestro-impeccable
|
|
3
|
-
description: Production-grade UI design with knowhow accumulation — 24 commands +
|
|
4
|
-
argument-hint: "<command> [target] [--skip-harvest] [-
|
|
3
|
+
description: Production-grade UI design with knowhow accumulation — 24 commands + chain orchestration with quality gates + integrated design search
|
|
4
|
+
argument-hint: "<command|intent> [target] [--chain build|improve|enhance|harden|live] [--enhance <cmd>] [--threshold <score>] [--max-loops <n>] [--skip-harvest] [--skip-design-explore] [--skip-design] [--styles <N>] [--stack <stack>] [-y] [-c]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Write
|
|
@@ -9,69 +9,252 @@ allowed-tools:
|
|
|
9
9
|
- Bash
|
|
10
10
|
- Glob
|
|
11
11
|
- Grep
|
|
12
|
+
- Agent
|
|
12
13
|
- Skill
|
|
13
14
|
- AskUserQuestion
|
|
15
|
+
- TodoWrite
|
|
14
16
|
---
|
|
15
17
|
<purpose>
|
|
16
|
-
|
|
18
|
+
Production-grade UI design system with two execution modes:
|
|
19
|
+
|
|
20
|
+
**Direct Mode** — Execute any of 24 sub-commands for the full design lifecycle:
|
|
17
21
|
Build (craft, shape, teach, document, extract, explore), Evaluate (critique, audit), Refine (polish, bolder, quieter, distill, harden, onboard),
|
|
18
22
|
Enhance (animate, colorize, typeset, layout, delight, overdrive), Fix (clarify, adapt, optimize), Iterate (live).
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
**Chain Mode** — Orchestrate sub-commands via intelligent intent routing + quality gate auto-iteration.
|
|
25
|
+
5 chains: build, improve, enhance, harden, live. Critique/audit scores drive automatic command selection and iteration loops.
|
|
26
|
+
|
|
27
|
+
Includes integrated design-explore (multi-variant design system generation via BM25 engine, HTML prototype rendering, interactive user review)
|
|
28
|
+
and `search` CLI subcommand for querying UI/UX design knowledge base (BM25 + 30+ CSV data files).
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
After each command, automatically harvests design decisions into `.workflow/knowhow/` (DCS-, AST-, TIP-, REF-) for cross-session accumulation.
|
|
31
|
+
|
|
32
|
+
Session (chain mode): `.workflow/.maestro/ui-craft-{YYYYMMDD-HHmmss}/status.json`
|
|
27
33
|
</purpose>
|
|
28
34
|
|
|
29
35
|
<deferred_reading>
|
|
30
36
|
- [impeccable harvest workflow](~/.maestro/workflows/impeccable.md) — read after command execution for harvest logic
|
|
37
|
+
- [design stage workflow](~/.maestro/workflows/impeccable/design.md) — read when S_DESIGN_EXPLORE state entered
|
|
38
|
+
- [sub-command workflow](~/.maestro/workflows/impeccable/{command}.md) — read when dispatching a sub-command
|
|
31
39
|
</deferred_reading>
|
|
32
40
|
|
|
33
|
-
<
|
|
34
|
-
|
|
41
|
+
<sub_commands>
|
|
42
|
+
All sub-command workflows reside under `~/.maestro/workflows/impeccable/`:
|
|
43
|
+
|
|
44
|
+
| Category | Command | Workflow File |
|
|
45
|
+
|----------|---------|---------------|
|
|
46
|
+
| Build | craft | `workflows/impeccable/craft.md` |
|
|
47
|
+
| Build | shape | `workflows/impeccable/shape.md` |
|
|
48
|
+
| Build | teach | `workflows/impeccable/teach.md` |
|
|
49
|
+
| Build | document | `workflows/impeccable/document.md` |
|
|
50
|
+
| Build | extract | `workflows/impeccable/extract.md` |
|
|
51
|
+
| Build | explore | `workflows/impeccable/explore.md` |
|
|
52
|
+
| Evaluate | critique | `workflows/impeccable/critique.md` |
|
|
53
|
+
| Evaluate | audit | `workflows/impeccable/audit.md` |
|
|
54
|
+
| Refine | polish | `workflows/impeccable/polish.md` |
|
|
55
|
+
| Refine | bolder | `workflows/impeccable/bolder.md` |
|
|
56
|
+
| Refine | quieter | `workflows/impeccable/quieter.md` |
|
|
57
|
+
| Refine | distill | `workflows/impeccable/distill.md` |
|
|
58
|
+
| Refine | harden | `workflows/impeccable/harden.md` |
|
|
59
|
+
| Refine | onboard | `workflows/impeccable/onboard.md` |
|
|
60
|
+
| Enhance | animate | `workflows/impeccable/animate.md` |
|
|
61
|
+
| Enhance | colorize | `workflows/impeccable/colorize.md` |
|
|
62
|
+
| Enhance | typeset | `workflows/impeccable/typeset.md` |
|
|
63
|
+
| Enhance | layout | `workflows/impeccable/layout.md` |
|
|
64
|
+
| Enhance | delight | `workflows/impeccable/delight.md` |
|
|
65
|
+
| Enhance | overdrive | `workflows/impeccable/overdrive.md` |
|
|
66
|
+
| Fix | clarify | `workflows/impeccable/clarify.md` |
|
|
67
|
+
| Fix | adapt | `workflows/impeccable/adapt.md` |
|
|
68
|
+
| Fix | optimize | `workflows/impeccable/optimize.md` |
|
|
69
|
+
| Iterate | live | `workflows/impeccable/live.md` |
|
|
70
|
+
|
|
71
|
+
**Reference workflows** (loaded by context, not as sub-commands):
|
|
72
|
+
`brand.md`, `product.md`, `design.md`, `codex.md`, `heuristics-scoring.md`, `cognitive-load.md`,
|
|
73
|
+
`color-and-contrast.md`, `interaction-design.md`, `motion-design.md`, `personas.md`,
|
|
74
|
+
`responsive-design.md`, `spatial-design.md`, `typography.md`, `ux-writing.md`
|
|
75
|
+
|
|
76
|
+
**Search engine**: `workflows/impeccable/ui-search/` — BM25 search engine + CSV knowledge files
|
|
77
|
+
</sub_commands>
|
|
35
78
|
|
|
36
|
-
|
|
79
|
+
<context>
|
|
80
|
+
$ARGUMENTS — sub-command, intent text, or special keywords, with optional flags.
|
|
37
81
|
|
|
38
|
-
|
|
39
|
-
|----------|----------|
|
|
40
|
-
| Build | craft, shape, teach, document, extract, explore |
|
|
41
|
-
| Evaluate | critique, audit |
|
|
42
|
-
| Refine | polish, bolder, quieter, distill, harden, onboard |
|
|
43
|
-
| Enhance | animate, colorize, typeset, layout, delight, overdrive |
|
|
44
|
-
| Fix | clarify, adapt, optimize |
|
|
45
|
-
| Iterate | live |
|
|
82
|
+
**Keywords:** `continue`/`next` → resume previous chain session
|
|
46
83
|
|
|
47
|
-
**Flags:**
|
|
84
|
+
**Flags (direct mode):**
|
|
48
85
|
- `--skip-harvest` — Execute command without knowhow capture
|
|
49
86
|
- `-y` — Auto-confirm where the skill allows
|
|
50
87
|
|
|
51
|
-
**
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
**Flags (chain mode):**
|
|
89
|
+
- `--chain <type>` — Force chain type: build, improve, enhance, harden, live
|
|
90
|
+
- `--enhance <cmd>` — Specific enhance command (animate|colorize|typeset|layout|delight|overdrive|bolder)
|
|
91
|
+
- `--threshold <score>` — Critique pass threshold (default: 26/40). Audit threshold auto-computed as threshold×0.5
|
|
92
|
+
- `--max-loops <n>` — Maximum quality gate iterations (default: 3)
|
|
93
|
+
- `-c` / `--continue` — Resume previous chain session
|
|
94
|
+
- `--skip-design-explore` / `--skip-design` — Skip design-explore and bridge
|
|
95
|
+
- `--styles <N>` — Number of design system variants (2-5, default 3). Build chain only
|
|
96
|
+
- `--stack <stack>` — Tech stack for supplementary guidelines (default: html-tailwind)
|
|
54
97
|
</context>
|
|
55
98
|
|
|
56
|
-
<
|
|
99
|
+
<invariants>
|
|
100
|
+
1. **Session before chain execution** — status.json created before any chain step runs
|
|
101
|
+
2. **All chain steps via Skill** — every sub-command dispatched through `Skill({ skill: "maestro-impeccable" })`
|
|
102
|
+
3. **Gate scores drive loops** — refine loop auto-selects commands from P0/P1 findings, never from hardcoded lists
|
|
103
|
+
4. **Interactive gates respected** — teach, shape, craft retain their user gates; never suppress
|
|
104
|
+
5. **Harvest after direct mode** — knowhow capture runs after every direct-mode command (unless --skip-harvest or live)
|
|
105
|
+
</invariants>
|
|
57
106
|
|
|
58
|
-
|
|
107
|
+
<chains>
|
|
59
108
|
|
|
60
|
-
|
|
109
|
+
### Chain Definitions
|
|
61
110
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
111
|
+
| Chain | Sequence | Gate Condition |
|
|
112
|
+
|-------|----------|----------------|
|
|
113
|
+
| **build** | teach? → **design_explore?** → shape → craft → **critique** → [refine loop] → audit → polish | critique ≥ threshold AND P0 == 0 |
|
|
114
|
+
| **improve** | **critique** → [refine loop] → polish → audit | critique ≥ threshold AND P0 == 0 |
|
|
115
|
+
| **enhance** | {cmd} → **critique** → polish (if needed) | critique ≥ threshold |
|
|
116
|
+
| **harden** | harden → **audit** → polish | audit ≥ threshold×0.5 |
|
|
117
|
+
| **live** | live | — (interactive, no gate) |
|
|
65
118
|
|
|
66
|
-
|
|
119
|
+
- `teach?` — conditional: only if PRODUCT.md missing/placeholder
|
|
120
|
+
- `design_explore?` — conditional: only if DESIGN.md missing AND `--skip-design-explore` not set. Delegates to explore which handles variant generation, prototype rendering, visual comparison, user selection/mix, AND bridge to DESIGN.md internally
|
|
121
|
+
- `[refine loop]` — quality gate loop: extract suggested commands from critique → execute → re-critique
|
|
67
122
|
|
|
68
|
-
|
|
69
|
-
Stacks: react, nextjs, vue, svelte, astro, swiftui, react-native, flutter, html-tailwind, shadcn, + more.
|
|
123
|
+
### Intent → Chain Routing
|
|
70
124
|
|
|
71
|
-
|
|
72
|
-
|
|
125
|
+
| Intent Pattern | Chain |
|
|
126
|
+
|---------------|-------|
|
|
127
|
+
| 新建, create, build, new, 从零, landing, feature, page | build |
|
|
128
|
+
| 设计, design, 风格, style, 设计系统, design system, 视觉, theme | build |
|
|
129
|
+
| 改进, improve, fix, 优化, iterate, better, 迭代 | improve |
|
|
130
|
+
| 动画, 颜色, 排版, animate, color, type, bold, delight, enhance | enhance |
|
|
131
|
+
| 生产, production, harden, 上线, ship, edge case, i18n | harden |
|
|
132
|
+
| 实时, live, browser, 浏览器, variant | live |
|
|
133
|
+
|
|
134
|
+
Explicit `--chain` overrides routing. Ambiguous + no `-y` → AskUserQuestion.
|
|
135
|
+
|
|
136
|
+
</chains>
|
|
137
|
+
|
|
138
|
+
<state_machine>
|
|
139
|
+
|
|
140
|
+
<states>
|
|
141
|
+
S_PARSE — 解析参数、模式检测、意图分类 PERSIST: —
|
|
142
|
+
S_RESUME — 扫描已有 chain session、恢复执行 PERSIST: —
|
|
143
|
+
S_SETUP — 加载 context、检查 PRODUCT.md PERSIST: —
|
|
144
|
+
S_CREATE — 创建 session + status.json PERSIST: session (全量)
|
|
145
|
+
S_DESIGN_EXPLORE — 委托 explore:多变体生成、原型对比、选型/混搭、自动 bridge 到 DESIGN.md PERSIST: explore_completed, design_md_path
|
|
146
|
+
S_CHAIN — 按序执行 chain 步骤 PERSIST: step progress, executed commands
|
|
147
|
+
S_GATE — 质量门控:解析评分、决策 PERSIST: scores, loop count
|
|
148
|
+
S_REFINE — 执行自动选取的 refine 命令 PERSIST: refine commands, loop state
|
|
149
|
+
S_REPORT — 最终报告 + 趋势 PERSIST: final scores, status
|
|
150
|
+
</states>
|
|
151
|
+
|
|
152
|
+
<transitions>
|
|
153
|
+
|
|
154
|
+
S_PARSE:
|
|
155
|
+
→ S_RESUME WHEN: -c / --continue flag OR keyword "continue"/"next"
|
|
156
|
+
→ S_SETUP WHEN: chain mode detected (--chain flag or intent classified)
|
|
157
|
+
→ S_PARSE WHEN: chain mode, ambiguous AND not -y DO: AskUserQuestion
|
|
158
|
+
→ END WHEN: direct mode → execute sub-command directly (see Direct Mode execution)
|
|
159
|
+
→ END WHEN: search mode → CLI dispatch
|
|
160
|
+
→ END WHEN: direct mode, no arguments → show command menu with categories
|
|
161
|
+
→ END WHEN: chain mode, no intent AND no target → E002
|
|
162
|
+
|
|
163
|
+
S_RESUME:
|
|
164
|
+
→ S_CHAIN WHEN: session found DO: A_LOCATE_SESSION
|
|
165
|
+
→ END WHEN: no session found → E005
|
|
166
|
+
|
|
167
|
+
S_SETUP:
|
|
168
|
+
→ S_CREATE DO: A_LOAD_CONTEXT
|
|
169
|
+
|
|
170
|
+
S_CREATE:
|
|
171
|
+
→ S_CHAIN DO: A_CREATE_SESSION
|
|
172
|
+
|
|
173
|
+
S_CHAIN:
|
|
174
|
+
→ S_DESIGN_EXPLORE WHEN: current step is 'design_explore' AND DESIGN.md missing AND --skip-design-explore not set AND --skip-design not set
|
|
175
|
+
→ S_GATE WHEN: current step is gate command (critique/audit)
|
|
176
|
+
→ S_CHAIN WHEN: step is design_explore but skip conditions met → advance
|
|
177
|
+
→ S_CHAIN WHEN: step is normal command → execute → advance
|
|
178
|
+
→ S_REPORT WHEN: all steps complete
|
|
179
|
+
|
|
180
|
+
S_DESIGN_EXPLORE:
|
|
181
|
+
→ S_CHAIN WHEN: explore completed (DESIGN.md produced) → advance to shape
|
|
182
|
+
→ S_CHAIN WHEN: explore failed → W004 → advance to shape (full interview fallback)
|
|
183
|
+
|
|
184
|
+
S_GATE:
|
|
185
|
+
→ S_CHAIN WHEN: PASS (score ≥ threshold AND P0 == 0) → advance to next step
|
|
186
|
+
→ S_REFINE WHEN: FAIL (score < threshold OR P0 > 0)
|
|
187
|
+
→ S_CHAIN WHEN: max loops exceeded → W002 → force advance
|
|
73
188
|
|
|
74
|
-
|
|
189
|
+
S_REFINE:
|
|
190
|
+
→ S_GATE DO: execute auto-selected commands → re-run gate command
|
|
191
|
+
GUARD: loop_count < max_loops
|
|
192
|
+
|
|
193
|
+
S_REPORT:
|
|
194
|
+
→ END DO: A_FINAL_REPORT
|
|
195
|
+
|
|
196
|
+
</transitions>
|
|
197
|
+
|
|
198
|
+
<actions>
|
|
199
|
+
|
|
200
|
+
### A_LOCATE_SESSION
|
|
201
|
+
|
|
202
|
+
1. Scan `.workflow/.maestro/ui-craft-*/status.json`, filter `status == "running"`, sort DESC
|
|
203
|
+
2. Take most recent; load into context as current session
|
|
204
|
+
3. Resume from `current_step` position
|
|
205
|
+
|
|
206
|
+
### A_LOAD_CONTEXT
|
|
207
|
+
|
|
208
|
+
1. If chain starts with `teach` → execute it first, impeccable handles context loading internally
|
|
209
|
+
2. Otherwise → trigger context loading (spec load --category ui, with load-context fallback)
|
|
210
|
+
3. If PRODUCT.md missing/placeholder → prepend teach, execute, then resume
|
|
211
|
+
|
|
212
|
+
### A_CREATE_SESSION
|
|
213
|
+
|
|
214
|
+
1. Read `.workflow/state.json` for project context (phase, milestone)
|
|
215
|
+
2. Create `.workflow/.maestro/ui-craft-{YYYYMMDD-HHmmss}/status.json`:
|
|
216
|
+
```json
|
|
217
|
+
{ "session_id": "ui-craft-{ts}", "source": "maestro-impeccable", "intent": "...",
|
|
218
|
+
"chain_type": "build|improve|enhance|harden|live", "target": "...",
|
|
219
|
+
"auto_mode": false, "threshold": 26, "max_loops": 3,
|
|
220
|
+
"steps": [{ "index": 0, "command": "shape", "status": "pending" }],
|
|
221
|
+
"gate_history": [], "loop_count": 0,
|
|
222
|
+
"current_step": 0, "status": "running",
|
|
223
|
+
"created_at": "ISO-8601", "updated_at": "ISO-8601" }
|
|
224
|
+
```
|
|
225
|
+
3. Write status.json before executing any step
|
|
226
|
+
|
|
227
|
+
### A_DESIGN_EXPLORE
|
|
228
|
+
|
|
229
|
+
1. Execute: `Skill({ skill: "maestro-impeccable", args: "explore --styles {styles_count}" })`
|
|
230
|
+
2. explore handles internally: variant generation, prototype rendering, visual comparison, user selection/mix, bridge to DESIGN.md, spec registration
|
|
231
|
+
3. On completion: verify `.workflow/impeccable/DESIGN.md` exists
|
|
232
|
+
4. Update status.json: `explore_completed: true`, `design_md_path`
|
|
233
|
+
|
|
234
|
+
### A_FINAL_REPORT
|
|
235
|
+
|
|
236
|
+
1. Read critique trend if available
|
|
237
|
+
2. Update status.json with `status: "completed"` and final scores
|
|
238
|
+
3. Present summary table with scores, iterations, commands executed
|
|
239
|
+
|
|
240
|
+
</actions>
|
|
241
|
+
|
|
242
|
+
</state_machine>
|
|
243
|
+
|
|
244
|
+
<execution>
|
|
245
|
+
|
|
246
|
+
## 1. Mode Detection
|
|
247
|
+
|
|
248
|
+
1. If first argument is `search` → **Search Mode** (Section 6)
|
|
249
|
+
2. If first argument matches one of the 24 sub-commands → **Direct Mode** (Section 2)
|
|
250
|
+
3. If `--chain` flag present → **Chain Mode** (Section 3)
|
|
251
|
+
4. If `-c` / `--continue` or keyword "continue"/"next" → **Resume** (S_RESUME)
|
|
252
|
+
5. If intent text (doesn't match a sub-command) → classify intent → **Chain Mode** (Section 3)
|
|
253
|
+
6. No arguments → show command menu with categories
|
|
254
|
+
|
|
255
|
+
## 2. Direct Mode
|
|
256
|
+
|
|
257
|
+
### 2a. Invoke Skill
|
|
75
258
|
|
|
76
259
|
```
|
|
77
260
|
Skill({ skill: "maestro-impeccable", args: "$ARGUMENTS" })
|
|
@@ -80,7 +263,7 @@ Skill({ skill: "maestro-impeccable", args: "$ARGUMENTS" })
|
|
|
80
263
|
The skill handles: context loading (spec load --category ui, with load-context fallback), register detection (brand/product),
|
|
81
264
|
reference file loading, and command execution.
|
|
82
265
|
|
|
83
|
-
|
|
266
|
+
### 2b. Harvest
|
|
84
267
|
|
|
85
268
|
After the skill completes, read `~/.maestro/workflows/impeccable.md` and follow the harvest workflow.
|
|
86
269
|
|
|
@@ -89,13 +272,10 @@ Skip harvest if:
|
|
|
89
272
|
- Sub-command is `live` (interactive, no harvestable output)
|
|
90
273
|
- Sub-command is unrecognized
|
|
91
274
|
|
|
92
|
-
|
|
275
|
+
### 2c. Post-Execution Routing
|
|
93
276
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
**Pipeline context detected** (called via Skill from brainstorm, ui-craft, etc.):
|
|
97
|
-
- Report command result (output, scores, artifacts produced) and **stop**
|
|
98
|
-
- Do NOT suggest next-step commands — the calling flow owns what happens next
|
|
277
|
+
**Pipeline context detected** (called via Skill from brainstorm, maestro, etc.):
|
|
278
|
+
- Report command result and **stop** — the calling flow owns what happens next
|
|
99
279
|
|
|
100
280
|
**Standalone invocation** (user directly ran `/maestro-impeccable`):
|
|
101
281
|
- Show next-step suggestions based on what was executed:
|
|
@@ -106,21 +286,186 @@ After harvest (or skip), determine whether this command was invoked as part of a
|
|
|
106
286
|
- `critique`/`audit` → suggest commands from findings
|
|
107
287
|
- Enhancement/fix commands → suggest `critique` to re-evaluate
|
|
108
288
|
|
|
289
|
+
## 3. Chain Mode
|
|
290
|
+
|
|
291
|
+
Follow the state machine (S_PARSE → S_SETUP → S_CREATE → S_CHAIN → S_GATE → S_REFINE → S_REPORT).
|
|
292
|
+
|
|
293
|
+
### 3a. Parse & Route
|
|
294
|
+
|
|
295
|
+
1. If `--chain` present → use directly
|
|
296
|
+
2. Otherwise → match $ARGUMENTS against intent patterns
|
|
297
|
+
3. If `--enhance` present → chain = enhance, cmd = --enhance value
|
|
298
|
+
4. For enhance chain without `--enhance` → infer from intent ("动画" → animate, "颜色" → colorize, etc.)
|
|
299
|
+
5. Ambiguous + no `-y` → ask user to pick chain
|
|
300
|
+
|
|
301
|
+
Create TodoWrite with chain steps.
|
|
302
|
+
|
|
303
|
+
### 3b. Execute Chain
|
|
304
|
+
|
|
305
|
+
For each step in chain, sequentially:
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
▸ Step {n}/{total}: /maestro-impeccable {command} {target}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Execute via: `Skill({ skill: "maestro-impeccable", args: "{command} {target}" })`
|
|
312
|
+
|
|
313
|
+
After each step: update status.json `current_step` and step `status`.
|
|
314
|
+
|
|
315
|
+
**Step-specific logic:**
|
|
316
|
+
|
|
317
|
+
- **design_explore** (build chain only): check DESIGN.md exists → skip if yes; check --skip-design-explore → skip if set; otherwise execute `Skill({ skill: "maestro-impeccable", args: "explore --styles {styles_count}" })`; verify DESIGN.md on completion
|
|
318
|
+
- **teach, shape, craft** are interactive — do NOT suppress their user gates
|
|
319
|
+
- Gate steps (critique/audit) → transition to quality gate logic (Section 4)
|
|
320
|
+
|
|
321
|
+
## 4. Quality Gate
|
|
322
|
+
|
|
323
|
+
### 4a. Execute Gate Command
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
Skill({ skill: "maestro-impeccable", args: "critique {target}" })
|
|
327
|
+
```
|
|
328
|
+
or
|
|
329
|
+
```
|
|
330
|
+
Skill({ skill: "maestro-impeccable", args: "audit {target}" })
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### 4b. Parse Score
|
|
334
|
+
|
|
335
|
+
From critique output, extract:
|
|
336
|
+
- **score**: Nielsen's total — from `"**Total** | | **N/40**"` row
|
|
337
|
+
- **P0_count**: count of `[P0]` tagged findings
|
|
338
|
+
- **P1_count**: count of `[P1]` tagged findings
|
|
339
|
+
- **suggested_commands**: list of `/maestro-impeccable <cmd>` from "Suggested command" fields
|
|
340
|
+
|
|
341
|
+
From audit output, extract:
|
|
342
|
+
- **score**: dimension total — from `"**Total** | | **N/20**"` row
|
|
343
|
+
- **P0_count**: count of `[P0]` findings
|
|
344
|
+
|
|
345
|
+
### 4c. Evaluate
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
critique_pass = (score >= threshold) AND (P0_count == 0)
|
|
349
|
+
audit_pass = (score >= threshold * 0.5) AND (P0_count == 0)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### 4d. On PASS → advance to next chain step
|
|
353
|
+
|
|
354
|
+
### 4e. On FAIL
|
|
355
|
+
|
|
356
|
+
1. Collect suggested commands from P0/P1 findings
|
|
357
|
+
2. If no suggestions → use fallback mapping (see quality_gate_routing)
|
|
358
|
+
3. De-duplicate, cap at 3 commands per iteration
|
|
359
|
+
4. Sort: P0-suggested first
|
|
360
|
+
5. Execute each: `Skill({ skill: "maestro-impeccable", args: "{cmd} {target}" })`
|
|
361
|
+
6. Re-run gate command
|
|
362
|
+
7. Increment loop_count, append to status.json `gate_history`
|
|
363
|
+
|
|
364
|
+
### 4f. On Max Loops Exceeded → W002, force advance
|
|
365
|
+
|
|
366
|
+
## 5. Final Report (chain mode)
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
370
|
+
Chain complete: {chain_type}
|
|
371
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
372
|
+
|
|
373
|
+
Critique : {score}/40 (trend: {trend_line})
|
|
374
|
+
Audit : {score}/20
|
|
375
|
+
Loops : {total_iterations}
|
|
376
|
+
Commands : {executed_command_list}
|
|
377
|
+
|
|
378
|
+
Status : {PASS | PARTIAL — N issues remain}
|
|
379
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
If issues remain → suggest: "Run `/maestro-impeccable --chain improve {target}` to continue iteration."
|
|
383
|
+
|
|
384
|
+
## 6. Search CLI
|
|
385
|
+
|
|
386
|
+
Direct CLI dispatch (no Skill, no harvest):
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
maestro impeccable search "<query>" [options]
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
Options: `-d <domain>`, `-s <stack>`, `-n <max>`, `--design-system`, `-p <name>`, `-f <fmt>`, `--persist`, `--page <page>`, `-o <dir>`
|
|
393
|
+
|
|
394
|
+
Domains: style, color, chart, landing, product, ux, typography, icons, react, web, google-fonts.
|
|
395
|
+
Stacks: react, nextjs, vue, svelte, astro, swiftui, react-native, flutter, html-tailwind, shadcn, + more.
|
|
396
|
+
|
|
397
|
+
Search uses `workflows/impeccable/ui-search/search.py` (BM25 engine + 30+ CSV knowledge files).
|
|
398
|
+
|
|
109
399
|
</execution>
|
|
110
400
|
|
|
401
|
+
<quality_gate_routing>
|
|
402
|
+
|
|
403
|
+
### Finding → Command Fallback Mapping
|
|
404
|
+
|
|
405
|
+
When critique/audit findings lack explicit "Suggested command", map by category:
|
|
406
|
+
|
|
407
|
+
| Finding Category | Command |
|
|
408
|
+
|-----------------|---------|
|
|
409
|
+
| Visual hierarchy, layout, spacing, alignment | layout |
|
|
410
|
+
| Color, contrast, palette, monochromatic | colorize |
|
|
411
|
+
| Typography, font, readability, hierarchy | typeset |
|
|
412
|
+
| Animation, motion, transitions, micro-interaction | animate |
|
|
413
|
+
| Copy, labels, error messages, UX writing | clarify |
|
|
414
|
+
| Responsive, mobile, breakpoints, touch targets | adapt |
|
|
415
|
+
| Performance, loading, speed, bundle, jank | optimize |
|
|
416
|
+
| Complexity, overload, clutter, cognitive load | distill |
|
|
417
|
+
| Bland, safe, generic, lacks personality | bolder |
|
|
418
|
+
| Aggressive, overwhelming, loud, overstimulating | quieter |
|
|
419
|
+
| Onboarding, empty state, first-run, activation | onboard |
|
|
420
|
+
| Edge cases, i18n, error handling, overflow | harden |
|
|
421
|
+
| Personality, memorability, joy, delight | delight |
|
|
422
|
+
|
|
423
|
+
### Commands Never Auto-Selected
|
|
424
|
+
|
|
425
|
+
| Command | Reason |
|
|
426
|
+
|---------|--------|
|
|
427
|
+
| teach | Project setup (run in S_SETUP only) |
|
|
428
|
+
| shape | Requires user interview |
|
|
429
|
+
| craft | Full build with multiple gates |
|
|
430
|
+
| live | Interactive browser mode |
|
|
431
|
+
| document | Generates DESIGN.md (setup) |
|
|
432
|
+
| extract | Design system extraction (setup) |
|
|
433
|
+
| overdrive | Requires explicit user vision |
|
|
434
|
+
| critique | Gate command, not a fix |
|
|
435
|
+
| audit | Gate command, not a fix |
|
|
436
|
+
|
|
437
|
+
</quality_gate_routing>
|
|
438
|
+
|
|
111
439
|
<error_codes>
|
|
112
440
|
| Code | Severity | Description |
|
|
113
441
|
|------|----------|-------------|
|
|
114
|
-
| E001 | error | Invalid sub-command (not in 24 valid commands) |
|
|
442
|
+
| E001 | error | Invalid sub-command (not in 24 valid commands) or impeccable skill not available |
|
|
115
443
|
| E002 | error | No intent or target specified |
|
|
116
|
-
|
|
|
117
|
-
|
|
|
444
|
+
| E003 | error | Invalid --chain type |
|
|
445
|
+
| E004 | error | Invalid --enhance command |
|
|
446
|
+
| E005 | error | Resume session not found |
|
|
447
|
+
| E006 | error | Python 3 not available for design system generation |
|
|
448
|
+
| E007 | error | ui-search scripts not found at expected path |
|
|
449
|
+
| W001 | warning | PRODUCT.md missing, prepending teach to chain |
|
|
450
|
+
| W002 | warning | Max quality gate loops exceeded, forcing continue |
|
|
451
|
+
| W003 | warning | Could not parse score from critique/audit output |
|
|
452
|
+
| W004 | warning | Design system generation failed, falling back to shape full interview |
|
|
453
|
+
| W005 | warning | Bridge transformation failed, continuing without DESIGN.md |
|
|
454
|
+
| W006 | warning | Harvest failed — design knowledge not captured (command still succeeded) |
|
|
455
|
+
| W007 | warning | PRODUCT.md missing — skill will auto-trigger teach |
|
|
456
|
+
| W008 | warning | Node.js not available for prototype rendering, falling back to text-only |
|
|
118
457
|
</error_codes>
|
|
119
458
|
|
|
120
459
|
<success_criteria>
|
|
121
|
-
- [ ]
|
|
122
|
-
- [ ]
|
|
123
|
-
- [ ]
|
|
460
|
+
- [ ] Mode detected correctly (direct / chain / search / resume)
|
|
461
|
+
- [ ] Sub-command recognized and routed (direct mode)
|
|
462
|
+
- [ ] Intent classified and chain type selected (chain mode)
|
|
463
|
+
- [ ] Context loaded (PRODUCT.md present or taught)
|
|
464
|
+
- [ ] Session dir created with status.json before chain execution
|
|
465
|
+
- [ ] All chain steps executed via Skill("maestro-impeccable", ...)
|
|
466
|
+
- [ ] Quality gate evaluated with parsed scores
|
|
467
|
+
- [ ] Refine loop executed when gate failed (if applicable)
|
|
468
|
+
- [ ] Gate history and scores persisted to status.json
|
|
124
469
|
- [ ] Knowhow entry created in .workflow/knowhow/ (unless --skip-harvest or live)
|
|
125
|
-
- [ ]
|
|
470
|
+
- [ ] Progress tracked via TodoWrite throughout (chain mode)
|
|
126
471
|
</success_criteria>
|
|
@@ -104,7 +104,7 @@ Follow `~/.maestro/workflows/spec-generate.md` completely.
|
|
|
104
104
|
|-----------|-----------|
|
|
105
105
|
| Roadmap approved, need analysis | /maestro-analyze 1 |
|
|
106
106
|
| Simple project, ready to plan | /maestro-plan 1 |
|
|
107
|
-
| Need UI design first | /maestro-
|
|
107
|
+
| Need UI design first | /maestro-impeccable --chain build |
|
|
108
108
|
| View project dashboard | /manage-status |
|
|
109
109
|
| Need project setup (full mode) | /maestro-init |
|
|
110
110
|
</execution>
|
package/package.json
CHANGED
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: maestro-ui-craft
|
|
3
|
-
description: Chain maestro-impeccable commands with intelligent routing and quality gate loops for automated UI production
|
|
4
|
-
argument-hint: "<intent|target> [--chain build|improve|enhance|harden|live] [--enhance <cmd>] [--threshold <score>] [--max-loops <n>] [--skip-design-explore] [--skip-design] [--styles <N>] [--stack <stack>] [-y] [-c]"
|
|
5
|
-
allowed-tools:
|
|
6
|
-
- Read
|
|
7
|
-
- Write
|
|
8
|
-
- Edit
|
|
9
|
-
- Bash
|
|
10
|
-
- Glob
|
|
11
|
-
- Grep
|
|
12
|
-
- Agent
|
|
13
|
-
- Skill
|
|
14
|
-
- AskUserQuestion
|
|
15
|
-
- TodoWrite
|
|
16
|
-
---
|
|
17
|
-
<purpose>
|
|
18
|
-
Orchestrate maestro-impeccable skill commands via intelligent intent routing + quality gate auto-iteration.
|
|
19
|
-
Chain: Build → Evaluate → Auto-Refine → Re-evaluate → Verify.
|
|
20
|
-
|
|
21
|
-
Core innovation: critique/audit scores drive automatic command selection and iteration loops.
|
|
22
|
-
Impeccable has 23 commands across 6 categories — this command chains them into automated pipelines
|
|
23
|
-
with quality gates that loop until design quality meets the threshold.
|
|
24
|
-
|
|
25
|
-
Includes integrated design-explore: multi-variant design system generation (via ui-search BM25 engine + CSV knowledge base),
|
|
26
|
-
HTML prototype rendering for visual comparison, interactive user review with mix support,
|
|
27
|
-
and automatic bridge to impeccable's DESIGN.md format. Replaces the former maestro-ui-design command.
|
|
28
|
-
|
|
29
|
-
Prerequisite: maestro-impeccable skill available (auto-discovered by harness).
|
|
30
|
-
|
|
31
|
-
Session: `.workflow/.maestro/ui-craft-{YYYYMMDD-HHmmss}/status.json`
|
|
32
|
-
</purpose>
|
|
33
|
-
|
|
34
|
-
<deferred_reading>
|
|
35
|
-
- [impeccable harvest workflow](~/.maestro/workflows/impeccable.md) — read after command execution for harvest logic
|
|
36
|
-
- [design stage workflow](~/.maestro/workflows/impeccable/design.md) — read when S_DESIGN_EXPLORE or S_BRIDGE state entered
|
|
37
|
-
</deferred_reading>
|
|
38
|
-
|
|
39
|
-
<invariants>
|
|
40
|
-
1. **Session before execution** — status.json created before any chain step runs
|
|
41
|
-
2. **All steps via Skill** — every impeccable command dispatched through `Skill({ skill: "maestro-impeccable" })`
|
|
42
|
-
3. **Gate scores drive loops** — refine loop auto-selects commands from P0/P1 findings, never from hardcoded lists
|
|
43
|
-
4. **Interactive gates respected** — teach, shape, craft retain their user gates; never suppress
|
|
44
|
-
</invariants>
|
|
45
|
-
|
|
46
|
-
<context>
|
|
47
|
-
$ARGUMENTS — intent description or target path, with optional flags.
|
|
48
|
-
|
|
49
|
-
**Keywords:** `continue`/`next` → resume previous session
|
|
50
|
-
|
|
51
|
-
**Flags:**
|
|
52
|
-
- `--chain <type>` — Force chain type: build, improve, enhance, harden, live
|
|
53
|
-
- `--enhance <cmd>` — Specific enhance command for enhance chain (animate|colorize|typeset|layout|delight|overdrive|bolder)
|
|
54
|
-
- `--threshold <score>` — Critique pass threshold (default: 26/40). Audit threshold auto-computed as threshold×0.5
|
|
55
|
-
- `--max-loops <n>` — Maximum quality gate iterations (default: 3)
|
|
56
|
-
- `-c` / `--continue` — Resume previous ui-craft session
|
|
57
|
-
- `-y` — Auto mode: auto-select at ambiguous routing, skip confirmations where impeccable allows
|
|
58
|
-
- `--skip-design-explore` / `--skip-design` — Skip design-explore (prototype comparison) and bridge (use existing DESIGN.md or full shape interview)
|
|
59
|
-
- `--styles <N>` — Number of design system variants to generate and compare (2-5, default 3). Only used in build chain design-explore step
|
|
60
|
-
- `--stack <stack>` — Tech stack for supplementary guidelines (default: html-tailwind). Passed to ui-search
|
|
61
|
-
</context>
|
|
62
|
-
|
|
63
|
-
<chains>
|
|
64
|
-
|
|
65
|
-
### Chain Definitions
|
|
66
|
-
|
|
67
|
-
| Chain | Sequence | Gate Condition |
|
|
68
|
-
|-------|----------|----------------|
|
|
69
|
-
| **build** | teach? → **design_explore?** → shape → craft → **critique** → [refine loop] → audit → polish | critique ≥ threshold AND P0 == 0 |
|
|
70
|
-
| **improve** | **critique** → [refine loop] → polish → audit | critique ≥ threshold AND P0 == 0 |
|
|
71
|
-
| **enhance** | {cmd} → **critique** → polish (if needed) | critique ≥ threshold |
|
|
72
|
-
| **harden** | harden → **audit** → polish | audit ≥ threshold×0.5 |
|
|
73
|
-
| **live** | live | — (interactive, no gate) |
|
|
74
|
-
|
|
75
|
-
- `teach?` — conditional: only if PRODUCT.md missing/placeholder
|
|
76
|
-
- `design_explore?` — conditional: only if DESIGN.md missing AND `--skip-design-explore` not set. Delegates to `Skill("maestro-impeccable", "explore")` which handles variant generation, prototype rendering, visual comparison, user selection/mix, AND bridge to DESIGN.md internally
|
|
77
|
-
- `[refine loop]` — quality gate loop: extract suggested commands from critique → execute → re-critique
|
|
78
|
-
|
|
79
|
-
### Intent → Chain Routing
|
|
80
|
-
|
|
81
|
-
| Intent Pattern | Chain |
|
|
82
|
-
|---------------|-------|
|
|
83
|
-
| 新建, create, build, new, 从零, landing, feature, page | build |
|
|
84
|
-
| 设计, design, 风格, style, 设计系统, design system, 视觉, theme | build |
|
|
85
|
-
| 改进, improve, fix, 优化, iterate, better, 迭代 | improve |
|
|
86
|
-
| 动画, 颜色, 排版, animate, color, type, bold, delight, enhance | enhance |
|
|
87
|
-
| 生产, production, harden, 上线, ship, edge case, i18n | harden |
|
|
88
|
-
| 实时, live, browser, 浏览器, variant | live |
|
|
89
|
-
|
|
90
|
-
Explicit `--chain` overrides routing. Ambiguous + no `-y` → AskUserQuestion.
|
|
91
|
-
|
|
92
|
-
</chains>
|
|
93
|
-
|
|
94
|
-
<state_machine>
|
|
95
|
-
|
|
96
|
-
<states>
|
|
97
|
-
S_PARSE — 解析参数、意图分类、chain 选择 PERSIST: —
|
|
98
|
-
S_RESUME — 扫描已有 ui-craft session、恢复执行 PERSIST: —
|
|
99
|
-
S_SETUP — 加载 context、检查 PRODUCT.md PERSIST: —
|
|
100
|
-
S_CREATE — 创建 session + status.json PERSIST: session (全量)
|
|
101
|
-
S_DESIGN_EXPLORE — 委托 impeccable explore:多变体生成、原型对比、选型/混搭、自动 bridge 到 DESIGN.md PERSIST: explore_completed, design_md_path
|
|
102
|
-
S_CHAIN — 按序执行 chain 步骤 PERSIST: step progress, executed commands
|
|
103
|
-
S_GATE — 质量门控:解析评分、决策 PERSIST: scores, loop count
|
|
104
|
-
S_REFINE — 执行自动选取的 refine 命令 PERSIST: refine commands, loop state
|
|
105
|
-
S_REPORT — 最终报告 + 趋势 PERSIST: final scores, status
|
|
106
|
-
</states>
|
|
107
|
-
|
|
108
|
-
<transitions>
|
|
109
|
-
|
|
110
|
-
S_PARSE:
|
|
111
|
-
→ S_RESUME WHEN: -c / --continue flag OR keyword "continue"/"next"
|
|
112
|
-
→ S_SETUP WHEN: chain selected (explicit or routed)
|
|
113
|
-
→ S_PARSE WHEN: ambiguous AND not -y DO: AskUserQuestion
|
|
114
|
-
→ END WHEN: no intent AND no target → E002
|
|
115
|
-
|
|
116
|
-
S_RESUME:
|
|
117
|
-
→ S_CHAIN WHEN: session found DO: A_LOCATE_SESSION
|
|
118
|
-
→ S_FALLBACK WHEN: no session found → E005
|
|
119
|
-
|
|
120
|
-
S_SETUP:
|
|
121
|
-
→ S_CREATE DO: A_LOAD_CONTEXT
|
|
122
|
-
|
|
123
|
-
S_CREATE:
|
|
124
|
-
→ S_CHAIN DO: A_CREATE_SESSION
|
|
125
|
-
|
|
126
|
-
S_CHAIN:
|
|
127
|
-
→ S_DESIGN_EXPLORE WHEN: current step is 'design_explore' AND DESIGN.md missing AND --skip-design-explore not set AND --skip-design not set
|
|
128
|
-
→ S_GATE WHEN: current step is gate command (critique/audit)
|
|
129
|
-
→ S_CHAIN WHEN: step is design_explore but skip conditions met → advance
|
|
130
|
-
→ S_CHAIN WHEN: step is normal command → execute → advance
|
|
131
|
-
→ S_REPORT WHEN: all steps complete
|
|
132
|
-
|
|
133
|
-
S_DESIGN_EXPLORE:
|
|
134
|
-
→ S_CHAIN WHEN: explore completed (DESIGN.md produced) → advance to shape
|
|
135
|
-
→ S_CHAIN WHEN: explore failed → W004 → advance to shape (full interview fallback)
|
|
136
|
-
|
|
137
|
-
S_GATE:
|
|
138
|
-
→ S_CHAIN WHEN: PASS (score ≥ threshold AND P0 == 0) → advance to next step
|
|
139
|
-
→ S_REFINE WHEN: FAIL (score < threshold OR P0 > 0)
|
|
140
|
-
→ S_CHAIN WHEN: max loops exceeded → W002 → force advance
|
|
141
|
-
|
|
142
|
-
S_REFINE:
|
|
143
|
-
→ S_GATE DO: execute auto-selected commands → re-run gate command
|
|
144
|
-
GUARD: loop_count < max_loops
|
|
145
|
-
|
|
146
|
-
S_REPORT:
|
|
147
|
-
→ END DO: A_FINAL_REPORT
|
|
148
|
-
|
|
149
|
-
</transitions>
|
|
150
|
-
|
|
151
|
-
<actions>
|
|
152
|
-
|
|
153
|
-
### A_LOCATE_SESSION
|
|
154
|
-
|
|
155
|
-
1. Scan `.workflow/.maestro/ui-craft-*/status.json`, filter `status == "running"`, sort DESC
|
|
156
|
-
2. Take most recent; load into context as current session
|
|
157
|
-
3. Resume from `current_step` position
|
|
158
|
-
|
|
159
|
-
### A_LOAD_CONTEXT
|
|
160
|
-
|
|
161
|
-
1. Trigger impeccable context loading by invoking: `Skill({ skill: "maestro-impeccable", args: "teach" })`
|
|
162
|
-
- Impeccable's own setup will auto-discover and load PRODUCT.md / DESIGN.md
|
|
163
|
-
- If PRODUCT.md missing/placeholder, impeccable teach handles the interview
|
|
164
|
-
2. If teach was not in the chain but PRODUCT.md is missing:
|
|
165
|
-
- Prepend `teach` to chain start
|
|
166
|
-
- Announce: W001
|
|
167
|
-
3. Context is now in conversation for subsequent commands
|
|
168
|
-
|
|
169
|
-
### A_CREATE_SESSION
|
|
170
|
-
|
|
171
|
-
1. Read `.workflow/state.json` for project context (phase, milestone)
|
|
172
|
-
2. Create `.workflow/.maestro/ui-craft-{YYYYMMDD-HHmmss}/status.json`:
|
|
173
|
-
```json
|
|
174
|
-
{ "session_id": "ui-craft-{ts}", "source": "ui-craft", "intent": "...",
|
|
175
|
-
"chain_type": "build|improve|enhance|harden|live", "target": "...",
|
|
176
|
-
"auto_mode": false, "threshold": 26, "max_loops": 3,
|
|
177
|
-
"steps": [{ "index": 0, "command": "shape", "status": "pending" }],
|
|
178
|
-
"gate_history": [], "loop_count": 0,
|
|
179
|
-
"current_step": 0, "status": "running",
|
|
180
|
-
"created_at": "ISO-8601", "updated_at": "ISO-8601" }
|
|
181
|
-
```
|
|
182
|
-
3. Write status.json before executing any step
|
|
183
|
-
|
|
184
|
-
### A_DESIGN_EXPLORE
|
|
185
|
-
|
|
186
|
-
Delegate to impeccable explore as a black-box command. The explore command internally handles:
|
|
187
|
-
variant generation, prototype rendering, visual comparison, user review, mix protocol, rejected variant harvest, bridge to DESIGN.md, and spec registration.
|
|
188
|
-
|
|
189
|
-
1. Execute: `Skill({ skill: "maestro-impeccable", args: "explore --styles {styles_count}" })`
|
|
190
|
-
2. On completion: verify `.workflow/impeccable/DESIGN.md` exists
|
|
191
|
-
3. Update status.json: `explore_completed: true`, `design_md_path`
|
|
192
|
-
|
|
193
|
-
### A_FINAL_REPORT
|
|
194
|
-
|
|
195
|
-
1. Read critique trend if available (impeccable's critique persists snapshots automatically)
|
|
196
|
-
2. Update status.json with `status: "completed"` and final scores
|
|
197
|
-
3. Present summary table with scores, iterations, commands executed
|
|
198
|
-
|
|
199
|
-
</actions>
|
|
200
|
-
|
|
201
|
-
</state_machine>
|
|
202
|
-
|
|
203
|
-
<execution>
|
|
204
|
-
|
|
205
|
-
## 1. Parse & Route
|
|
206
|
-
|
|
207
|
-
1. If `-c` / `--continue` or keyword "continue"/"next" → S_RESUME
|
|
208
|
-
2. If `--chain` present → use directly
|
|
209
|
-
3. Otherwise → match $ARGUMENTS against intent patterns
|
|
210
|
-
4. If `--enhance` present → chain = enhance, cmd = --enhance value
|
|
211
|
-
5. For enhance chain without `--enhance` → infer from intent ("动画" → animate, "颜色" → colorize, etc.)
|
|
212
|
-
6. Ambiguous + no `-y` → ask user to pick chain
|
|
213
|
-
|
|
214
|
-
Create TodoWrite with chain steps.
|
|
215
|
-
|
|
216
|
-
## 2. Setup Context
|
|
217
|
-
|
|
218
|
-
1. If chain starts with `teach` → execute it first, impeccable handles context loading internally
|
|
219
|
-
2. Otherwise → invoke `Skill({ skill: "maestro-impeccable" })` with no args to trigger setup (context + register)
|
|
220
|
-
3. If impeccable reports PRODUCT.md missing → prepend teach, execute, then resume
|
|
221
|
-
|
|
222
|
-
## 3. Create Session
|
|
223
|
-
|
|
224
|
-
Write `.workflow/.maestro/ui-craft-{ts}/status.json` with chain steps before any execution.
|
|
225
|
-
|
|
226
|
-
## 4. Execute Chain
|
|
227
|
-
|
|
228
|
-
For each step in chain, sequentially:
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
▸ Step {n}/{total}: /maestro-impeccable {command} {target}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
Execute via: `Skill({ skill: "maestro-impeccable", args: "{command} {target}" })`
|
|
235
|
-
|
|
236
|
-
After each step: update status.json `current_step` and step `status`.
|
|
237
|
-
|
|
238
|
-
**Step-specific logic:**
|
|
239
|
-
|
|
240
|
-
### 4a. Design-explore step (build chain only)
|
|
241
|
-
|
|
242
|
-
When current step is `design_explore`:
|
|
243
|
-
|
|
244
|
-
1. Check if `.workflow/impeccable/DESIGN.md` already exists → skip, advance to shape
|
|
245
|
-
2. Check if `--skip-design-explore` or `--skip-design` is set → skip, advance to shape
|
|
246
|
-
3. Otherwise → execute A_DESIGN_EXPLORE:
|
|
247
|
-
- `Skill({ skill: "maestro-impeccable", args: "explore --styles {styles_count}" })`
|
|
248
|
-
- explore handles everything internally: variant generation, prototype rendering, visual comparison, user selection/mix, bridge to DESIGN.md, spec registration
|
|
249
|
-
4. On completion → verify DESIGN.md exists, advance to shape
|
|
250
|
-
5. On failure → W004, advance to shape (full interview fallback, no DESIGN.md)
|
|
251
|
-
|
|
252
|
-
### 4c. Normal steps
|
|
253
|
-
|
|
254
|
-
- `teach`, `shape`, `craft` are interactive — do NOT suppress their user gates
|
|
255
|
-
- After `teach` completes → re-run context loader for fresh PRODUCT.md
|
|
256
|
-
- After `craft` completes → the build exists, ready for evaluation
|
|
257
|
-
- Gate steps (critique/audit) → transition to quality gate logic (Section 5)
|
|
258
|
-
|
|
259
|
-
## 5. Quality Gate
|
|
260
|
-
|
|
261
|
-
When chain reaches a gate step (critique or audit):
|
|
262
|
-
|
|
263
|
-
### 5a. Execute Gate Command
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
Skill({ skill: "maestro-impeccable", args: "critique {target}" })
|
|
267
|
-
```
|
|
268
|
-
or
|
|
269
|
-
```
|
|
270
|
-
Skill({ skill: "maestro-impeccable", args: "audit {target}" })
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### 5b. Parse Score
|
|
274
|
-
|
|
275
|
-
From critique output, extract:
|
|
276
|
-
- **score**: Nielsen's total (N/40) — from "**Total** | | **N/40**" row
|
|
277
|
-
- **P0_count**: count of `[P0]` tagged findings
|
|
278
|
-
- **P1_count**: count of `[P1]` tagged findings
|
|
279
|
-
- **suggested_commands**: list of "/maestro-impeccable <cmd>" from "Suggested command" fields
|
|
280
|
-
|
|
281
|
-
From audit output, extract:
|
|
282
|
-
- **score**: dimension total (N/20) — from "**Total** | | **N/20**" row
|
|
283
|
-
- **P0_count**: count of `[P0]` findings
|
|
284
|
-
|
|
285
|
-
### 5c. Evaluate
|
|
286
|
-
|
|
287
|
-
```
|
|
288
|
-
critique_pass = (score >= threshold) AND (P0_count == 0)
|
|
289
|
-
audit_pass = (score >= threshold * 0.5) AND (P0_count == 0)
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### 5d. On PASS
|
|
293
|
-
|
|
294
|
-
```
|
|
295
|
-
✓ Gate passed: {score}/{max} (P0: 0)
|
|
296
|
-
```
|
|
297
|
-
→ advance to next chain step
|
|
298
|
-
|
|
299
|
-
### 5e. On FAIL
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
⟳ Loop {n}/{max_loops}: {score}/{max}, P0={count}
|
|
303
|
-
Running: {command_list}
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
1. Collect suggested commands from P0/P1 findings
|
|
307
|
-
2. If no suggestions found → use fallback mapping (see quality_gate_routing)
|
|
308
|
-
3. De-duplicate, cap at 3 commands per iteration
|
|
309
|
-
4. Sort: P0-suggested first
|
|
310
|
-
5. Execute each: `Skill({ skill: "maestro-impeccable", args: "{cmd} {target}" })`
|
|
311
|
-
- Pass issue context: the specific findings that triggered this command are already in conversation
|
|
312
|
-
6. Re-run gate command (critique/audit)
|
|
313
|
-
7. Increment loop_count
|
|
314
|
-
8. Append to status.json `gate_history`
|
|
315
|
-
|
|
316
|
-
### 5f. On Max Loops Exceeded
|
|
317
|
-
|
|
318
|
-
```
|
|
319
|
-
⚠ Max iterations ({max_loops}) reached. Score: {score}/{max}, P0: {count}
|
|
320
|
-
Continuing chain with remaining issues.
|
|
321
|
-
```
|
|
322
|
-
→ force advance to next chain step
|
|
323
|
-
|
|
324
|
-
## 6. Final Report
|
|
325
|
-
|
|
326
|
-
```
|
|
327
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
328
|
-
Chain complete: {chain_type}
|
|
329
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
330
|
-
|
|
331
|
-
Critique : {score}/40 (trend: {trend_line})
|
|
332
|
-
Audit : {score}/20
|
|
333
|
-
Loops : {total_iterations}
|
|
334
|
-
Commands : {executed_command_list}
|
|
335
|
-
|
|
336
|
-
Status : {PASS | PARTIAL — N issues remain}
|
|
337
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Update status.json: `status: "completed"`, `final_scores`, `completed_at`.
|
|
341
|
-
|
|
342
|
-
If issues remain → suggest: "Run `/maestro-ui-craft --chain improve {target}` to continue iteration."
|
|
343
|
-
|
|
344
|
-
</execution>
|
|
345
|
-
|
|
346
|
-
<quality_gate_routing>
|
|
347
|
-
|
|
348
|
-
### Finding → Command Fallback Mapping
|
|
349
|
-
|
|
350
|
-
When critique/audit findings lack explicit "Suggested command", map by category:
|
|
351
|
-
|
|
352
|
-
| Finding Category | Command |
|
|
353
|
-
|-----------------|---------|
|
|
354
|
-
| Visual hierarchy, layout, spacing, alignment | layout |
|
|
355
|
-
| Color, contrast, palette, monochromatic | colorize |
|
|
356
|
-
| Typography, font, readability, hierarchy | typeset |
|
|
357
|
-
| Animation, motion, transitions, micro-interaction | animate |
|
|
358
|
-
| Copy, labels, error messages, UX writing | clarify |
|
|
359
|
-
| Responsive, mobile, breakpoints, touch targets | adapt |
|
|
360
|
-
| Performance, loading, speed, bundle, jank | optimize |
|
|
361
|
-
| Complexity, overload, clutter, cognitive load | distill |
|
|
362
|
-
| Bland, safe, generic, lacks personality | bolder |
|
|
363
|
-
| Aggressive, overwhelming, loud, overstimulating | quieter |
|
|
364
|
-
| Onboarding, empty state, first-run, activation | onboard |
|
|
365
|
-
| Edge cases, i18n, error handling, overflow | harden |
|
|
366
|
-
| Personality, memorability, joy, delight | delight |
|
|
367
|
-
|
|
368
|
-
### Commands Never Auto-Selected
|
|
369
|
-
|
|
370
|
-
These are structural/interactive — never picked by the refine loop:
|
|
371
|
-
|
|
372
|
-
| Command | Reason |
|
|
373
|
-
|---------|--------|
|
|
374
|
-
| teach | Project setup (run in S_SETUP only) |
|
|
375
|
-
| shape | Requires user interview |
|
|
376
|
-
| craft | Full build with multiple gates |
|
|
377
|
-
| live | Interactive browser mode |
|
|
378
|
-
| document | Generates DESIGN.md (setup) |
|
|
379
|
-
| extract | Design system extraction (setup) |
|
|
380
|
-
| overdrive | Requires explicit user vision |
|
|
381
|
-
| critique | Gate command, not a fix |
|
|
382
|
-
| audit | Gate command, not a fix |
|
|
383
|
-
| design | Design system generation (setup) |
|
|
384
|
-
| bridge | Format bridging (setup) |
|
|
385
|
-
|
|
386
|
-
</quality_gate_routing>
|
|
387
|
-
|
|
388
|
-
<error_codes>
|
|
389
|
-
| Code | Severity | Description |
|
|
390
|
-
|------|----------|-------------|
|
|
391
|
-
| E001 | error | Impeccable skill not found in project |
|
|
392
|
-
| E002 | error | No intent or target specified |
|
|
393
|
-
| E003 | error | Invalid --chain type |
|
|
394
|
-
| E004 | error | Invalid --enhance command |
|
|
395
|
-
| E005 | error | Resume session not found |
|
|
396
|
-
| W001 | warning | PRODUCT.md missing, prepending teach to chain |
|
|
397
|
-
| W002 | warning | Max quality gate loops exceeded, forcing continue |
|
|
398
|
-
| W003 | warning | Could not parse score from critique/audit output |
|
|
399
|
-
| E006 | error | Python 3 not available for design system generation |
|
|
400
|
-
| E007 | error | ui-search scripts not found at expected path |
|
|
401
|
-
| W004 | warning | Design system generation failed, skipping design+bridge, falling back to shape full interview |
|
|
402
|
-
| W005 | warning | Bridge transformation failed, continuing without DESIGN.md |
|
|
403
|
-
| W008 | warning | Node.js not available for prototype rendering, falling back to text-only variant comparison |
|
|
404
|
-
</error_codes>
|
|
405
|
-
|
|
406
|
-
<success_criteria>
|
|
407
|
-
- [ ] Intent classified and chain type selected
|
|
408
|
-
- [ ] Context loaded (PRODUCT.md present or taught)
|
|
409
|
-
- [ ] Session dir created with status.json before execution
|
|
410
|
-
- [ ] All chain steps executed via Skill("maestro-impeccable", ...)
|
|
411
|
-
- [ ] Quality gate evaluated with parsed scores
|
|
412
|
-
- [ ] Refine loop executed when gate failed (if applicable)
|
|
413
|
-
- [ ] Gate history and scores persisted to status.json
|
|
414
|
-
- [ ] Final report with scores and trend presented
|
|
415
|
-
- [ ] Progress tracked via TodoWrite throughout
|
|
416
|
-
</success_criteria>
|