maestro-flow 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.claude/commands/maestro-ralph.md +548 -377
  2. package/.claude/commands/maestro.md +220 -191
  3. package/.codex/skills/maestro/SKILL.md +495 -462
  4. package/.codex/skills/maestro-collab/SKILL.md +218 -117
  5. package/.codex/skills/maestro-execute/SKILL.md +13 -11
  6. package/.codex/skills/maestro-milestone-audit/SKILL.md +12 -10
  7. package/.codex/skills/maestro-ralph/SKILL.md +491 -339
  8. package/.codex/skills/maestro-ui-codify/SKILL.md +18 -16
  9. package/.codex/skills/manage-codebase-rebuild/SKILL.md +20 -13
  10. package/.codex/skills/manage-issue-discover/SKILL.md +19 -17
  11. package/.codex/skills/quality-debug/SKILL.md +35 -31
  12. package/.codex/skills/quality-refactor/SKILL.md +20 -12
  13. package/.codex/skills/quality-review/SKILL.md +21 -17
  14. package/.codex/skills/team-coordinate/SKILL.md +462 -235
  15. package/.codex/skills/team-coordinate/specs/role-catalog.md +132 -0
  16. package/.codex/skills/team-lifecycle-v4/SKILL.md +445 -191
  17. package/.codex/skills/team-quality-assurance/SKILL.md +205 -161
  18. package/.codex/skills/team-review/SKILL.md +198 -159
  19. package/.codex/skills/team-tech-debt/SKILL.md +214 -144
  20. package/.codex/skills/team-testing/SKILL.md +210 -158
  21. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +25 -33
  22. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  23. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js +9 -3
  24. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js.map +1 -1
  25. package/dashboard/dist-server/dashboard/src/server/agents/codex-app-server-adapter.js +5 -2
  26. package/dashboard/dist-server/dashboard/src/server/agents/codex-app-server-adapter.js.map +1 -1
  27. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +20 -8
  28. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
  29. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.js +6 -3
  30. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.js.map +1 -1
  31. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.test.js +7 -1
  32. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.test.js.map +1 -1
  33. package/dashboard/dist-server/dashboard/src/server/agents/opencode-adapter.d.ts +2 -0
  34. package/dashboard/dist-server/dashboard/src/server/agents/opencode-adapter.js +40 -15
  35. package/dashboard/dist-server/dashboard/src/server/agents/opencode-adapter.js.map +1 -1
  36. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.d.ts +1 -0
  37. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.js +59 -0
  38. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.js.map +1 -0
  39. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.test.d.ts +1 -0
  40. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.test.js +78 -0
  41. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.test.js.map +1 -0
  42. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.d.ts +25 -0
  43. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.js +40 -0
  44. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.js.map +1 -0
  45. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.test.d.ts +1 -0
  46. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.test.js +89 -0
  47. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.test.js.map +1 -0
  48. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +19 -8
  49. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
  50. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.d.ts +6 -0
  51. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.js +7 -1
  52. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.js.map +1 -1
  53. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.test.d.ts +1 -0
  54. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.test.js +46 -0
  55. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.test.js.map +1 -0
  56. package/dashboard/dist-server/shared/agent-types.d.ts +6 -0
  57. package/dist/shared/agent-types.d.ts +6 -0
  58. package/dist/shared/agent-types.d.ts.map +1 -1
  59. package/dist/src/agents/cli-agent-runner.d.ts +3 -0
  60. package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
  61. package/dist/src/agents/cli-agent-runner.js +1 -0
  62. package/dist/src/agents/cli-agent-runner.js.map +1 -1
  63. package/dist/src/commands/delegate.d.ts +2 -0
  64. package/dist/src/commands/delegate.d.ts.map +1 -1
  65. package/dist/src/commands/delegate.js +18 -0
  66. package/dist/src/commands/delegate.js.map +1 -1
  67. package/dist/src/config/cli-tools-config.d.ts +3 -0
  68. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  69. package/dist/src/config/cli-tools-config.js.map +1 -1
  70. package/package.json +1 -1
  71. package/shared/agent-types.ts +237 -231
  72. package/.codex/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +0 -247
  73. package/.codex/skills/team-coordinate/roles/coordinator/commands/dispatch.md +0 -126
  74. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +0 -265
  75. package/.codex/skills/team-coordinate/roles/coordinator/role.md +0 -403
  76. package/.codex/skills/team-coordinate/specs/knowledge-transfer.md +0 -113
  77. package/.codex/skills/team-coordinate/specs/pipelines.md +0 -97
  78. package/.codex/skills/team-coordinate/specs/quality-gates.md +0 -112
  79. package/.codex/skills/team-coordinate/specs/role-spec-template.md +0 -192
  80. package/.codex/skills/team-executor/SKILL.md +0 -116
  81. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +0 -213
  82. package/.codex/skills/team-executor/roles/executor/role.md +0 -173
  83. package/.codex/skills/team-executor/specs/session-schema.md +0 -230
  84. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/analyze.md +0 -56
  85. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +0 -61
  86. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +0 -113
  87. package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +0 -189
  88. package/.codex/skills/team-lifecycle-v4/schemas/tasks-schema.md +0 -100
  89. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +0 -204
  90. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/analyze.md +0 -72
  91. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +0 -108
  92. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +0 -163
  93. package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +0 -177
  94. package/.codex/skills/team-review/roles/coordinator/commands/analyze.md +0 -71
  95. package/.codex/skills/team-review/roles/coordinator/commands/dispatch.md +0 -90
  96. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +0 -135
  97. package/.codex/skills/team-review/roles/coordinator/role.md +0 -176
  98. package/.codex/skills/team-tech-debt/roles/coordinator/commands/analyze.md +0 -47
  99. package/.codex/skills/team-tech-debt/roles/coordinator/commands/dispatch.md +0 -163
  100. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +0 -133
  101. package/.codex/skills/team-tech-debt/roles/coordinator/role.md +0 -173
  102. package/.codex/skills/team-testing/roles/coordinator/commands/analyze.md +0 -70
  103. package/.codex/skills/team-testing/roles/coordinator/commands/dispatch.md +0 -106
  104. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +0 -156
  105. package/.codex/skills/team-testing/roles/coordinator/role.md +0 -185
