maestro-flow 0.5.3 → 0.5.31

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 (259) hide show
  1. package/.agents/skills/learn-follow/SKILL.md +114 -114
  2. package/.agents/skills/learn-investigate/SKILL.md +138 -139
  3. package/.agents/skills/learn-second-opinion/SKILL.md +105 -109
  4. package/.agents/skills/maestro/SKILL.md +2 -10
  5. package/.agents/skills/maestro-amend/SKILL.md +152 -152
  6. package/.agents/skills/maestro-analyze/SKILL.md +201 -252
  7. package/.agents/skills/maestro-blueprint/SKILL.md +175 -190
  8. package/.agents/skills/maestro-brainstorm/SKILL.md +196 -200
  9. package/.agents/skills/maestro-collab/SKILL.md +159 -159
  10. package/.agents/skills/maestro-companion/SKILL.md +517 -517
  11. package/.agents/skills/maestro-composer/SKILL.md +173 -164
  12. package/.agents/skills/maestro-execute/SKILL.md +169 -170
  13. package/.agents/skills/maestro-fork/SKILL.md +97 -96
  14. package/.agents/skills/maestro-grill/SKILL.md +161 -162
  15. package/.agents/skills/maestro-guard/SKILL.md +93 -92
  16. package/.agents/skills/maestro-impeccable/SKILL.md +296 -253
  17. package/.agents/skills/maestro-init/SKILL.md +117 -118
  18. package/.agents/skills/maestro-merge/SKILL.md +73 -66
  19. package/.agents/skills/maestro-milestone-audit/SKILL.md +4 -10
  20. package/.agents/skills/maestro-milestone-complete/SKILL.md +6 -7
  21. package/.agents/skills/maestro-milestone-release/SKILL.md +122 -131
  22. package/.agents/skills/maestro-next/SKILL.md +241 -245
  23. package/.agents/skills/maestro-overlay/SKILL.md +176 -166
  24. package/.agents/skills/maestro-plan/SKILL.md +211 -197
  25. package/.agents/skills/maestro-player/SKILL.md +167 -167
  26. package/.agents/skills/maestro-quick/SKILL.md +69 -63
  27. package/.agents/skills/maestro-ralph/SKILL.md +2 -36
  28. package/.agents/skills/maestro-ralph-beta/SKILL.md +861 -872
  29. package/.agents/skills/maestro-ralph-execute/SKILL.md +234 -234
  30. package/.agents/skills/maestro-roadmap/SKILL.md +159 -172
  31. package/.agents/skills/maestro-swarm-workflow/SKILL.md +229 -250
  32. package/.agents/skills/maestro-tools-execute/SKILL.md +108 -103
  33. package/.agents/skills/maestro-tools-register/SKILL.md +148 -143
  34. package/.agents/skills/maestro-ui-codify/SKILL.md +103 -86
  35. package/.agents/skills/maestro-universal-workflow/SKILL.md +534 -547
  36. package/.agents/skills/maestro-update/SKILL.md +109 -106
  37. package/.agents/skills/manage-codebase-rebuild/SKILL.md +73 -71
  38. package/.agents/skills/manage-harvest/SKILL.md +83 -81
  39. package/.agents/skills/manage-issue/SKILL.md +59 -60
  40. package/.agents/skills/manage-issue-discover/SKILL.md +70 -68
  41. package/.agents/skills/manage-kg-extractors/SKILL.md +130 -0
  42. package/.agents/skills/manage-knowhow/SKILL.md +70 -66
  43. package/.agents/skills/manage-knowhow-capture/SKILL.md +79 -69
  44. package/.agents/skills/manage-knowledge-audit/SKILL.md +91 -74
  45. package/.agents/skills/manage-status/SKILL.md +52 -42
  46. package/.agents/skills/manage-wiki/SKILL.md +69 -58
  47. package/.agents/skills/odyssey-debug/SKILL.md +445 -459
  48. package/.agents/skills/odyssey-improve/SKILL.md +477 -491
  49. package/.agents/skills/odyssey-planex/SKILL.md +576 -587
  50. package/.agents/skills/odyssey-review-test-fix/SKILL.md +400 -413
  51. package/.agents/skills/odyssey-ui/SKILL.md +431 -448
  52. package/.agents/skills/quality-auto-test/SKILL.md +140 -123
  53. package/.agents/skills/quality-debug/SKILL.md +145 -106
  54. package/.agents/skills/quality-refactor/SKILL.md +91 -53
  55. package/.agents/skills/quality-retrospective/SKILL.md +109 -63
  56. package/.agents/skills/quality-review/SKILL.md +141 -114
  57. package/.agents/skills/quality-sync/SKILL.md +74 -38
  58. package/.agents/skills/quality-test/SKILL.md +133 -103
  59. package/.agents/skills/security-audit/SKILL.md +217 -166
  60. package/.agents/skills/spec-add/SKILL.md +66 -59
  61. package/.agents/skills/spec-load/SKILL.md +68 -68
  62. package/.agents/skills/spec-remove/SKILL.md +42 -42
  63. package/.agents/skills/spec-setup/SKILL.md +38 -41
  64. package/.agy/skills/learn-follow/SKILL.md +114 -114
  65. package/.agy/skills/learn-investigate/SKILL.md +138 -139
  66. package/.agy/skills/learn-second-opinion/SKILL.md +105 -109
  67. package/.agy/skills/maestro/SKILL.md +2 -10
  68. package/.agy/skills/maestro-amend/SKILL.md +152 -152
  69. package/.agy/skills/maestro-analyze/SKILL.md +201 -252
  70. package/.agy/skills/maestro-blueprint/SKILL.md +175 -190
  71. package/.agy/skills/maestro-brainstorm/SKILL.md +196 -200
  72. package/.agy/skills/maestro-collab/SKILL.md +159 -159
  73. package/.agy/skills/maestro-companion/SKILL.md +517 -517
  74. package/.agy/skills/maestro-composer/SKILL.md +173 -164
  75. package/.agy/skills/maestro-execute/SKILL.md +169 -170
  76. package/.agy/skills/maestro-fork/SKILL.md +97 -96
  77. package/.agy/skills/maestro-grill/SKILL.md +161 -162
  78. package/.agy/skills/maestro-guard/SKILL.md +93 -92
  79. package/.agy/skills/maestro-impeccable/SKILL.md +296 -253
  80. package/.agy/skills/maestro-init/SKILL.md +117 -118
  81. package/.agy/skills/maestro-merge/SKILL.md +73 -66
  82. package/.agy/skills/maestro-milestone-audit/SKILL.md +4 -10
  83. package/.agy/skills/maestro-milestone-complete/SKILL.md +6 -7
  84. package/.agy/skills/maestro-milestone-release/SKILL.md +122 -131
  85. package/.agy/skills/maestro-next/SKILL.md +241 -245
  86. package/.agy/skills/maestro-overlay/SKILL.md +176 -166
  87. package/.agy/skills/maestro-plan/SKILL.md +211 -197
  88. package/.agy/skills/maestro-player/SKILL.md +167 -167
  89. package/.agy/skills/maestro-quick/SKILL.md +69 -63
  90. package/.agy/skills/maestro-ralph/SKILL.md +2 -36
  91. package/.agy/skills/maestro-ralph-beta/SKILL.md +861 -872
  92. package/.agy/skills/maestro-ralph-execute/SKILL.md +234 -234
  93. package/.agy/skills/maestro-roadmap/SKILL.md +159 -172
  94. package/.agy/skills/maestro-swarm-workflow/SKILL.md +229 -250
  95. package/.agy/skills/maestro-tools-execute/SKILL.md +108 -103
  96. package/.agy/skills/maestro-tools-register/SKILL.md +148 -143
  97. package/.agy/skills/maestro-ui-codify/SKILL.md +103 -86
  98. package/.agy/skills/maestro-universal-workflow/SKILL.md +534 -547
  99. package/.agy/skills/maestro-update/SKILL.md +109 -106
  100. package/.agy/skills/manage-codebase-rebuild/SKILL.md +73 -71
  101. package/.agy/skills/manage-harvest/SKILL.md +83 -81
  102. package/.agy/skills/manage-issue/SKILL.md +59 -60
  103. package/.agy/skills/manage-issue-discover/SKILL.md +70 -68
  104. package/.agy/skills/manage-kg-extractors/SKILL.md +130 -0
  105. package/.agy/skills/manage-knowhow/SKILL.md +70 -66
  106. package/.agy/skills/manage-knowhow-capture/SKILL.md +79 -69
  107. package/.agy/skills/manage-knowledge-audit/SKILL.md +91 -74
  108. package/.agy/skills/manage-status/SKILL.md +52 -42
  109. package/.agy/skills/manage-wiki/SKILL.md +69 -58
  110. package/.agy/skills/odyssey-debug/SKILL.md +445 -459
  111. package/.agy/skills/odyssey-improve/SKILL.md +477 -491
  112. package/.agy/skills/odyssey-planex/SKILL.md +576 -587
  113. package/.agy/skills/odyssey-review-test-fix/SKILL.md +400 -413
  114. package/.agy/skills/odyssey-ui/SKILL.md +431 -448
  115. package/.agy/skills/quality-auto-test/SKILL.md +140 -123
  116. package/.agy/skills/quality-debug/SKILL.md +145 -106
  117. package/.agy/skills/quality-refactor/SKILL.md +91 -53
  118. package/.agy/skills/quality-retrospective/SKILL.md +109 -63
  119. package/.agy/skills/quality-review/SKILL.md +141 -114
  120. package/.agy/skills/quality-sync/SKILL.md +74 -38
  121. package/.agy/skills/quality-test/SKILL.md +133 -103
  122. package/.agy/skills/security-audit/SKILL.md +217 -166
  123. package/.agy/skills/spec-add/SKILL.md +66 -59
  124. package/.agy/skills/spec-load/SKILL.md +68 -68
  125. package/.agy/skills/spec-remove/SKILL.md +42 -42
  126. package/.agy/skills/spec-setup/SKILL.md +38 -41
  127. package/.claude/commands/learn-follow.md +127 -127
  128. package/.claude/commands/learn-investigate.md +151 -152
  129. package/.claude/commands/learn-second-opinion.md +118 -122
  130. package/.claude/commands/maestro-amend.md +164 -164
  131. package/.claude/commands/maestro-analyze.md +215 -266
  132. package/.claude/commands/maestro-blueprint.md +189 -204
  133. package/.claude/commands/maestro-brainstorm.md +209 -213
  134. package/.claude/commands/maestro-collab.md +172 -172
  135. package/.claude/commands/maestro-companion.md +531 -531
  136. package/.claude/commands/maestro-composer.md +188 -179
  137. package/.claude/commands/maestro-execute.md +183 -184
  138. package/.claude/commands/maestro-fork.md +111 -110
  139. package/.claude/commands/maestro-grill.md +175 -176
  140. package/.claude/commands/maestro-guard.md +103 -102
  141. package/.claude/commands/maestro-impeccable.md +311 -268
  142. package/.claude/commands/maestro-init.md +130 -131
  143. package/.claude/commands/maestro-merge.md +87 -80
  144. package/.claude/commands/maestro-milestone-audit.md +4 -10
  145. package/.claude/commands/maestro-milestone-complete.md +6 -7
  146. package/.claude/commands/maestro-milestone-release.md +136 -145
  147. package/.claude/commands/maestro-next.md +253 -257
  148. package/.claude/commands/maestro-overlay.md +188 -178
  149. package/.claude/commands/maestro-plan.md +225 -211
  150. package/.claude/commands/maestro-player.md +182 -182
  151. package/.claude/commands/maestro-quick.md +83 -77
  152. package/.claude/commands/maestro-ralph-beta.md +875 -886
  153. package/.claude/commands/maestro-ralph-execute.md +247 -247
  154. package/.claude/commands/maestro-ralph.md +2 -36
  155. package/.claude/commands/maestro-roadmap.md +173 -186
  156. package/.claude/commands/maestro-swarm-workflow.md +243 -264
  157. package/.claude/commands/maestro-tools-execute.md +122 -117
  158. package/.claude/commands/maestro-tools-register.md +162 -157
  159. package/.claude/commands/maestro-ui-codify.md +117 -100
  160. package/.claude/commands/maestro-universal-workflow.md +548 -561
  161. package/.claude/commands/maestro-update.md +122 -119
  162. package/.claude/commands/maestro.md +2 -10
  163. package/.claude/commands/manage-codebase-rebuild.md +87 -85
  164. package/.claude/commands/manage-harvest.md +97 -95
  165. package/.claude/commands/manage-issue-discover.md +83 -81
  166. package/.claude/commands/manage-issue.md +72 -73
  167. package/.claude/commands/manage-kg-extractors.md +128 -0
  168. package/.claude/commands/manage-knowhow-capture.md +92 -82
  169. package/.claude/commands/manage-knowhow.md +83 -79
  170. package/.claude/commands/manage-knowledge-audit.md +105 -88
  171. package/.claude/commands/manage-status.md +62 -52
  172. package/.claude/commands/manage-wiki.md +82 -71
  173. package/.claude/commands/odyssey-debug.md +459 -473
  174. package/.claude/commands/odyssey-improve.md +491 -505
  175. package/.claude/commands/odyssey-planex.md +590 -601
  176. package/.claude/commands/odyssey-review-test-fix.md +414 -427
  177. package/.claude/commands/odyssey-ui.md +445 -462
  178. package/.claude/commands/quality-auto-test.md +153 -136
  179. package/.claude/commands/quality-debug.md +159 -120
  180. package/.claude/commands/quality-refactor.md +105 -67
  181. package/.claude/commands/quality-retrospective.md +123 -77
  182. package/.claude/commands/quality-review.md +155 -128
  183. package/.claude/commands/quality-sync.md +88 -52
  184. package/.claude/commands/quality-test.md +147 -117
  185. package/.claude/commands/security-audit.md +230 -179
  186. package/.claude/commands/spec-add.md +77 -70
  187. package/.claude/commands/spec-load.md +78 -78
  188. package/.claude/commands/spec-remove.md +55 -55
  189. package/.claude/commands/spec-setup.md +49 -52
  190. package/dist/src/cli.js +1 -1
  191. package/dist/src/cli.js.map +1 -1
  192. package/dist/src/commands/kg.d.ts.map +1 -1
  193. package/dist/src/commands/kg.js +11 -5
  194. package/dist/src/commands/kg.js.map +1 -1
  195. package/dist/src/graph/kg/extraction/code/code-extractor.d.ts +2 -0
  196. package/dist/src/graph/kg/extraction/code/code-extractor.d.ts.map +1 -1
  197. package/dist/src/graph/kg/extraction/code/code-extractor.js +32 -3
  198. package/dist/src/graph/kg/extraction/code/code-extractor.js.map +1 -1
  199. package/dist/src/graph/kg/extraction/code/plugin-engine.d.ts +35 -0
  200. package/dist/src/graph/kg/extraction/code/plugin-engine.d.ts.map +1 -0
  201. package/dist/src/graph/kg/extraction/code/plugin-engine.js +573 -0
  202. package/dist/src/graph/kg/extraction/code/plugin-engine.js.map +1 -0
  203. package/dist/src/graph/kg/extraction/code/plugin-types.d.ts +95 -0
  204. package/dist/src/graph/kg/extraction/code/plugin-types.d.ts.map +1 -0
  205. package/dist/src/graph/kg/extraction/code/plugin-types.js +5 -0
  206. package/dist/src/graph/kg/extraction/code/plugin-types.js.map +1 -0
  207. package/dist/src/graph/kg/extraction/orchestrator.d.ts.map +1 -1
  208. package/dist/src/graph/kg/extraction/orchestrator.js +17 -5
  209. package/dist/src/graph/kg/extraction/orchestrator.js.map +1 -1
  210. package/dist/src/graph/kg/schema.sql +16 -11
  211. package/dist/src/graph/kg/surface/cli.d.ts.map +1 -1
  212. package/dist/src/graph/kg/surface/cli.js +153 -56
  213. package/dist/src/graph/kg/surface/cli.js.map +1 -1
  214. package/dist/src/hooks/workspace.d.ts +4 -2
  215. package/dist/src/hooks/workspace.d.ts.map +1 -1
  216. package/dist/src/hooks/workspace.js +6 -2
  217. package/dist/src/hooks/workspace.js.map +1 -1
  218. package/package.json +91 -91
  219. package/workflows/analyze.md +25 -49
  220. package/workflows/auto-test.md +699 -699
  221. package/workflows/blueprint.md +403 -431
  222. package/workflows/brainstorm.md +54 -195
  223. package/workflows/business-test.md +570 -570
  224. package/workflows/claude-instructions.md +23 -51
  225. package/workflows/codex-instructions.md +27 -77
  226. package/workflows/coding-philosophy.md +69 -69
  227. package/workflows/command-authoring.md +823 -823
  228. package/workflows/debug.md +43 -98
  229. package/workflows/delegate-usage.md +39 -241
  230. package/workflows/execute.md +4 -53
  231. package/workflows/grill.md +12 -56
  232. package/workflows/harvest.md +22 -68
  233. package/workflows/init.md +148 -148
  234. package/workflows/instruction-authoring-guide.md +97 -0
  235. package/workflows/issue-execute.md +110 -110
  236. package/workflows/issue-gaps-analyze.codex.md +260 -260
  237. package/workflows/issue-gaps-analyze.md +216 -216
  238. package/workflows/issue-plan.md +110 -110
  239. package/workflows/issue.md +338 -346
  240. package/workflows/knowhow.md +0 -32
  241. package/workflows/learn.md +277 -277
  242. package/workflows/maestro-chain-execute.md +20 -20
  243. package/workflows/refactor.md +22 -44
  244. package/workflows/retrospective.md +16 -65
  245. package/workflows/review.md +446 -486
  246. package/workflows/roadmap.md +35 -132
  247. package/workflows/skill-authoring.md +265 -265
  248. package/workflows/spec-generate.md +470 -470
  249. package/workflows/specs-remove.md +104 -104
  250. package/workflows/sync.md +11 -41
  251. package/workflows/test-gen.md +226 -226
  252. package/workflows/test.md +385 -475
  253. package/workflows/ui-design.md +391 -391
  254. package/workflows/ui-style.md +199 -199
  255. package/workflows/wiki-connect.md +151 -151
  256. package/workflows/wiki-digest.md +178 -178
  257. package/workflows/wiki-manage.md +109 -109
  258. package/workflows/cli-tools-usage.md +0 -252
  259. package/workflows/delegate-protocol.codex.md +0 -65
