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,414 +1,414 @@
1
- # Workflow: Issue Discovery
2
-
3
- Automated issue discovery via multi-perspective analysis or prompt-driven exploration.
4
-
5
- ## Input
6
-
7
- - `$ARGUMENTS`: empty (multi-perspective) or `by-prompt [prompt text]`
8
- - Operates on `.workflow/issues/`
9
-
10
- ---
11
-
12
- ### Step 1: Parse Mode
13
-
14
- ```
15
- 1. Extract mode from $ARGUMENTS:
16
- - empty or no arguments → MULTI_PERSPECTIVE mode (Step 3)
17
- - "by-prompt" → PROMPT_DRIVEN mode (Step 7)
18
-
19
- 2. Remaining tokens after mode keyword = DISCOVERY_ARGS
20
- For by-prompt: join remaining tokens as USER_PROMPT
21
- ```
22
-
23
- ---
24
-
25
- ### Step 2: Validate Environment
26
-
27
- ```
28
- 1. Check .workflow/ exists
29
- If not → fatal: "No project initialized. Run /maestro-init first."
30
-
31
- 2. Check .workflow/issues/ exists
32
- If not → mkdir -p .workflow/issues/
33
-
34
- 3. Ensure issues.jsonl exists
35
- If not → touch .workflow/issues/issues.jsonl
36
-
37
- 4. Generate discovery session ID:
38
- DBP-{YYYYMMDD}-{HHmmss}
39
-
40
- 5. Create discovery session directory:
41
- mkdir -p .workflow/issues/discoveries/{SESSION_ID}/
42
-
43
- 6. Initialize discovery-state.json:
44
- {
45
- "id": "{SESSION_ID}",
46
- "mode": "{discover|discover-by-prompt}",
47
- "status": "in_progress",
48
- "started_at": "{NOW_ISO}",
49
- "completed_at": null,
50
- "perspectives_completed": [],
51
- "issues_found": 0,
52
- "issues_deduplicated": 0
53
- }
54
- ```
55
-
56
- ---
57
-
58
- ## Multi-Perspective Discovery (discover)
59
-
60
- ### Step 3: Define Analysis Perspectives
61
-
62
- ```
63
- 8 analysis perspectives, each with a focus area and guiding questions:
64
-
65
- 1. SECURITY
66
- Focus: Authentication, authorization, input validation, secrets, injection
67
- Question: "What security vulnerabilities or unsafe patterns exist?"
68
-
69
- 2. PERFORMANCE
70
- Focus: N+1 queries, unbounded loops, missing caching, memory leaks, large payloads
71
- Question: "What performance bottlenecks or inefficiencies exist?"
72
-
73
- 3. RELIABILITY
74
- Focus: Error handling, retry logic, race conditions, data integrity, graceful degradation
75
- Question: "What failure modes are unhandled or could cause data loss?"
76
-
77
- 4. MAINTAINABILITY
78
- Focus: Code duplication, tight coupling, missing abstractions, unclear naming, dead code
79
- Question: "What makes this codebase harder to understand or change?"
80
-
81
- 5. SCALABILITY
82
- Focus: Hardcoded limits, single-threaded bottlenecks, stateful assumptions, schema rigidity
83
- Question: "What will break or degrade as load/data/users increase?"
84
-
85
- 6. UX
86
- Focus: Confusing flows, missing feedback, inconsistent behavior, accessibility gaps
87
- Question: "What creates friction or confusion for end users?"
88
-
89
- 7. ACCESSIBILITY
90
- Focus: Screen reader support, keyboard navigation, color contrast, ARIA labels, focus management
91
- Question: "What barriers exist for users with disabilities?"
92
-
93
- 8. COMPLIANCE
94
- Focus: Logging gaps, audit trails, data retention, privacy controls, regulatory requirements
95
- Question: "What regulatory or policy requirements are not met?"
96
- ```
97
-
98
- ### Step 3.5: Load Project Specs
99
-
100
- ```
101
- specs_content = maestro spec load --category execution
102
- ```
103
-
104
- Pass to each analysis agent so severity assessments align with project quality standards.
105
-
106
- ---
107
-
108
- ### Step 4: Launch Parallel Analysis
109
-
110
- ```
111
- Launch analysis agents in batches of up to 4 concurrent:
112
-
113
- Batch 1: security, performance, reliability, maintainability
114
- Batch 2: scalability, ux, accessibility, compliance
115
-
116
- For each perspective, launch a CLI analysis:
117
-
118
- maestro delegate "PURPOSE: Discover {PERSPECTIVE} issues in the codebase.
119
- Focus: {FOCUS_AREA}
120
- Guiding question: {QUESTION}
121
-
122
- TASK:
123
- - Scan all source files for {PERSPECTIVE}-related problems
124
- - Identify concrete issues with file:line references
125
- - Rate each finding: critical / high / medium / low severity
126
- - Provide brief fix direction for each finding
127
-
128
- MODE: analysis
129
- CONTEXT: @**/*
130
- EXPECTED: JSON array of findings, each with:
131
- title, severity, description, location (file:line), fix_direction, affected_components[]
132
- CONSTRAINTS: Only report real issues with evidence, no speculative findings
133
- " --to gemini --mode analysis
134
-
135
- Store results per perspective in:
136
- .workflow/issues/discoveries/{SESSION_ID}/{PERSPECTIVE}-findings.json
137
-
138
- Update discovery-state.json:
139
- perspectives_completed += ["{PERSPECTIVE}"]
140
- ```
141
-
142
- ### Step 5: Deduplicate Findings
143
-
144
- ```
145
- 1. Load all *-findings.json from the session directory
146
- 2. Merge all findings into a single list
147
- 3. Deduplicate by similarity:
148
- - Group findings by affected file path
149
- - Within each file group, compare descriptions
150
- - If two findings describe the same issue (>80% description overlap
151
- or same file:line), keep the one with higher severity
152
- 4. Track: issues_found (pre-dedup), issues_deduplicated (post-dedup)
153
- 5. Update discovery-state.json with counts
154
- ```
155
-
156
- ### Step 6: Create Issues from Findings
157
-
158
- ```
159
- For each unique finding:
160
- 1. Generate ISS-YYYYMMDD-NNN ID (same logic as create handler in issue.md)
161
- 2. Build issue record:
162
- {
163
- "id": "{ID}",
164
- "title": "{finding.title}",
165
- "status": "registered",
166
- "priority": {severity_to_priority},
167
- "severity": "{finding.severity}",
168
- "source": "discovery",
169
- "phase_ref": null,
170
- "gap_ref": null,
171
- "description": "{finding.description}",
172
- "fix_direction": "{finding.fix_direction}",
173
- "context": {
174
- "location": "{finding.location}",
175
- "suggested_fix": "",
176
- "notes": "Discovered by {PERSPECTIVE} analysis in session {SESSION_ID}"
177
- },
178
- "tags": ["{PERSPECTIVE}"],
179
- "affected_components": {finding.affected_components},
180
- "feedback": [],
181
- "issue_history": [
182
- {
183
- "timestamp": "{NOW_ISO}",
184
- "from_status": null,
185
- "to_status": "registered",
186
- "actor": "discovery-agent",
187
- "note": "Auto-discovered via {PERSPECTIVE} perspective"
188
- }
189
- ],
190
- "created_at": "{NOW_ISO}",
191
- "updated_at": "{NOW_ISO}",
192
- "resolved_at": null,
193
- "resolution": null
194
- }
195
-
196
- Severity-to-priority mapping:
197
- critical → 1
198
- high → 2
199
- medium → 3
200
- low → 4
201
-
202
- 3. Append to .workflow/issues/issues.jsonl
203
- 4. Also append to .workflow/issues/discoveries/{SESSION_ID}/discovery-issues.jsonl
204
-
205
- 5. Update discovery-state.json:
206
- status = "completed"
207
- completed_at = NOW_ISO
208
-
209
- 6. Display summary:
210
- ====================================================
211
- DISCOVERY COMPLETE: {SESSION_ID}
212
- Mode: multi-perspective (8 perspectives)
213
- Findings: {issues_found} raw, {issues_deduplicated} unique
214
- Issues created: {issues_deduplicated}
215
- ====================================================
216
-
217
- BREAKDOWN BY PERSPECTIVE:
218
- Security: {count}
219
- Performance: {count}
220
- Reliability: {count}
221
- Maintainability: {count}
222
- Scalability: {count}
223
- UX: {count}
224
- Accessibility: {count}
225
- Compliance: {count}
226
-
227
- BREAKDOWN BY SEVERITY:
228
- Critical: {count}
229
- High: {count}
230
- Medium: {count}
231
- Low: {count}
232
-
233
- 7. Suggest next steps:
234
- - Skill({ skill: "manage-issue", args: "list --severity critical" }) -- Review critical issues
235
- - Skill({ skill: "manage-issue", args: "list" }) -- View all issues
236
- - Skill({ skill: "manage-issue-discover", args: "by-prompt \"...\"" }) -- Explore specific area deeper
237
- ```
238
-
239
- ---
240
-
241
- ## Prompt-Driven Discovery (discover-by-prompt)
242
-
243
- ### Step 7: Parse User Prompt
244
-
245
- ```
246
- 1. Extract USER_PROMPT from DISCOVERY_ARGS
247
- If empty → AskUserQuestion({
248
- question: "What kind of issues should I look for?",
249
- options: [
250
- { label: "Error handling gaps", description: "Missing try/catch, unhandled promises, swallowed errors" },
251
- { label: "API contract violations", description: "Mismatched types, missing validation, undocumented endpoints" },
252
- { label: "Test coverage gaps", description: "Untested code paths, missing edge cases" },
253
- { label: "Custom", description: "Describe what to look for" }
254
- ]
255
- })
256
-
257
- 2. Store USER_PROMPT for exploration context
258
- ```
259
-
260
- ### Step 8: Plan Exploration Dimensions
261
-
262
- ```
263
- Use Gemini CLI to decompose the user prompt into exploration dimensions:
264
-
265
- maestro delegate "PURPOSE: Decompose this issue discovery prompt into 3-5 specific exploration dimensions.
266
-
267
- User wants to find: {USER_PROMPT}
268
-
269
- TASK:
270
- - Break down the prompt into concrete, searchable dimensions
271
- - For each dimension: provide search patterns (regex/keywords), file patterns, and what constitutes a finding
272
- - Output as JSON array of dimensions
273
-
274
- MODE: analysis
275
- EXPECTED: JSON array:
276
- [{
277
- name: string,
278
- description: string,
279
- search_patterns: string[],
280
- file_patterns: string[],
281
- finding_criteria: string
282
- }]
283
- " --to gemini --mode analysis
284
-
285
- Store dimensions in:
286
- .workflow/issues/discoveries/{SESSION_ID}/exploration-plan.json
287
- ```
288
-
289
- ### Step 9: Gather Codebase Context
290
-
291
- ```
292
- For each exploration dimension:
293
-
294
- 1. Use @~/.maestro/templates/search-tool.json for semantic search:
295
- {search_tool}(
296
- project_root_path="{PROJECT_ROOT}",
297
- query="{dimension.description}"
298
- )
299
-
300
- 2. Use ripgrep for pattern-based search:
301
- For each pattern in dimension.search_patterns:
302
- rg "{pattern}" --type-add "src:*.{ts,tsx,js,jsx,py,java,go}" --type src -n
303
-
304
- 3. Collect matching files and code snippets
305
- 4. Store context per dimension in:
306
- .workflow/issues/discoveries/{SESSION_ID}/{dimension.name}-context.md
307
- ```
308
-
309
- ### Step 10: Iterative Exploration Loop
310
-
311
- ```
312
- Max 3 rounds of exploration:
313
-
314
- Round 1: Initial analysis
315
- - Analyze gathered context from Step 9
316
- - Identify concrete issues with evidence
317
- - Identify gaps in coverage (areas not yet explored)
318
-
319
- Round 2: Deepen search (if gaps found)
320
- - For each identified gap:
321
- - Refine search patterns
322
- - Search adjacent files/modules
323
- - Cross-reference with related code
324
- - Merge new findings with Round 1
325
-
326
- Round 3: Final sweep (if significant gaps remain)
327
- - Focus on high-severity patterns not yet covered
328
- - Check cross-module interactions
329
- - Finalize findings list
330
-
331
- After each round:
332
- - Log findings count and coverage assessment
333
- - If no new gaps or no new findings → exit loop early
334
-
335
- Store exploration log:
336
- .workflow/issues/discoveries/{SESSION_ID}/exploration-log.md
337
-
338
- ## Round {N}
339
- - Files analyzed: {count}
340
- - Findings: {count} new, {total} cumulative
341
- - Gaps remaining: {list or "none"}
342
- ```
343
-
344
- ### Step 11: Generate Issues from Findings
345
-
346
- ```
347
- 1. Collect all findings from exploration rounds
348
- 2. Deduplicate (same logic as Step 5):
349
- - Group by affected file
350
- - Merge similar descriptions
351
- - Keep higher-severity duplicate
352
-
353
- 3. For each unique finding:
354
- - Generate ISS-YYYYMMDD-NNN ID
355
- - Build issue record (same structure as Step 6)
356
- - Set source = "discovery"
357
- - Set tags = ["prompt-discovery", "{relevant dimension name}"]
358
- - Set context.notes = "Discovered via prompt: {USER_PROMPT}"
359
-
360
- 4. Append to .workflow/issues/issues.jsonl
361
- 5. Append to .workflow/issues/discoveries/{SESSION_ID}/discovery-issues.jsonl
362
-
363
- 6. Update discovery-state.json:
364
- status = "completed"
365
- completed_at = NOW_ISO
366
-
367
- 7. Display summary:
368
- ====================================================
369
- DISCOVERY COMPLETE: {SESSION_ID}
370
- Mode: prompt-driven
371
- Prompt: "{USER_PROMPT}"
372
- Rounds: {rounds_executed}
373
- Findings: {raw_count} raw, {deduped_count} unique
374
- Issues created: {deduped_count}
375
- ====================================================
376
-
377
- FINDINGS BY DIMENSION:
378
- {dimension.name}: {count}
379
- ...
380
-
381
- BREAKDOWN BY SEVERITY:
382
- Critical: {count}
383
- High: {count}
384
- Medium: {count}
385
- Low: {count}
386
-
387
- 8. Suggest next steps:
388
- - Skill({ skill: "manage-issue", args: "list --source discovery" }) -- View discovered issues
389
- - Skill({ skill: "manage-issue-discover" }) -- Run full 8-perspective scan
390
- - Skill({ skill: "manage-issue-discover", args: "by-prompt \"...\"" }) -- Explore another area
391
- ```
392
-
393
- ---
394
-
395
- ## Output
396
-
397
- - **Session artifacts**: `.workflow/issues/discoveries/{SESSION_ID}/`
398
- - `discovery-state.json` -- session metadata and progress
399
- - `discovery-issues.jsonl` -- issues found in this session
400
- - `*-findings.json` -- raw findings per perspective (discover mode)
401
- - `exploration-plan.json` -- dimensions (discover-by-prompt mode)
402
- - `*-context.md` -- gathered context per dimension
403
- - `exploration-log.md` -- round-by-round exploration log
404
- - **Issues**: appended to `.workflow/issues/issues.jsonl`
405
-
406
- ## Quality Criteria
407
-
408
- - Multi-perspective mode covers all 8 analysis angles
409
- - Prompt-driven mode decomposes user intent into searchable dimensions
410
- - Findings backed by concrete file:line evidence
411
- - Deduplication prevents duplicate issue records
412
- - Discovery session fully traceable via session directory
413
- - All created issues follow the issue.json template schema
414
- - ID generation avoids collisions with existing issues
1
+ # Workflow: Issue Discovery
2
+
3
+ Automated issue discovery via multi-perspective analysis or prompt-driven exploration.
4
+
5
+ ## Input
6
+
7
+ - `$ARGUMENTS`: empty (multi-perspective) or `by-prompt [prompt text]`
8
+ - Operates on `.workflow/issues/`
9
+
10
+ ---
11
+
12
+ ### Step 1: Parse Mode
13
+
14
+ ```
15
+ 1. Extract mode from $ARGUMENTS:
16
+ - empty or no arguments → MULTI_PERSPECTIVE mode (Step 3)
17
+ - "by-prompt" → PROMPT_DRIVEN mode (Step 7)
18
+
19
+ 2. Remaining tokens after mode keyword = DISCOVERY_ARGS
20
+ For by-prompt: join remaining tokens as USER_PROMPT
21
+ ```
22
+
23
+ ---
24
+
25
+ ### Step 2: Validate Environment
26
+
27
+ ```
28
+ 1. Check .workflow/ exists
29
+ If not → fatal: "No project initialized. Run /maestro-init first."
30
+
31
+ 2. Check .workflow/issues/ exists
32
+ If not → mkdir -p .workflow/issues/
33
+
34
+ 3. Ensure issues.jsonl exists
35
+ If not → touch .workflow/issues/issues.jsonl
36
+
37
+ 4. Generate discovery session ID:
38
+ DBP-{YYYYMMDD}-{HHmmss}
39
+
40
+ 5. Create discovery session directory:
41
+ mkdir -p .workflow/issues/discoveries/{SESSION_ID}/
42
+
43
+ 6. Initialize discovery-state.json:
44
+ {
45
+ "id": "{SESSION_ID}",
46
+ "mode": "{discover|discover-by-prompt}",
47
+ "status": "in_progress",
48
+ "started_at": "{NOW_ISO}",
49
+ "completed_at": null,
50
+ "perspectives_completed": [],
51
+ "issues_found": 0,
52
+ "issues_deduplicated": 0
53
+ }
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Multi-Perspective Discovery (discover)
59
+
60
+ ### Step 3: Define Analysis Perspectives
61
+
62
+ ```
63
+ 8 analysis perspectives, each with a focus area and guiding questions:
64
+
65
+ 1. SECURITY
66
+ Focus: Authentication, authorization, input validation, secrets, injection
67
+ Question: "What security vulnerabilities or unsafe patterns exist?"
68
+
69
+ 2. PERFORMANCE
70
+ Focus: N+1 queries, unbounded loops, missing caching, memory leaks, large payloads
71
+ Question: "What performance bottlenecks or inefficiencies exist?"
72
+
73
+ 3. RELIABILITY
74
+ Focus: Error handling, retry logic, race conditions, data integrity, graceful degradation
75
+ Question: "What failure modes are unhandled or could cause data loss?"
76
+
77
+ 4. MAINTAINABILITY
78
+ Focus: Code duplication, tight coupling, missing abstractions, unclear naming, dead code
79
+ Question: "What makes this codebase harder to understand or change?"
80
+
81
+ 5. SCALABILITY
82
+ Focus: Hardcoded limits, single-threaded bottlenecks, stateful assumptions, schema rigidity
83
+ Question: "What will break or degrade as load/data/users increase?"
84
+
85
+ 6. UX
86
+ Focus: Confusing flows, missing feedback, inconsistent behavior, accessibility gaps
87
+ Question: "What creates friction or confusion for end users?"
88
+
89
+ 7. ACCESSIBILITY
90
+ Focus: Screen reader support, keyboard navigation, color contrast, ARIA labels, focus management
91
+ Question: "What barriers exist for users with disabilities?"
92
+
93
+ 8. COMPLIANCE
94
+ Focus: Logging gaps, audit trails, data retention, privacy controls, regulatory requirements
95
+ Question: "What regulatory or policy requirements are not met?"
96
+ ```
97
+
98
+ ### Step 3.5: Load Project Specs
99
+
100
+ ```
101
+ specs_content = maestro spec load --category coding
102
+ ```
103
+
104
+ Pass to each analysis agent so severity assessments align with project quality standards.
105
+
106
+ ---
107
+
108
+ ### Step 4: Launch Parallel Analysis
109
+
110
+ ```
111
+ Launch analysis agents in batches of up to 4 concurrent:
112
+
113
+ Batch 1: security, performance, reliability, maintainability
114
+ Batch 2: scalability, ux, accessibility, compliance
115
+
116
+ For each perspective, launch a CLI analysis:
117
+
118
+ maestro delegate "PURPOSE: Discover {PERSPECTIVE} issues in the codebase.
119
+ Focus: {FOCUS_AREA}
120
+ Guiding question: {QUESTION}
121
+
122
+ TASK:
123
+ - Scan all source files for {PERSPECTIVE}-related problems
124
+ - Identify concrete issues with file:line references
125
+ - Rate each finding: critical / high / medium / low severity
126
+ - Provide brief fix direction for each finding
127
+
128
+ MODE: analysis
129
+ CONTEXT: @**/*
130
+ EXPECTED: JSON array of findings, each with:
131
+ title, severity, description, location (file:line), fix_direction, affected_components[]
132
+ CONSTRAINTS: Only report real issues with evidence, no speculative findings
133
+ " --to gemini --mode analysis
134
+
135
+ Store results per perspective in:
136
+ .workflow/issues/discoveries/{SESSION_ID}/{PERSPECTIVE}-findings.json
137
+
138
+ Update discovery-state.json:
139
+ perspectives_completed += ["{PERSPECTIVE}"]
140
+ ```
141
+
142
+ ### Step 5: Deduplicate Findings
143
+
144
+ ```
145
+ 1. Load all *-findings.json from the session directory
146
+ 2. Merge all findings into a single list
147
+ 3. Deduplicate by similarity:
148
+ - Group findings by affected file path
149
+ - Within each file group, compare descriptions
150
+ - If two findings describe the same issue (>80% description overlap
151
+ or same file:line), keep the one with higher severity
152
+ 4. Track: issues_found (pre-dedup), issues_deduplicated (post-dedup)
153
+ 5. Update discovery-state.json with counts
154
+ ```
155
+
156
+ ### Step 6: Create Issues from Findings
157
+
158
+ ```
159
+ For each unique finding:
160
+ 1. Generate ISS-YYYYMMDD-NNN ID (same logic as create handler in issue.md)
161
+ 2. Build issue record:
162
+ {
163
+ "id": "{ID}",
164
+ "title": "{finding.title}",
165
+ "status": "registered",
166
+ "priority": {severity_to_priority},
167
+ "severity": "{finding.severity}",
168
+ "source": "discovery",
169
+ "phase_ref": null,
170
+ "gap_ref": null,
171
+ "description": "{finding.description}",
172
+ "fix_direction": "{finding.fix_direction}",
173
+ "context": {
174
+ "location": "{finding.location}",
175
+ "suggested_fix": "",
176
+ "notes": "Discovered by {PERSPECTIVE} analysis in session {SESSION_ID}"
177
+ },
178
+ "tags": ["{PERSPECTIVE}"],
179
+ "affected_components": {finding.affected_components},
180
+ "feedback": [],
181
+ "issue_history": [
182
+ {
183
+ "timestamp": "{NOW_ISO}",
184
+ "from_status": null,
185
+ "to_status": "registered",
186
+ "actor": "discovery-agent",
187
+ "note": "Auto-discovered via {PERSPECTIVE} perspective"
188
+ }
189
+ ],
190
+ "created_at": "{NOW_ISO}",
191
+ "updated_at": "{NOW_ISO}",
192
+ "resolved_at": null,
193
+ "resolution": null
194
+ }
195
+
196
+ Severity-to-priority mapping:
197
+ critical → 1
198
+ high → 2
199
+ medium → 3
200
+ low → 4
201
+
202
+ 3. Append to .workflow/issues/issues.jsonl
203
+ 4. Also append to .workflow/issues/discoveries/{SESSION_ID}/discovery-issues.jsonl
204
+
205
+ 5. Update discovery-state.json:
206
+ status = "completed"
207
+ completed_at = NOW_ISO
208
+
209
+ 6. Display summary:
210
+ ====================================================
211
+ DISCOVERY COMPLETE: {SESSION_ID}
212
+ Mode: multi-perspective (8 perspectives)
213
+ Findings: {issues_found} raw, {issues_deduplicated} unique
214
+ Issues created: {issues_deduplicated}
215
+ ====================================================
216
+
217
+ BREAKDOWN BY PERSPECTIVE:
218
+ Security: {count}
219
+ Performance: {count}
220
+ Reliability: {count}
221
+ Maintainability: {count}
222
+ Scalability: {count}
223
+ UX: {count}
224
+ Accessibility: {count}
225
+ Compliance: {count}
226
+
227
+ BREAKDOWN BY SEVERITY:
228
+ Critical: {count}
229
+ High: {count}
230
+ Medium: {count}
231
+ Low: {count}
232
+
233
+ 7. Suggest next steps:
234
+ - Skill({ skill: "manage-issue", args: "list --severity critical" }) -- Review critical issues
235
+ - Skill({ skill: "manage-issue", args: "list" }) -- View all issues
236
+ - Skill({ skill: "manage-issue-discover", args: "by-prompt \"...\"" }) -- Explore specific area deeper
237
+ ```
238
+
239
+ ---
240
+
241
+ ## Prompt-Driven Discovery (discover-by-prompt)
242
+
243
+ ### Step 7: Parse User Prompt
244
+
245
+ ```
246
+ 1. Extract USER_PROMPT from DISCOVERY_ARGS
247
+ If empty → AskUserQuestion({
248
+ question: "What kind of issues should I look for?",
249
+ options: [
250
+ { label: "Error handling gaps", description: "Missing try/catch, unhandled promises, swallowed errors" },
251
+ { label: "API contract violations", description: "Mismatched types, missing validation, undocumented endpoints" },
252
+ { label: "Test coverage gaps", description: "Untested code paths, missing edge cases" },
253
+ { label: "Custom", description: "Describe what to look for" }
254
+ ]
255
+ })
256
+
257
+ 2. Store USER_PROMPT for exploration context
258
+ ```
259
+
260
+ ### Step 8: Plan Exploration Dimensions
261
+
262
+ ```
263
+ Use Gemini CLI to decompose the user prompt into exploration dimensions:
264
+
265
+ maestro delegate "PURPOSE: Decompose this issue discovery prompt into 3-5 specific exploration dimensions.
266
+
267
+ User wants to find: {USER_PROMPT}
268
+
269
+ TASK:
270
+ - Break down the prompt into concrete, searchable dimensions
271
+ - For each dimension: provide search patterns (regex/keywords), file patterns, and what constitutes a finding
272
+ - Output as JSON array of dimensions
273
+
274
+ MODE: analysis
275
+ EXPECTED: JSON array:
276
+ [{
277
+ name: string,
278
+ description: string,
279
+ search_patterns: string[],
280
+ file_patterns: string[],
281
+ finding_criteria: string
282
+ }]
283
+ " --to gemini --mode analysis
284
+
285
+ Store dimensions in:
286
+ .workflow/issues/discoveries/{SESSION_ID}/exploration-plan.json
287
+ ```
288
+
289
+ ### Step 9: Gather Codebase Context
290
+
291
+ ```
292
+ For each exploration dimension:
293
+
294
+ 1. Use @~/.maestro/templates/search-tool.json for semantic search:
295
+ {search_tool}(
296
+ project_root_path="{PROJECT_ROOT}",
297
+ query="{dimension.description}"
298
+ )
299
+
300
+ 2. Use ripgrep for pattern-based search:
301
+ For each pattern in dimension.search_patterns:
302
+ rg "{pattern}" --type-add "src:*.{ts,tsx,js,jsx,py,java,go}" --type src -n
303
+
304
+ 3. Collect matching files and code snippets
305
+ 4. Store context per dimension in:
306
+ .workflow/issues/discoveries/{SESSION_ID}/{dimension.name}-context.md
307
+ ```
308
+
309
+ ### Step 10: Iterative Exploration Loop
310
+
311
+ ```
312
+ Max 3 rounds of exploration:
313
+
314
+ Round 1: Initial analysis
315
+ - Analyze gathered context from Step 9
316
+ - Identify concrete issues with evidence
317
+ - Identify gaps in coverage (areas not yet explored)
318
+
319
+ Round 2: Deepen search (if gaps found)
320
+ - For each identified gap:
321
+ - Refine search patterns
322
+ - Search adjacent files/modules
323
+ - Cross-reference with related code
324
+ - Merge new findings with Round 1
325
+
326
+ Round 3: Final sweep (if significant gaps remain)
327
+ - Focus on high-severity patterns not yet covered
328
+ - Check cross-module interactions
329
+ - Finalize findings list
330
+
331
+ After each round:
332
+ - Log findings count and coverage assessment
333
+ - If no new gaps or no new findings → exit loop early
334
+
335
+ Store exploration log:
336
+ .workflow/issues/discoveries/{SESSION_ID}/exploration-log.md
337
+
338
+ ## Round {N}
339
+ - Files analyzed: {count}
340
+ - Findings: {count} new, {total} cumulative
341
+ - Gaps remaining: {list or "none"}
342
+ ```
343
+
344
+ ### Step 11: Generate Issues from Findings
345
+
346
+ ```
347
+ 1. Collect all findings from exploration rounds
348
+ 2. Deduplicate (same logic as Step 5):
349
+ - Group by affected file
350
+ - Merge similar descriptions
351
+ - Keep higher-severity duplicate
352
+
353
+ 3. For each unique finding:
354
+ - Generate ISS-YYYYMMDD-NNN ID
355
+ - Build issue record (same structure as Step 6)
356
+ - Set source = "discovery"
357
+ - Set tags = ["prompt-discovery", "{relevant dimension name}"]
358
+ - Set context.notes = "Discovered via prompt: {USER_PROMPT}"
359
+
360
+ 4. Append to .workflow/issues/issues.jsonl
361
+ 5. Append to .workflow/issues/discoveries/{SESSION_ID}/discovery-issues.jsonl
362
+
363
+ 6. Update discovery-state.json:
364
+ status = "completed"
365
+ completed_at = NOW_ISO
366
+
367
+ 7. Display summary:
368
+ ====================================================
369
+ DISCOVERY COMPLETE: {SESSION_ID}
370
+ Mode: prompt-driven
371
+ Prompt: "{USER_PROMPT}"
372
+ Rounds: {rounds_executed}
373
+ Findings: {raw_count} raw, {deduped_count} unique
374
+ Issues created: {deduped_count}
375
+ ====================================================
376
+
377
+ FINDINGS BY DIMENSION:
378
+ {dimension.name}: {count}
379
+ ...
380
+
381
+ BREAKDOWN BY SEVERITY:
382
+ Critical: {count}
383
+ High: {count}
384
+ Medium: {count}
385
+ Low: {count}
386
+
387
+ 8. Suggest next steps:
388
+ - Skill({ skill: "manage-issue", args: "list --source discovery" }) -- View discovered issues
389
+ - Skill({ skill: "manage-issue-discover" }) -- Run full 8-perspective scan
390
+ - Skill({ skill: "manage-issue-discover", args: "by-prompt \"...\"" }) -- Explore another area
391
+ ```
392
+
393
+ ---
394
+
395
+ ## Output
396
+
397
+ - **Session artifacts**: `.workflow/issues/discoveries/{SESSION_ID}/`
398
+ - `discovery-state.json` -- session metadata and progress
399
+ - `discovery-issues.jsonl` -- issues found in this session
400
+ - `*-findings.json` -- raw findings per perspective (discover mode)
401
+ - `exploration-plan.json` -- dimensions (discover-by-prompt mode)
402
+ - `*-context.md` -- gathered context per dimension
403
+ - `exploration-log.md` -- round-by-round exploration log
404
+ - **Issues**: appended to `.workflow/issues/issues.jsonl`
405
+
406
+ ## Quality Criteria
407
+
408
+ - Multi-perspective mode covers all 8 analysis angles
409
+ - Prompt-driven mode decomposes user intent into searchable dimensions
410
+ - Findings backed by concrete file:line evidence
411
+ - Deduplication prevents duplicate issue records
412
+ - Discovery session fully traceable via session directory
413
+ - All created issues follow the issue.json template schema
414
+ - ID generation avoids collisions with existing issues