maestro-flow 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/.claude/agents/workflow-collab-planner.md +1 -1
  2. package/.claude/agents/workflow-executor.md +1 -1
  3. package/.claude/agents/workflow-plan-checker.md +1 -1
  4. package/.claude/agents/workflow-planner.md +1 -1
  5. package/.claude/commands/learn-decompose.md +176 -176
  6. package/.claude/commands/learn-follow.md +167 -167
  7. package/.claude/commands/learn-retro.md +1 -1
  8. package/.claude/commands/maestro-coordinate.md +1 -3
  9. package/.claude/commands/manage-harvest.md +131 -131
  10. package/.claude/commands/manage-issue.md +2 -2
  11. package/.claude/commands/spec-add.md +67 -56
  12. package/.claude/commands/spec-load.md +66 -64
  13. package/.claude/commands/spec-setup.md +5 -9
  14. package/.codex/skills/learn-decompose/SKILL.md +119 -0
  15. package/.codex/skills/learn-follow/SKILL.md +83 -0
  16. package/.codex/skills/learn-investigate/SKILL.md +83 -0
  17. package/.codex/skills/learn-retro/SKILL.md +83 -0
  18. package/.codex/skills/learn-second-opinion/SKILL.md +86 -0
  19. package/.codex/skills/maestro/SKILL.md +151 -279
  20. package/.codex/skills/maestro-analyze/SKILL.md +59 -71
  21. package/.codex/skills/maestro-brainstorm/SKILL.md +452 -463
  22. package/.codex/skills/maestro-chain/SKILL.md +95 -110
  23. package/.codex/skills/maestro-coordinate/SKILL.md +68 -234
  24. package/.codex/skills/maestro-execute/SKILL.md +435 -446
  25. package/.codex/skills/maestro-fork/SKILL.md +68 -0
  26. package/.codex/skills/maestro-init/SKILL.md +171 -167
  27. package/.codex/skills/maestro-learn/SKILL.md +80 -0
  28. package/.codex/skills/maestro-link-coordinate/SKILL.md +224 -220
  29. package/.codex/skills/maestro-merge/SKILL.md +62 -0
  30. package/.codex/skills/maestro-milestone-audit/SKILL.md +108 -103
  31. package/.codex/skills/maestro-milestone-complete/SKILL.md +155 -149
  32. package/.codex/skills/maestro-milestone-release/SKILL.md +70 -0
  33. package/.codex/skills/maestro-overlay/SKILL.md +188 -185
  34. package/.codex/skills/maestro-plan/SKILL.md +58 -69
  35. package/.codex/skills/maestro-quick/SKILL.md +26 -23
  36. package/.codex/skills/maestro-roadmap/SKILL.md +65 -73
  37. package/.codex/skills/maestro-spec-generate/SKILL.md +66 -74
  38. package/.codex/skills/maestro-ui-design/SKILL.md +34 -31
  39. package/.codex/skills/maestro-verify/SKILL.md +556 -566
  40. package/.codex/skills/manage-codebase-rebuild/SKILL.md +397 -405
  41. package/.codex/skills/manage-codebase-refresh/SKILL.md +93 -82
  42. package/.codex/skills/manage-harvest/SKILL.md +82 -0
  43. package/.codex/skills/manage-issue/SKILL.md +80 -65
  44. package/.codex/skills/manage-issue-discover/SKILL.md +491 -503
  45. package/.codex/skills/manage-learn/SKILL.md +190 -186
  46. package/.codex/skills/manage-memory/SKILL.md +95 -72
  47. package/.codex/skills/manage-memory-capture/SKILL.md +99 -86
  48. package/.codex/skills/manage-status/SKILL.md +102 -89
  49. package/.codex/skills/quality-business-test/SKILL.md +228 -223
  50. package/.codex/skills/quality-debug/SKILL.md +54 -66
  51. package/.codex/skills/quality-integration-test/SKILL.md +532 -544
  52. package/.codex/skills/quality-refactor/SKILL.md +197 -191
  53. package/.codex/skills/quality-retrospective/SKILL.md +512 -505
  54. package/.codex/skills/quality-review/SKILL.md +93 -105
  55. package/.codex/skills/quality-sync/SKILL.md +101 -89
  56. package/.codex/skills/quality-test/SKILL.md +202 -198
  57. package/.codex/skills/quality-test-gen/SKILL.md +93 -104
  58. package/.codex/skills/spec-add/SKILL.md +58 -39
  59. package/.codex/skills/spec-load/SKILL.md +45 -40
  60. package/.codex/skills/spec-map/SKILL.md +180 -182
  61. package/.codex/skills/spec-setup/SKILL.md +94 -76
  62. package/.codex/skills/team-coordinate/SKILL.md +346 -357
  63. package/.codex/skills/team-executor/SKILL.md +70 -112
  64. package/.codex/skills/team-lifecycle-v4/SKILL.md +311 -299
  65. package/.codex/skills/team-quality-assurance/SKILL.md +234 -227
  66. package/.codex/skills/team-review/SKILL.md +232 -225
  67. package/.codex/skills/team-tech-debt/SKILL.md +78 -100
  68. package/.codex/skills/team-testing/SKILL.md +242 -235
  69. package/.codex/skills/wiki-connect/SKILL.md +75 -0
  70. package/.codex/skills/wiki-digest/SKILL.md +87 -0
  71. package/README.md +7 -4
  72. package/README.zh-CN.md +7 -4
  73. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +1 -1
  74. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +75 -30
  75. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  76. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +5 -0
  77. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +5 -0
  78. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  79. package/dashboard/dist-server/dashboard/src/shared/constants.js +5 -0
  80. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  81. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +21 -0
  82. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  83. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +3 -2
  84. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +1 -1
  85. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  86. package/dashboard/dist-server/src/hooks/constants.d.ts +2 -0
  87. package/dashboard/dist-server/src/hooks/constants.js +2 -0
  88. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  89. package/dist/src/commands/collab.js +4 -4
  90. package/dist/src/commands/collab.js.map +1 -1
  91. package/dist/src/commands/hooks.d.ts.map +1 -1
  92. package/dist/src/commands/hooks.js +66 -1
  93. package/dist/src/commands/hooks.js.map +1 -1
  94. package/dist/src/commands/spec.d.ts.map +1 -1
  95. package/dist/src/commands/spec.js +7 -2
  96. package/dist/src/commands/spec.js.map +1 -1
  97. package/dist/src/hooks/constants.d.ts +2 -0
  98. package/dist/src/hooks/constants.d.ts.map +1 -1
  99. package/dist/src/hooks/constants.js +2 -0
  100. package/dist/src/hooks/constants.js.map +1 -1
  101. package/dist/src/hooks/guards/index.d.ts +1 -0
  102. package/dist/src/hooks/guards/index.d.ts.map +1 -1
  103. package/dist/src/hooks/guards/index.js +1 -0
  104. package/dist/src/hooks/guards/index.js.map +1 -1
  105. package/dist/src/hooks/guards/spec-validator.d.ts +25 -0
  106. package/dist/src/hooks/guards/spec-validator.d.ts.map +1 -0
  107. package/dist/src/hooks/guards/spec-validator.js +66 -0
  108. package/dist/src/hooks/guards/spec-validator.js.map +1 -0
  109. package/dist/src/hooks/keyword-spec-injector.d.ts +21 -0
  110. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -0
  111. package/dist/src/hooks/keyword-spec-injector.js +96 -0
  112. package/dist/src/hooks/keyword-spec-injector.js.map +1 -0
  113. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts +2 -1
  114. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
  115. package/dist/src/hooks/plugins/spec-injection-plugin.js +21 -12
  116. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  117. package/dist/src/hooks/spec-bridge.d.ts +40 -0
  118. package/dist/src/hooks/spec-bridge.d.ts.map +1 -0
  119. package/dist/src/hooks/spec-bridge.js +97 -0
  120. package/dist/src/hooks/spec-bridge.js.map +1 -0
  121. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  122. package/dist/src/hooks/spec-injector.js +18 -12
  123. package/dist/src/hooks/spec-injector.js.map +1 -1
  124. package/dist/src/team/phase-orchestrator.d.ts +52 -0
  125. package/dist/src/team/phase-orchestrator.d.ts.map +1 -0
  126. package/dist/src/team/phase-orchestrator.js +165 -0
  127. package/dist/src/team/phase-orchestrator.js.map +1 -0
  128. package/dist/src/team/phase-types.d.ts +51 -0
  129. package/dist/src/team/phase-types.d.ts.map +1 -0
  130. package/dist/src/team/phase-types.js +41 -0
  131. package/dist/src/team/phase-types.js.map +1 -0
  132. package/dist/src/tools/index.d.ts.map +1 -1
  133. package/dist/src/tools/index.js +6 -0
  134. package/dist/src/tools/index.js.map +1 -1
  135. package/dist/src/tools/spec-entry-parser.d.ts +56 -0
  136. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -0
  137. package/dist/src/tools/spec-entry-parser.js +196 -0
  138. package/dist/src/tools/spec-entry-parser.js.map +1 -0
  139. package/dist/src/tools/spec-init.d.ts.map +1 -1
  140. package/dist/src/tools/spec-init.js +66 -92
  141. package/dist/src/tools/spec-init.js.map +1 -1
  142. package/dist/src/tools/spec-keyword-index.d.ts +30 -0
  143. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -0
  144. package/dist/src/tools/spec-keyword-index.js +101 -0
  145. package/dist/src/tools/spec-keyword-index.js.map +1 -0
  146. package/dist/src/tools/spec-loader.d.ts +3 -3
  147. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  148. package/dist/src/tools/spec-loader.js +49 -23
  149. package/dist/src/tools/spec-loader.js.map +1 -1
  150. package/dist/src/tools/team-agents.d.ts +27 -0
  151. package/dist/src/tools/team-agents.d.ts.map +1 -0
  152. package/dist/src/tools/team-agents.js +362 -0
  153. package/dist/src/tools/team-agents.js.map +1 -0
  154. package/dist/src/tools/team-mailbox.d.ts +40 -0
  155. package/dist/src/tools/team-mailbox.d.ts.map +1 -0
  156. package/dist/src/tools/team-mailbox.js +384 -0
  157. package/dist/src/tools/team-mailbox.js.map +1 -0
  158. package/dist/src/tools/team-msg.d.ts +17 -8
  159. package/dist/src/tools/team-msg.d.ts.map +1 -1
  160. package/dist/src/tools/team-msg.js +110 -13
  161. package/dist/src/tools/team-msg.js.map +1 -1
  162. package/dist/src/tools/team-tasks-mcp.d.ts +27 -0
  163. package/dist/src/tools/team-tasks-mcp.d.ts.map +1 -0
  164. package/dist/src/tools/team-tasks-mcp.js +408 -0
  165. package/dist/src/tools/team-tasks-mcp.js.map +1 -0
  166. package/package.json +2 -1
  167. package/workflows/analyze.md +816 -816
  168. package/workflows/brainstorm.md +471 -471
  169. package/workflows/codebase-rebuild.md +332 -332
  170. package/workflows/codebase-refresh.md +240 -240
  171. package/workflows/execute.md +1 -1
  172. package/workflows/harvest.md +420 -420
  173. package/workflows/integration-test.md +343 -343
  174. package/workflows/issue-discover.md +414 -414
  175. package/workflows/map.md +111 -111
  176. package/workflows/milestone-complete.md +176 -176
  177. package/workflows/plan.md +1 -1
  178. package/workflows/quick.md +497 -497
  179. package/workflows/refactor.md +300 -300
  180. package/workflows/roadmap.md +335 -335
  181. package/workflows/spec-generate.md +640 -640
  182. package/workflows/specs-add.md +46 -81
  183. package/workflows/specs-load.md +15 -17
  184. package/workflows/specs-setup.md +40 -161