@@ -1,226 +1,226 @@
1
- # Test Generation Workflow
2
-
3
- Generate missing automated tests for a phase based on gap analysis from maestro-execute verification gate (Nyquist audit) and quality-test (UAT coverage gaps). Classifies changed files into unit/E2E/skip, discovers test infrastructure, generates a test plan for user approval, then writes tests using RED-GREEN methodology.
4
-
5
- Tests expose bugs -- fixing is for quality-debug or maestro-execute.
6
-
7
- ---
8
-
9
- ### Step 0: Load Project Specs
10
-
11
- ```
12
- specs_content = maestro spec load --category test
13
- ```
14
-
15
- Follow project test conventions in Step 4 (Generate Test Plan) and Step 5 (Write Tests).
16
-
17
- ---
18
-
19
- ### Step 1: Discover Test Infrastructure
20
-
21
- Detect existing test framework and patterns by scanning for:
22
- - **Config files**: `jest.config.*`, `vitest.config.*`, `pytest.ini`, `pyproject.toml`, `.mocharc.*`
23
- - **Existing tests**: `*.test.*`, `*.spec.*`, `test_*` (exclude node_modules, .git)
24
- - **Utilities**: `test-utils.*`, `testHelper*`, `conftest.py`, `setup.*`
25
-
26
- Extract: framework, directory structure, naming convention, test utilities, run command.
27
-
28
- Read 2-3 existing test files to learn: import style, describe/it nesting, assertion library, mock patterns, setup/teardown.
29
-
30
- If no test framework detected: Error E003.
31
-
32
- ---
33
-
34
- ### Step 2: Identify Gaps
35
-
36
- Sources: validation.json (`gaps[]` MISSING/PARTIAL), coverage-report.json (`requirements_uncovered[]`), task summaries (modified files).
37
-
38
- Priority: MISSING or uncovered requirement → HIGH; PARTIAL → MEDIUM.
39
-
40
- ---
41
-
42
- ### Step 3: Classify Files
43
-
44
- Classify each changed file into test categories:
45
-
46
- | File Type | Category | Rationale |
47
- |-----------|----------|-----------|
48
- | Pure function / utility | unit | Isolated, no side effects |
49
- | React component | unit + e2e | Unit for logic, E2E for rendering |
50
- | API route / handler | integration | Needs request context |
51
- | Database model / query | integration | Needs DB connection |
52
- | CLI command | e2e | Needs process execution |
53
- | Config / types / constants / CSS / test files | skip | No testable behavior |
54
-
55
- Output: `{ "unit": [...], "integration": [...], "e2e": [...], "skip": [...] }`
56
-
57
- Apply --layer filter if set.
58
-
59
- ---
60
-
61
- ### Step 3.5: CLI Supplementary Test Analysis (optional)
62
-
63
- **Purpose:** Use external CLI tool to analyze source code and suggest edge cases and boundary conditions that manual classification may miss.
64
-
65
- **Skip if** no enabled CLI tools or classified files are all "skip".
66
-
67
- ```
68
- IF no CLI tools enabled OR all files classified as "skip": skip to Step 4
69
-
70
- # Build file list for analysis
71
- target_files = unit + integration + e2e files, map to paths
72
-
73
- Bash({
74
- command: 'maestro delegate "PURPOSE: Analyze source files to identify test-worthy edge cases and boundary conditions
75
- TASK: For each file, identify: error handling paths | boundary conditions | state transitions | external dependency interactions
76
- MODE: analysis
77
- CONTEXT: @${target_files as glob}
78
- EXPECTED: JSON array of { file, edge_cases: [{ description, type: boundary|error|state|integration, priority: high|medium }] }
79
- CONSTRAINTS: Only report non-obvious cases | Max 5 edge cases per file | Focus on untested paths
80
- " --role analyze --mode analysis',
81
- run_in_background: true
82
- })
83
- ```
84
-
85
- **On callback:** Parse result, merge edge_cases into Step 4 test_cases for matching files. Mark CLI-suggested cases with `source: "cli-analysis"`.
86
-
87
- ---
88
-
89
- ### Step 4: Generate Test Plan
90
-
91
- For each gap + classified file, create a test entry:
92
-
93
- ```json
94
- {
95
- "tests": [
96
- {
97
- "id": "TG-001",
98
- "target_file": "src/utils/validate.ts",
99
- "test_file": "src/utils/__tests__/validate.test.ts",
100
- "layer": "unit",
101
- "requirement_ref": "SC-002",
102
- "description": "Validate email format accepts valid emails, rejects invalid",
103
- "test_cases": [
104
- "accepts standard email format",
105
- "rejects missing @ symbol",
106
- "rejects empty string",
107
- "handles unicode characters"
108
- ],
109
- "priority": "high"
110
- }
111
- ]
112
- }
113
- ```
114
-
115
- Present plan to user:
116
-
117
- ```
118
- === TEST GENERATION PLAN ===
119
- Phase: {phase_name}
120
-
121
- | # | Target | Layer | Test Cases | Priority |
122
- |---|--------|-------|------------|----------|
123
- | TG-001 | validate.ts | unit | 4 cases | HIGH |
124
- | TG-002 | ChatWindow.tsx | e2e | 3 cases | HIGH |
125
- | TG-003 | comments.ts | integration | 5 cases | MEDIUM |
126
-
127
- Total: {N} test files, {M} test cases
128
-
129
- Proceed? (yes/modify/cancel)
130
- ```
131
-
132
- Wait for user approval via AskUserQuestion.
133
- - "yes" / "y" -> proceed to Step 5
134
- - "modify" -> ask what to change, update plan
135
- - "cancel" -> abort
136
-
137
- ---
138
-
139
- ### Step 5: Generate Tests (RED-GREEN)
140
-
141
- For each approved test entry:
142
-
143
- 1. **RED** -- Write test following existing patterns; tests must fail if behavior is broken (not trivially pass)
144
- 2. **Verify RED** -- Run `{test_run_command} {test_file}`:
145
- - Passes → may be trivial, strengthen it
146
- - Fails expected → good, targets real behavior
147
- - Fails unexpected → fix test setup, not source code
148
- 3. **GREEN assessment** -- Passes = gap was missing test; Fails = bug discovery (do NOT fix source)
149
-
150
- **Important**: This command generates tests only. Failing tests document missing behavior -- fixing is for quality-debug.
151
-
152
- Write each test file to the discovered test directory structure.
153
-
154
- ---
155
-
156
- ### Step 6: Run Full Test Suite
157
-
158
- Verify no regressions.
159
-
160
- ```bash
161
- {test_run_command} 2>&1 | tail -50
162
- ```
163
-
164
- Categorize results:
165
- - New tests passing: coverage gap filled
166
- - New tests failing: bug discovered (document, don't fix)
167
- - Existing tests broken: regression introduced (investigate)
168
-
169
- If regressions found, flag as blocker. (W002)
170
-
171
- ---
172
-
173
- ### Step 7: Write Artifacts
174
-
175
- Archive existing `.tests/test-gen-report.json` → `.history/test-gen-report-{timestamp}.json` if present.
176
-
177
- Write `.tests/test-gen-report.json`:
178
- ```json
179
- {
180
- "phase": "{phase}",
181
- "generated_at": "{ISO timestamp}",
182
- "infrastructure": {
183
- "framework": "vitest",
184
- "test_dir": "__tests__/",
185
- "run_command": "npm test"
186
- },
187
- "classification": { "unit": [...], "integration": [...], "e2e": [...], "skip": [...] },
188
- "generated": [
189
- {
190
- "id": "TG-001",
191
- "test_file": "src/utils/__tests__/validate.test.ts",
192
- "layer": "unit",
193
- "test_cases": 4,
194
- "status": "passing|failing|mixed",
195
- "bugs_discovered": []
196
- }
197
- ],
198
- "summary": {
199
- "files_generated": N,
200
- "test_cases_total": M,
201
- "passing": P,
202
- "failing": F,
203
- "bugs_discovered": B
204
- }
205
- }
206
- ```
207
-
208
- Update validation.json gaps: change MISSING -> COVERED for gaps that now have tests.
209
-
210
- ---
211
-
212
- ### Step 8: Report
213
-
214
- ```
215
- Display: phase, framework, files/cases generated, passing/failing counts,
216
- bugs found (with descriptions), coverage delta, report path, next step suggestion
217
- ```
218
-
219
- **Next step routing:**
220
-
221
- | Result | Suggestion |
222
- |--------|------------|
223
- | All tests passing | Skill({ skill: "quality-review", args: "{phase}" }) to update Nyquist coverage |
224
- | Bugs discovered (failing tests) | Skill({ skill: "quality-debug", args: "--from-uat {phase}" }) to investigate |
225
- | Regressions found | Skill({ skill: "quality-debug" }) immediately |
226
- | Coverage still low | Run again with `--layer` for uncovered layers |
1
+ # Test Generation Workflow
2
+
3
+ Generate missing automated tests for a phase based on gap analysis from maestro-execute verification gate (Nyquist audit) and quality-test (UAT coverage gaps). Classifies changed files into unit/E2E/skip, discovers test infrastructure, generates a test plan for user approval, then writes tests using RED-GREEN methodology.
4
+
5
+ Tests expose bugs -- fixing is for quality-debug or maestro-execute.
6
+
7
+ ---
8
+
9
+ ### Step 0: Load Project Specs
10
+
11
+ ```
12
+ specs_content = maestro spec load --category test
13
+ ```
14
+
15
+ Follow project test conventions in Step 4 (Generate Test Plan) and Step 5 (Write Tests).
16
+
17
+ ---
18
+
19
+ ### Step 1: Discover Test Infrastructure
20
+
21
+ Detect existing test framework and patterns by scanning for:
22
+ - **Config files**: `jest.config.*`, `vitest.config.*`, `pytest.ini`, `pyproject.toml`, `.mocharc.*`
23
+ - **Existing tests**: `*.test.*`, `*.spec.*`, `test_*` (exclude node_modules, .git)
24
+ - **Utilities**: `test-utils.*`, `testHelper*`, `conftest.py`, `setup.*`
25
+
26
+ Extract: framework, directory structure, naming convention, test utilities, run command.
27
+
28
+ Read 2-3 existing test files to learn: import style, describe/it nesting, assertion library, mock patterns, setup/teardown.
29
+
30
+ If no test framework detected: Error E003.
31
+
32
+ ---
33
+
34
+ ### Step 2: Identify Gaps
35
+
36
+ Sources: validation.json (`gaps[]` MISSING/PARTIAL), coverage-report.json (`requirements_uncovered[]`), task summaries (modified files).
37
+
38
+ Priority: MISSING or uncovered requirement → HIGH; PARTIAL → MEDIUM.
39
+
40
+ ---
41
+
42
+ ### Step 3: Classify Files
43
+
44
+ Classify each changed file into test categories:
45
+
46
+ | File Type | Category | Rationale |
47
+ |-----------|----------|-----------|
48
+ | Pure function / utility | unit | Isolated, no side effects |
49
+ | React component | unit + e2e | Unit for logic, E2E for rendering |
50
+ | API route / handler | integration | Needs request context |
51
+ | Database model / query | integration | Needs DB connection |
52
+ | CLI command | e2e | Needs process execution |
53
+ | Config / types / constants / CSS / test files | skip | No testable behavior |
54
+
55
+ Output: `{ "unit": [...], "integration": [...], "e2e": [...], "skip": [...] }`
56
+
57
+ Apply --layer filter if set.
58
+
59
+ ---
60
+
61
+ ### Step 3.5: CLI Supplementary Test Analysis (optional)
62
+
63
+ **Purpose:** Use external CLI tool to analyze source code and suggest edge cases and boundary conditions that manual classification may miss.
64
+
65
+ **Skip if** no enabled CLI tools or classified files are all "skip".
66
+
67
+ ```
68
+ IF no CLI tools enabled OR all files classified as "skip": skip to Step 4
69
+
70
+ # Build file list for analysis
71
+ target_files = unit + integration + e2e files, map to paths
72
+
73
+ Bash({
74
+ command: 'maestro delegate "PURPOSE: Analyze source files to identify test-worthy edge cases and boundary conditions
75
+ TASK: For each file, identify: error handling paths | boundary conditions | state transitions | external dependency interactions
76
+ MODE: analysis
77
+ CONTEXT: @${target_files as glob}
78
+ EXPECTED: JSON array of { file, edge_cases: [{ description, type: boundary|error|state|integration, priority: high|medium }] }
79
+ CONSTRAINTS: Only report non-obvious cases | Max 5 edge cases per file | Focus on untested paths
80
+ " --role analyze --mode analysis',
81
+ run_in_background: true
82
+ })
83
+ ```
84
+
85
+ **On callback:** Parse result, merge edge_cases into Step 4 test_cases for matching files. Mark CLI-suggested cases with `source: "cli-analysis"`.
86
+
87
+ ---
88
+
89
+ ### Step 4: Generate Test Plan
90
+
91
+ For each gap + classified file, create a test entry:
92
+
93
+ ```json
94
+ {
95
+ "tests": [
96
+ {
97
+ "id": "TG-001",
98
+ "target_file": "src/utils/validate.ts",
99
+ "test_file": "src/utils/__tests__/validate.test.ts",
100
+ "layer": "unit",
101
+ "requirement_ref": "SC-002",
102
+ "description": "Validate email format accepts valid emails, rejects invalid",
103
+ "test_cases": [
104
+ "accepts standard email format",
105
+ "rejects missing @ symbol",
106
+ "rejects empty string",
107
+ "handles unicode characters"
108
+ ],
109
+ "priority": "high"
110
+ }
111
+ ]
112
+ }
113
+ ```
114
+
115
+ Present plan to user:
116
+
117
+ ```
118
+ === TEST GENERATION PLAN ===
119
+ Phase: {phase_name}
120
+
121
+ | # | Target | Layer | Test Cases | Priority |
122
+ |---|--------|-------|------------|----------|
123
+ | TG-001 | validate.ts | unit | 4 cases | HIGH |
124
+ | TG-002 | ChatWindow.tsx | e2e | 3 cases | HIGH |
125
+ | TG-003 | comments.ts | integration | 5 cases | MEDIUM |
126
+
127
+ Total: {N} test files, {M} test cases
128
+
129
+ Proceed? (yes/modify/cancel)
130
+ ```
131
+
132
+ Wait for user approval via AskUserQuestion.
133
+ - "yes" / "y" -> proceed to Step 5
134
+ - "modify" -> ask what to change, update plan
135
+ - "cancel" -> abort
136
+
137
+ ---
138
+
139
+ ### Step 5: Generate Tests (RED-GREEN)
140
+
141
+ For each approved test entry:
142
+
143
+ 1. **RED** -- Write test following existing patterns; tests must fail if behavior is broken (not trivially pass)
144
+ 2. **Verify RED** -- Run `{test_run_command} {test_file}`:
145
+ - Passes → may be trivial, strengthen it
146
+ - Fails expected → good, targets real behavior
147
+ - Fails unexpected → fix test setup, not source code
148
+ 3. **GREEN assessment** -- Passes = gap was missing test; Fails = bug discovery (do NOT fix source)
149
+
150
+ **Important**: This command generates tests only. Failing tests document missing behavior -- fixing is for quality-debug.
151
+
152
+ Write each test file to the discovered test directory structure.
153
+
154
+ ---
155
+
156
+ ### Step 6: Run Full Test Suite
157
+
158
+ Verify no regressions.
159
+
160
+ ```bash
161
+ {test_run_command} 2>&1 | tail -50
162
+ ```
163
+
164
+ Categorize results:
165
+ - New tests passing: coverage gap filled
166
+ - New tests failing: bug discovered (document, don't fix)
167
+ - Existing tests broken: regression introduced (investigate)
168
+
169
+ If regressions found, flag as blocker. (W002)
170
+
171
+ ---
172
+
173
+ ### Step 7: Write Artifacts
174
+
175
+ Archive existing `.tests/test-gen-report.json` → `.history/test-gen-report-{timestamp}.json` if present.
176
+
177
+ Write `.tests/test-gen-report.json`:
178
+ ```json
179
+ {
180
+ "phase": "{phase}",
181
+ "generated_at": "{ISO timestamp}",
182
+ "infrastructure": {
183
+ "framework": "vitest",
184
+ "test_dir": "__tests__/",
185
+ "run_command": "npm test"
186
+ },
187
+ "classification": { "unit": [...], "integration": [...], "e2e": [...], "skip": [...] },
188
+ "generated": [
189
+ {
190
+ "id": "TG-001",
191
+ "test_file": "src/utils/__tests__/validate.test.ts",
192
+ "layer": "unit",
193
+ "test_cases": 4,
194
+ "status": "passing|failing|mixed",
195
+ "bugs_discovered": []
196
+ }
197
+ ],
198
+ "summary": {
199
+ "files_generated": N,
200
+ "test_cases_total": M,
201
+ "passing": P,
202
+ "failing": F,
203
+ "bugs_discovered": B
204
+ }
205
+ }
206
+ ```
207
+
208
+ Update validation.json gaps: change MISSING -> COVERED for gaps that now have tests.
209
+
210
+ ---
211
+
212
+ ### Step 8: Report
213
+
214
+ ```
215
+ Display: phase, framework, files/cases generated, passing/failing counts,
216
+ bugs found (with descriptions), coverage delta, report path, next step suggestion
217
+ ```
218
+
219
+ **Next step routing:**
220
+
221
+ | Result | Suggestion |
222
+ |--------|------------|
223
+ | All tests passing | Skill({ skill: "quality-review", args: "{phase}" }) to update Nyquist coverage |
224
+ | Bugs discovered (failing tests) | Skill({ skill: "quality-debug", args: "--from-uat {phase}" }) to investigate |
225
+ | Regressions found | Skill({ skill: "quality-debug" }) immediately |
226
+ | Coverage still low | Run again with `--layer` for uncovered layers |