@@ -1,161 +1,205 @@
1
- ---
2
- name: team-quality-assurance
3
- description: Team QA combining issue discovery and testing
4
- allowed-tools: spawn_agent(*), wait_agent(*), send_message(*), followup_task(*), close_agent(*), list_agents(*), report_agent_job_result(*), request_user_input(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*), mcp__maestro-tools__team_msg(*)
5
- ---
6
-
7
- <purpose>
8
- Orchestrate multi-agent QA: scout -> strategist -> generator -> executor -> analyst. Supports discovery, testing, and full closed-loop modes with parallel generation and GC loops.
9
-
10
- ```
11
- Skill(skill="team-quality-assurance", args="task description")
12
- |
13
- SKILL.md (this file) = Router
14
- |
15
- +--------------+--------------+
16
- | |
17
- no --role flag --role <name>
18
- | |
19
- Coordinator Worker
20
- roles/coordinator/role.md roles/<name>/role.md
21
- |
22
- +-- analyze -> dispatch -> spawn workers -> STOP
23
- |
24
- +-------+-------+-------+-------+-------+
25
- v v v v v
26
- [scout] [strat] [gen] [exec] [analyst]
27
- team-worker agents, each loads roles/<role>/role.md
28
- ```
29
-
30
- </purpose>
31
-
32
- <context>
33
- ### Role Registry
34
-
35
- | Role | Path | Prefix | Inner Loop |
36
- |------|------|--------|------------|
37
- | coordinator | [roles/coordinator/role.md](roles/coordinator/role.md) | -- | -- |
38
- | scout | [roles/scout/role.md](roles/scout/role.md) | SCOUT-* | false |
39
- | strategist | [roles/strategist/role.md](roles/strategist/role.md) | QASTRAT-* | false |
40
- | generator | [roles/generator/role.md](roles/generator/role.md) | QAGEN-* | false |
41
- | executor | [roles/executor/role.md](roles/executor/role.md) | QARUN-* | true |
42
- | analyst | [roles/analyst/role.md](roles/analyst/role.md) | QAANA-* | false |
43
-
44
- ### Role Router
45
-
46
- Parse `$ARGUMENTS`:
47
- - Has `--role <name>` -> Read `roles/<name>/role.md`, execute Phase 2-4
48
- - No `--role` -> `roles/coordinator/role.md`, execute entry router
49
-
50
- ### Delegation Lock
51
-
52
- **Coordinator is a PURE ORCHESTRATOR. It coordinates, it does NOT do.**
53
-
54
- Before calling ANY tool, apply this check:
55
-
56
- | Tool Call | Verdict | Reason |
57
- |-----------|---------|--------|
58
- | `spawn_agent`, `wait_agent`, `close_agent`, `send_message`, `followup_task` | ALLOWED | Orchestration |
59
- | `list_agents` | ALLOWED | Agent health check |
60
- | `request_user_input` | ALLOWED | User interaction |
61
- | `mcp__maestro-tools__team_msg` | ALLOWED | Message bus |
62
- | `Read/Write` on `.workflow/.team/` files | ALLOWED | Session state |
63
- | `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
64
- | `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
65
- | `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
66
- | `Bash("maestro delegate ...")` | BLOCKED | Only workers call CLI |
67
- | `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
68
-
69
- **If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
70
-
71
- **No exceptions for "simple" tasks.** Even a single-file read-and-report MUST go through spawn_agent.
72
-
73
- ### Shared Constants
74
-
75
- - **Session prefix**: `QA`
76
- - **Session path**: `.workflow/.team/QA-<slug>-<date>/`
77
- - **Team name**: `quality-assurance`
78
- - **CLI tools**: `maestro delegate --mode analysis` (read-only), `maestro delegate --mode write` (modifications)
79
- - **Message bus**: `mcp__maestro-tools__team_msg(session_id=<session-id>, ...)`
80
-
81
- ### Worker Spawn Template
82
-
83
- Spawn via `team-worker` agent. Message includes: role, role_spec path, session folder/id, requirement, inner_loop flag, task context, upstream context. After spawning: `wait_agent` (30 min). Timeout: STATUS_CHECK (3 min) -> FINALIZE (3 min) -> close.
84
-
85
- ### Model Selection Guide
86
-
87
- | Role | reasoning_effort |
88
- |------|-------------------|
89
- | Scout (SCOUT-*) | medium |
90
- | Strategist (QASTRAT-*) | high |
91
- | Generator (QAGEN-*) | high |
92
- | Executor (QARUN-*) | medium |
93
- | Analyst (QAANA-*) | high |
94
-
95
- Override via `model`/`reasoning_effort` params in spawn_agent for cost optimization.
96
-
97
- ### User Commands
98
-
99
- | Command | Action |
100
- |---------|--------|
101
- | `check` / `status` | View pipeline status graph |
102
- | `resume` / `continue` | Advance to next step |
103
- | `--mode=discovery` | Force discovery mode |
104
- | `--mode=testing` | Force testing mode |
105
- | `--mode=full` | Force full QA mode |
106
-
107
- ### v4 Agent Coordination
108
-
109
- **Message Semantics**: `send_message` to queue scout findings to strategist. `list_agents` for health checks. `followup_task` not used (all one-shot workers).
110
-
111
- **Pipeline Pattern**: Sequential with GC loops: scout -> strategist -> generator -> executor -> analyst. Generator/executor may loop (max 3 rounds) when coverage below target.
112
-
113
- **Agent Health Check**: Reconcile `tasks.json` with `list_agents({})`. Reset orphaned tasks to pending.
114
-
115
- **Named Targeting**: `send_message({ target: "QASTRAT-001" })`, `close_agent({ target: "SCOUT-001" })`.
116
-
117
- ### Completion Action
118
-
119
- Present choice: **Archive & Clean** (recommended), **Keep Active**, **Export Results**.
120
-
121
- ### Session Directory
122
-
123
- ```
124
- .workflow/.team/QA-<slug>-<date>/
125
- +-- .msg/messages.jsonl # Team message bus
126
- +-- .msg/meta.json # Session state + shared memory
127
- +-- wisdom/ # Cross-task knowledge
128
- +-- scan/ # Scout output
129
- +-- strategy/ # Strategist output
130
- +-- tests/ # Generator output (L1/, L2/, L3/)
131
- +-- results/ # Executor output
132
- +-- analysis/ # Analyst output
133
- ```
134
-
135
- ### Specs Reference
136
-
137
- - [specs/pipelines.md](specs/pipelines.md) -- Pipeline definitions and task registry
138
- - [specs/team-config.json](specs/team-config.json) -- Team configuration and shared memory schema
139
- </context>
140
-
141
- <error_codes>
142
-
143
- | Scenario | Resolution |
144
- |----------|------------|
145
- | Unknown --role value | Error with available role list |
146
- | Role not found | Error with expected path (roles/<name>/role.md) |
147
- | CLI tool fails | Worker fallback to direct implementation |
148
- | Scout finds no issues | Report clean scan, skip to testing mode |
149
- | GC loop exceeded | Accept current coverage with warning |
150
- | Fast-advance conflict | Coordinator reconciles on next callback |
151
- | Completion action fails | Default to Keep Active |
152
- </error_codes>
153
-
154
- <success_criteria>
155
- - [ ] Role router correctly dispatches to coordinator or worker based on --role flag
156
- - [ ] Pipeline mode detected (discovery/testing/full) from task description
157
- - [ ] Scout -> strategist -> generator -> executor -> analyst executed in order
158
- - [ ] GC loops create fix tasks when coverage is below target (max 3 rounds)
159
- - [ ] Session state persisted after each pipeline stage
160
- - [ ] Completion action presented and handled correctly
161
- </success_criteria>
1
+ ---
2
+ name: team-quality-assurance
3
+ description: Team QA combining issue discovery and testing
4
+ argument-hint: "[scope] [-y|--yes] [-c|--concurrency N] [--continue] [--mode discovery|testing|full]"
5
+ allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, request_user_input
6
+ ---
7
+
8
+ <purpose>
9
+ Wave-based QA pipeline via `spawn_agents_on_csv`. Progressive test coverage through scout → strategy → generate → execute → analyze cycle with GC loops for coverage convergence.
10
+
11
+ ```
12
+ +-------------------------------------------------------------------+
13
+ | QA CSV WAVE WORKFLOW |
14
+ +-------------------------------------------------------------------+
15
+ | Phase 1: Mode Selection + CSV Generation |
16
+ | +-- Detect mode (discovery/testing/full) |
17
+ | +-- Build tasks.csv from pipeline definition |
18
+ | |
19
+ | Phase 2: Wave Execution Engine |
20
+ | +-- Sequential waves, parallel tasks within wave |
21
+ | +-- GC Loop: after QARUN wave, check coverage targets |
22
+ | | +-- Coverage < target add QAGEN+QARUN waves (max 3) |
23
+ | +-- discoveries.ndjson shared across waves |
24
+ | |
25
+ | Phase 3: Results Aggregation |
26
+ +-------------------------------------------------------------------+
27
+ ```
28
+ </purpose>
29
+
30
+ <context>
31
+ ```bash
32
+ $team-quality-assurance "src/auth module"
33
+ $team-quality-assurance -y --mode testing "src/payments"
34
+ $team-quality-assurance --continue "20260518-qa-auth"
35
+ ```
36
+
37
+ **Flags**: `-y` (auto), `-c N` (concurrency, default 3), `--continue` (resume), `--mode discovery|testing|full`
38
+
39
+ ### Role Registry (Fixed)
40
+
41
+ | Role | Path | Prefix |
42
+ |------|------|--------|
43
+ | scout | [roles/scout/role.md](roles/scout/role.md) | SCOUT-* |
44
+ | strategist | [roles/strategist/role.md](roles/strategist/role.md) | QASTRAT-* |
45
+ | generator | [roles/generator/role.md](roles/generator/role.md) | QAGEN-* |
46
+ | executor | [roles/executor/role.md](roles/executor/role.md) | QARUN-* |
47
+ | analyst | [roles/analyst/role.md](roles/analyst/role.md) | QAANA-* |
48
+
49
+ **Session**: `.workflow/.csv-wave/{YYYYMMDD}-qa-{slug}/`
50
+ **Output**: tasks.csv, results.csv, discoveries.ndjson, context.md
51
+
52
+ ### Scan Perspectives (scout)
53
+ bug, security, test-coverage, code-quality, ux
54
+ </context>
55
+
56
+ <csv_schema>
57
+
58
+ ### tasks.csv (Input columns)
59
+
60
+ ```csv
61
+ id,title,description,role,test_layer,deps,context_from,wave
62
+ ```
63
+
64
+ | Column | Description |
65
+ |--------|-------------|
66
+ | `id` | Task ID: `{PREFIX}-{NNN}` or `{PREFIX}-L{layer}-{NNN}` |
67
+ | `title` | Short task title |
68
+ | `description` | PURPOSE/TASK/EXPECTED/CONSTRAINTS |
69
+ | `role` | Fixed role name |
70
+ | `test_layer` | L1/L2/L3 or empty |
71
+ | `deps` | Semicolon-separated dependency IDs |
72
+ | `context_from` | Semicolon-separated context source IDs |
73
+ | `wave` | Wave number |
74
+
75
+ **Output columns** (via `output_schema` only):
76
+
77
+ | Column | Description |
78
+ |--------|-------------|
79
+ | `result_status` | completed / failed / blocked |
80
+ | `findings` | Key findings (max 500 chars) |
81
+ | `files_modified` | Semicolon-separated paths |
82
+ | `coverage_score` | Test coverage % (0-100, for QARUN tasks) |
83
+ | `error` | Error message |
84
+
85
+ **Column separation rule**: Input and Output MUST NOT share names.
86
+
87
+ ### Pipeline Wave Assignments
88
+
89
+ #### discovery (5 waves, serial)
90
+
91
+ | Wave | Task | Role |
92
+ |------|------|------|
93
+ | 1 | SCOUT-001 | scout |
94
+ | 2 | QASTRAT-001 | strategist |
95
+ | 3 | QAGEN-001 | generator |
96
+ | 4 | QARUN-001 | executor |
97
+ | 5 | QAANA-001 | analyst |
98
+
99
+ #### testing (6+ waves, GC loops)
100
+
101
+ | Wave | Task | Role |
102
+ |------|------|------|
103
+ | 1 | QASTRAT-001 | strategist |
104
+ | 2 | QAGEN-L1-001 | generator |
105
+ | 3 | QARUN-L1-001 | executor |
106
+ | 4+ | GC: QAGEN-L2 + QARUN-L2 if coverage < target | generator, executor |
107
+ | N | QAANA-001 | analyst |
108
+
109
+ #### full (8+ waves, parallel + GC)
110
+
111
+ | Wave | Task | Role |
112
+ |------|------|------|
113
+ | 1 | SCOUT-001 | scout |
114
+ | 2 | QASTRAT-001 | strategist |
115
+ | 3 | QAGEN-L1-001; QAGEN-L2-001 | generator (parallel) |
116
+ | 4 | QARUN-L1-001; QARUN-L2-001 | executor (parallel) |
117
+ | 5+ | GC loops if coverage < target | generator, executor |
118
+ | N-1 | QAANA-001 | analyst |
119
+ | N | SCOUT-002 | scout (regression) |
120
+
121
+ **Coverage Targets**: L1≥80%, L2≥60%, L3≥40%. **Max GC Rounds**: 3 per layer.
122
+ </csv_schema>
123
+
124
+ <invariants>
125
+ 1. **Wave Order Sacred**: Sequential wave execution
126
+ 2. **CSV Source of Truth**: Master tasks.csv
127
+ 3. **Column Separation Rule**: Input ≠ Output column names
128
+ 4. **GC Loop Max 3**: Per-layer generator-executor rounds
129
+ 5. **Coverage Targets**: L1≥80%, L2≥60%, L3≥40%
130
+ 6. **Discovery Board Append-Only**
131
+ 7. **Cleanup Temp Files**: Both wave-N.csv and wave-N-results.csv
132
+ 8. **DO NOT STOP**: Continuous until complete
133
+ 9. **Role Files Authoritative**: Agents read roles/{role}/role.md
134
+ </invariants>
135
+
136
+ <state_machine>
137
+
138
+ <states>
139
+ S_PARSE — Parse arguments, detect mode
140
+ S_CSV_GEN — Generate tasks.csv
141
+ S_WAVE_{N} — Execute wave N
142
+ S_GC_CHECK — Coverage check after QARUN wave
143
+ S_AGGREGATE — Generate report
144
+ </states>
145
+
146
+ <transitions>
147
+ S_PARSE S_CSV_GEN
148
+ S_CSV_GEN S_WAVE_1
149
+ S_WAVE_{N} S_GC_CHECK WHEN: wave was QARUN
150
+ S_WAVE_{N} S_WAVE_{N+1} WHEN: not GC-eligible
151
+ S_GC_CHECK S_WAVE_{N+1} WHEN: coverage >= target (converged)
152
+ S_GC_CHECK → S_WAVE_{N+1} WHEN: coverage < target, gc_rounds < 3 (add QAGEN+QARUN rows)
153
+ S_GC_CHECK → S_WAVE_{N+1} WHEN: gc_rounds >= 3 (proceed with warning)
154
+ S_WAVE_{N} → S_AGGREGATE WHEN: last wave
155
+ </transitions>
156
+
157
+ <actions>
158
+
159
+ ### GC Loop
160
+
161
+ After each QARUN wave:
162
+ 1. Read `coverage_score` from results
163
+ 2. coverage >= target → continue
164
+ 3. coverage < target AND gc_rounds < 3 → add QAGEN+QARUN rows, increment wave, continue
165
+ 4. gc_rounds >= 3 → proceed with warning
166
+
167
+ ### Instruction Builder
168
+
169
+ ```
170
+ You are a team-quality-assurance agent.
171
+ Role: read 'role' column. Task: read 'description' column.
172
+
173
+ ## Role Definition
174
+ Read: {skillRoot}/roles/{role}/role.md
175
+
176
+ ## Context
177
+ Session: {sessionFolder}
178
+ Discovery board: {sessionFolder}/discoveries.ndjson
179
+ Previous context: 'prev_context' column
180
+
181
+ ## Output
182
+ result_status, findings, files_modified, coverage_score (QARUN only), error
183
+ ```
184
+
185
+ </actions>
186
+ </state_machine>
187
+
188
+ <error_codes>
189
+
190
+ | Condition | Recovery |
191
+ |-----------|----------|
192
+ | Scout found 0 issues | Skip to analyst, report clean |
193
+ | Coverage never converges | After 3 GC rounds, proceed with warning |
194
+ | Generator produces 0 tests | Mark blocked, skip executor |
195
+ </error_codes>
196
+
197
+ <success_criteria>
198
+ - [ ] Mode selected and CSV generated
199
+ - [ ] Waves executed via spawn_agents_on_csv
200
+ - [ ] GC loops converge or hit max 3
201
+ - [ ] Coverage tracked per layer
202
+ - [ ] Column separation maintained
203
+ - [ ] Temp files cleaned
204
+ - [ ] results.csv and context.md generated
205
+ </success_criteria>