@@ -1,198 +1,202 @@
1
- ---
2
- name: quality-test
3
- description: Conversational UAT with session persistence, auto-diagnosis, and gap-plan closure loop. Interactive testing flow with severity inference and parallel debug agents.
4
- argument-hint: "<phase> [--auto-fix] [--session ID]"
5
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion
6
- ---
7
-
8
- ## Auto Mode
9
-
10
- No auto mode -- UAT is inherently interactive. `--auto-fix` only automates gap closure, not test execution.
11
-
12
- # Test (UAT)
13
-
14
- ## Usage
15
-
16
- ```bash
17
- $quality-test "3" # test phase 3
18
- $quality-test "3 --smoke" # smoke tests first, then UAT
19
- $quality-test "3 --auto-fix" # auto-trigger gap-fix loop on failures
20
- $quality-test "--session 04-comments" # resume specific session
21
- ```
22
-
23
- **Flags**:
24
- - `<phase>`: Phase number or scratch task ID
25
- - `--smoke`: Run cold-start smoke tests before UAT
26
- - `--auto-fix`: Auto-trigger gap-fix loop (plan --gaps -> execute -> re-verify) on failures
27
- - `--session ID`: Resume a specific UAT session
28
-
29
- **Output**: `{target_dir}/uat.md` + `.tests/test-plan.json` + `.tests/test-results.json` + `.tests/coverage-report.json`
30
-
31
- ---
32
-
33
- ## Overview
34
-
35
- Conversational UAT: present expected behavior one test at a time, user confirms or describes issues. Severity inferred from natural language (never asked). Session persists in `uat.md` across context resets. Failed tests trigger parallel debug agent diagnosis and optional gap-fix closure.
36
-
37
- **Philosophy**: Show expected, ask if reality matches.
38
-
39
- ---
40
-
41
- ## Implementation
42
-
43
- ### Step 1: Resolve Target
44
-
45
- 1. Parse `$ARGUMENTS` for phase number, scratch task ID, or flags
46
- 2. **Phase mode**: set `PHASE_DIR = .workflow/phases/{NN}-{slug}/`
47
- 3. **Scratch mode**: set `SCRATCH_DIR = .workflow/scratch/{id}/`
48
- 4. Validate target exists and has `verification.json` -- if missing: **E002**
49
-
50
- ### Step 2: Check Active Sessions
51
-
52
- ```bash
53
- find .workflow/phases -name "uat.md" -type f 2>/dev/null | head -5
54
- find .workflow/scratch -name "uat.md" -type f 2>/dev/null | head -5
55
- ```
56
-
57
- - If active sessions exist and no target specified: display session table, ask user to resume or start new
58
- - If `--session ID` specified: resume that session directly (skip to Step 9)
59
- - If session exists for target: offer resume or restart
60
-
61
- ### Step 3: Smoke Tests (if --smoke)
62
-
63
- Run basic sanity checks (app starts, routes respond, build clean, deps installed).
64
- If any smoke fails: **E003** -- abort, suggest Skill({ skill: "quality-debug" })
65
-
66
- ### Step 4: Load Verification Context
67
-
68
- Read from target directory: verification.json, validation.json, index.json, plan.json, `.summaries/TASK-*.md`. Build testable list from user-observable outcomes.
69
-
70
- ### Step 5: Design Test Scenarios
71
-
72
- Create scenarios from testables (id T-001, name, category, expected behavior, requirement_ref). Focus on USER-OBSERVABLE outcomes. Write `{target_dir}/.tests/test-plan.json`.
73
-
74
- ### Step 6: Create UAT File
75
-
76
- Archive previous `uat.md` to `.history/` if exists.
77
- Write `{target_dir}/uat.md` with frontmatter (status, target, started), Current Test section, Tests section (all pending), Summary counters, empty Gaps section.
78
-
79
- ### Step 7: Present Test (Interactive Loop)
80
-
81
- Present one test at a time:
82
- ```
83
- ------------------------------------------------------------
84
- TEST {number}/{total}: {name}
85
- ------------------------------------------------------------
86
-
87
- Expected behavior:
88
- {expected}
89
-
90
- ------------------------------------------------------------
91
- > Type "pass" or describe what's wrong
92
- ------------------------------------------------------------
93
- ```
94
-
95
- Wait for user response (plain text).
96
-
97
- ### Step 8: Process Response
98
-
99
- | Response | Action |
100
- |----------|--------|
101
- | empty, "yes", "y", "ok", "pass", "next" | Mark as pass |
102
- | "skip", "can't test", "n/a" | Mark as skipped |
103
- | Anything else | Log as issue, infer severity |
104
-
105
- **Severity inference** (never ask):
106
- - "crashes", "error", "fails completely" -> blocker
107
- - "doesn't work", "wrong behavior", "broken" -> major
108
- - "works but...", "slow", "minor issue" -> minor
109
- - "color", "spacing", "typo" -> cosmetic
110
- - Default: major
111
-
112
- **On issue**: auto-create issue in `.workflow/issues/issues.jsonl` with back-reference.
113
-
114
- **Batched writes**: write to file on issue, every 5 passes, or completion.
115
-
116
- If more tests: update Current Test, loop to Step 7.
117
- If done: go to Step 10.
118
-
119
- ### Step 9: Resume From File
120
-
121
- Read `uat.md`, find first `result: [pending]` test, announce progress, continue from there (go to Step 7).
122
-
123
- ### Step 10: Complete Session
124
-
125
- 1. Update `uat.md` frontmatter: status -> "complete"
126
- 2. Archive previous result artifacts to `.history/`
127
- 3. Write `.tests/test-results.json` and `.tests/coverage-report.json`
128
- 4. Update `index.json` with UAT results
129
- 5. If no issues: go to Step 13
130
- 6. If issues found: go to Step 11
131
-
132
- ### Step 11: Auto-Diagnose
133
-
134
- Cluster related gaps by component/area. Spawn one debug Agent per cluster:
135
-
136
- ```
137
- Agent({
138
- subagent_type: "general-purpose",
139
- description: "Diagnose UAT gap cluster: {cluster_name}",
140
- prompt: "Investigate UAT failures. Gaps: {gap list}. Find root cause, fix direction, affected files, evidence (file:line).",
141
- run_in_background: false
142
- })
143
- ```
144
-
145
- Update `uat.md` gaps with diagnosis results (root_cause, fix_direction, affected_files).
146
-
147
- ### Step 12: Gap Closure Decision
148
-
149
- **If `--auto-fix`**: execute gap-fix loop directly.
150
-
151
- **Otherwise**: present diagnosis summary and offer options:
152
- 1. Auto-fix (plan --gaps -> execute -> re-verify, max 2 iterations)
153
- 2. Debug deep -- Skill({ skill: "quality-debug" })
154
- 3. Plan fixes -- Skill({ skill: "maestro-plan", args: "--gaps" })
155
- 4. Manual fix
156
-
157
- Update issue lifecycle during gap-fix loop (registered -> planning -> executing -> completed/failed).
158
-
159
- ### Step 13: Report
160
-
161
- ```
162
- === UAT RESULTS ===
163
- Target: {target}
164
- Smoke Tests: {smoke_count} run, {smoke_pass} passed
165
- UAT Tests: {total} total
166
- Passed: {passed}
167
- Issues: {issues} ({blocker_count} blockers, {major_count} major)
168
- Skipped: {skipped}
169
- Diagnosis: {diagnosed_count}/{issues} gaps diagnosed
170
- Auto-fix: {fixed_count} gaps resolved
171
-
172
- Next steps:
173
- {suggested_next_command}
174
- ```
175
-
176
- ---
177
-
178
- ## Error Handling
179
-
180
- | Code | Severity | Condition | Recovery |
181
- |------|----------|-----------|----------|
182
- | E001 | error | Phase or task target required | Prompt user for phase number |
183
- | E002 | error | Phase not verified (no verification.json) | Suggest Skill({ skill: "maestro-verify" }) |
184
- | E003 | error | Smoke test failed (app won't start) | Suggest Skill({ skill: "quality-debug" }) |
185
- | W001 | warning | Test scenarios failed | Auto-diagnose, suggest fix options |
186
- | W002 | warning | Coverage below threshold | Suggest Skill({ skill: "quality-test-gen" }) |
187
-
188
- ---
189
-
190
- ## Core Rules
191
-
192
- - **One test at a time** -- never batch-present tests
193
- - **Never ask severity** -- always infer from natural language
194
- - **Session persistence** -- uat.md survives context resets, resume from any point
195
- - **Batched writes** -- minimize file I/O (on issue, every 5 passes, completion)
196
- - **Gap-fix loop max 2 iterations** -- prevent infinite loops
197
- - **Agent calls use `run_in_background: false`** for synchronous execution
198
- - **Auto-create issues** in `.workflow/issues/issues.jsonl` for every failed test
1
+ ---
2
+ name: quality-test
3
+ description: Conversational UAT with session persistence, auto-diagnosis, and gap-plan closure loop. Interactive testing flow with severity inference and parallel debug agents.
4
+ argument-hint: "<phase> [--auto-fix] [--session ID]"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Conversational UAT: present expected behavior one test at a time, user confirms or describes issues. Severity inferred from natural language (never asked). Session persists in `uat.md` across context resets. Failed tests trigger parallel debug agent diagnosis and optional gap-fix closure.
10
+
11
+ **Philosophy**: Show expected, ask if reality matches.
12
+ </purpose>
13
+
14
+ <context>
15
+ $ARGUMENTS -- phase number or scratch task ID, plus optional flags.
16
+
17
+ **Usage**:
18
+
19
+ ```bash
20
+ $quality-test "3" # test phase 3
21
+ $quality-test "3 --smoke" # smoke tests first, then UAT
22
+ $quality-test "3 --auto-fix" # auto-trigger gap-fix loop on failures
23
+ $quality-test "--session 04-comments" # resume specific session
24
+ ```
25
+
26
+ **Flags**:
27
+ - `<phase>`: Phase number or scratch task ID
28
+ - `--smoke`: Run cold-start smoke tests before UAT
29
+ - `--auto-fix`: Auto-trigger gap-fix loop (plan --gaps -> execute -> re-verify) on failures
30
+ - `--session ID`: Resume a specific UAT session
31
+
32
+ No auto mode -- UAT is inherently interactive. `--auto-fix` only automates gap closure, not test execution.
33
+
34
+ **Output**: `{target_dir}/uat.md` + `.tests/test-plan.json` + `.tests/test-results.json` + `.tests/coverage-report.json`
35
+ </context>
36
+
37
+ <invariants>
38
+ 1. **One test at a time** -- never batch-present tests
39
+ 2. **Never ask severity** -- always infer from natural language
40
+ 3. **Session persistence** -- uat.md survives context resets, resume from any point
41
+ 4. **Batched writes** -- minimize file I/O (on issue, every 5 passes, completion)
42
+ 5. **Gap-fix loop max 2 iterations** -- prevent infinite loops
43
+ 6. **Agent calls use `run_in_background: false`** for synchronous execution
44
+ 7. **Auto-create issues** in `.workflow/issues/issues.jsonl` for every failed test
45
+ </invariants>
46
+
47
+ <execution>
48
+
49
+ ### Step 1: Resolve Target
50
+
51
+ 1. Parse `$ARGUMENTS` for phase number, scratch task ID, or flags
52
+ 2. **Phase mode**: set `PHASE_DIR = .workflow/phases/{NN}-{slug}/`
53
+ 3. **Scratch mode**: set `SCRATCH_DIR = .workflow/scratch/{id}/`
54
+ 4. Validate target exists and has `verification.json` -- if missing: **E002**
55
+
56
+ ### Step 2: Check Active Sessions
57
+
58
+ ```bash
59
+ find .workflow/phases -name "uat.md" -type f 2>/dev/null | head -5
60
+ find .workflow/scratch -name "uat.md" -type f 2>/dev/null | head -5
61
+ ```
62
+
63
+ - If active sessions exist and no target specified: display session table, ask user to resume or start new
64
+ - If `--session ID` specified: resume that session directly (skip to Step 9)
65
+ - If session exists for target: offer resume or restart
66
+
67
+ ### Step 3: Smoke Tests (if --smoke)
68
+
69
+ Run basic sanity checks (app starts, routes respond, build clean, deps installed).
70
+ If any smoke fails: **E003** -- abort, suggest Skill({ skill: "quality-debug" })
71
+
72
+ ### Step 4: Load Verification Context
73
+
74
+ Read from target directory: verification.json, validation.json, index.json, plan.json, `.summaries/TASK-*.md`. Build testable list from user-observable outcomes.
75
+
76
+ ### Step 5: Design Test Scenarios
77
+
78
+ Create scenarios from testables (id T-001, name, category, expected behavior, requirement_ref). Focus on USER-OBSERVABLE outcomes. Write `{target_dir}/.tests/test-plan.json`.
79
+
80
+ ### Step 6: Create UAT File
81
+
82
+ Archive previous `uat.md` to `.history/` if exists.
83
+ Write `{target_dir}/uat.md` with frontmatter (status, target, started), Current Test section, Tests section (all pending), Summary counters, empty Gaps section.
84
+
85
+ ### Step 7: Present Test (Interactive Loop)
86
+
87
+ Present one test at a time:
88
+ ```
89
+ ------------------------------------------------------------
90
+ TEST {number}/{total}: {name}
91
+ ------------------------------------------------------------
92
+
93
+ Expected behavior:
94
+ {expected}
95
+
96
+ ------------------------------------------------------------
97
+ > Type "pass" or describe what's wrong
98
+ ------------------------------------------------------------
99
+ ```
100
+
101
+ Wait for user response (plain text).
102
+
103
+ ### Step 8: Process Response
104
+
105
+ | Response | Action |
106
+ |----------|--------|
107
+ | empty, "yes", "y", "ok", "pass", "next" | Mark as pass |
108
+ | "skip", "can't test", "n/a" | Mark as skipped |
109
+ | Anything else | Log as issue, infer severity |
110
+
111
+ **Severity inference** (never ask):
112
+ - "crashes", "error", "fails completely" -> blocker
113
+ - "doesn't work", "wrong behavior", "broken" -> major
114
+ - "works but...", "slow", "minor issue" -> minor
115
+ - "color", "spacing", "typo" -> cosmetic
116
+ - Default: major
117
+
118
+ **On issue**: auto-create issue in `.workflow/issues/issues.jsonl` with back-reference.
119
+
120
+ **Batched writes**: write to file on issue, every 5 passes, or completion.
121
+
122
+ If more tests: update Current Test, loop to Step 7.
123
+ If done: go to Step 10.
124
+
125
+ ### Step 9: Resume From File
126
+
127
+ Read `uat.md`, find first `result: [pending]` test, announce progress, continue from there (go to Step 7).
128
+
129
+ ### Step 10: Complete Session
130
+
131
+ 1. Update `uat.md` frontmatter: status -> "complete"
132
+ 2. Archive previous result artifacts to `.history/`
133
+ 3. Write `.tests/test-results.json` and `.tests/coverage-report.json`
134
+ 4. Update `index.json` with UAT results
135
+ 5. If no issues: go to Step 13
136
+ 6. If issues found: go to Step 11
137
+
138
+ ### Step 11: Auto-Diagnose
139
+
140
+ Cluster related gaps by component/area. Spawn one debug Agent per cluster:
141
+
142
+ ```
143
+ Agent({
144
+ subagent_type: "general-purpose",
145
+ description: "Diagnose UAT gap cluster: {cluster_name}",
146
+ prompt: "Investigate UAT failures. Gaps: {gap list}. Find root cause, fix direction, affected files, evidence (file:line).",
147
+ run_in_background: false
148
+ })
149
+ ```
150
+
151
+ Update `uat.md` gaps with diagnosis results (root_cause, fix_direction, affected_files).
152
+
153
+ ### Step 12: Gap Closure Decision
154
+
155
+ **If `--auto-fix`**: execute gap-fix loop directly.
156
+
157
+ **Otherwise**: present diagnosis summary and offer options:
158
+ 1. Auto-fix (plan --gaps -> execute -> re-verify, max 2 iterations)
159
+ 2. Debug deep -- Skill({ skill: "quality-debug" })
160
+ 3. Plan fixes -- Skill({ skill: "maestro-plan", args: "--gaps" })
161
+ 4. Manual fix
162
+
163
+ Update issue lifecycle during gap-fix loop (registered -> planning -> executing -> completed/failed).
164
+
165
+ ### Step 13: Report
166
+
167
+ ```
168
+ === UAT RESULTS ===
169
+ Target: {target}
170
+ Smoke Tests: {smoke_count} run, {smoke_pass} passed
171
+ UAT Tests: {total} total
172
+ Passed: {passed}
173
+ Issues: {issues} ({blocker_count} blockers, {major_count} major)
174
+ Skipped: {skipped}
175
+ Diagnosis: {diagnosed_count}/{issues} gaps diagnosed
176
+ Auto-fix: {fixed_count} gaps resolved
177
+
178
+ Next steps:
179
+ {suggested_next_command}
180
+ ```
181
+ </execution>
182
+
183
+ <error_codes>
184
+ | Code | Severity | Condition | Recovery |
185
+ |------|----------|-----------|----------|
186
+ | E001 | error | Phase or task target required | Prompt user for phase number |
187
+ | E002 | error | Phase not verified (no verification.json) | Suggest Skill({ skill: "maestro-verify" }) |
188
+ | E003 | error | Smoke test failed (app won't start) | Suggest Skill({ skill: "quality-debug" }) |
189
+ | W001 | warning | Test scenarios failed | Auto-diagnose, suggest fix options |
190
+ | W002 | warning | Coverage below threshold | Suggest Skill({ skill: "quality-test-gen" }) |
191
+ </error_codes>
192
+
193
+ <success_criteria>
194
+ - [ ] Target resolved and verification context loaded
195
+ - [ ] Test scenarios designed from user-observable outcomes
196
+ - [ ] UAT file created with session persistence
197
+ - [ ] Tests presented one at a time, severity inferred (never asked)
198
+ - [ ] Issues auto-created for all failures
199
+ - [ ] Diagnosis completed for failed test clusters
200
+ - [ ] Gap closure offered (auto-fix or manual options)
201
+ - [ ] Final report with pass/fail counts and next steps
202
+ </success_criteria>