popeye-cli 1.6.0 → 1.8.0

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 (161) hide show
  1. package/README.md +240 -32
  2. package/cheatsheet.md +407 -0
  3. package/dist/cli/commands/db.d.ts +10 -0
  4. package/dist/cli/commands/db.d.ts.map +1 -0
  5. package/dist/cli/commands/db.js +240 -0
  6. package/dist/cli/commands/db.js.map +1 -0
  7. package/dist/cli/commands/doctor.d.ts +18 -0
  8. package/dist/cli/commands/doctor.d.ts.map +1 -0
  9. package/dist/cli/commands/doctor.js +255 -0
  10. package/dist/cli/commands/doctor.js.map +1 -0
  11. package/dist/cli/commands/index.d.ts +2 -0
  12. package/dist/cli/commands/index.d.ts.map +1 -1
  13. package/dist/cli/commands/index.js +2 -0
  14. package/dist/cli/commands/index.js.map +1 -1
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +3 -1
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/interactive.d.ts.map +1 -1
  19. package/dist/cli/interactive.js +96 -0
  20. package/dist/cli/interactive.js.map +1 -1
  21. package/dist/generators/admin-wizard.d.ts +25 -0
  22. package/dist/generators/admin-wizard.d.ts.map +1 -0
  23. package/dist/generators/admin-wizard.js +123 -0
  24. package/dist/generators/admin-wizard.js.map +1 -0
  25. package/dist/generators/all.d.ts.map +1 -1
  26. package/dist/generators/all.js +10 -3
  27. package/dist/generators/all.js.map +1 -1
  28. package/dist/generators/database.d.ts +58 -0
  29. package/dist/generators/database.d.ts.map +1 -0
  30. package/dist/generators/database.js +229 -0
  31. package/dist/generators/database.js.map +1 -0
  32. package/dist/generators/fullstack.d.ts.map +1 -1
  33. package/dist/generators/fullstack.js +23 -7
  34. package/dist/generators/fullstack.js.map +1 -1
  35. package/dist/generators/index.d.ts +2 -0
  36. package/dist/generators/index.d.ts.map +1 -1
  37. package/dist/generators/index.js +2 -0
  38. package/dist/generators/index.js.map +1 -1
  39. package/dist/generators/templates/admin-wizard-python.d.ts +32 -0
  40. package/dist/generators/templates/admin-wizard-python.d.ts.map +1 -0
  41. package/dist/generators/templates/admin-wizard-python.js +425 -0
  42. package/dist/generators/templates/admin-wizard-python.js.map +1 -0
  43. package/dist/generators/templates/admin-wizard-react.d.ts +48 -0
  44. package/dist/generators/templates/admin-wizard-react.d.ts.map +1 -0
  45. package/dist/generators/templates/admin-wizard-react.js +554 -0
  46. package/dist/generators/templates/admin-wizard-react.js.map +1 -0
  47. package/dist/generators/templates/database-docker.d.ts +23 -0
  48. package/dist/generators/templates/database-docker.d.ts.map +1 -0
  49. package/dist/generators/templates/database-docker.js +221 -0
  50. package/dist/generators/templates/database-docker.js.map +1 -0
  51. package/dist/generators/templates/database-python.d.ts +54 -0
  52. package/dist/generators/templates/database-python.d.ts.map +1 -0
  53. package/dist/generators/templates/database-python.js +723 -0
  54. package/dist/generators/templates/database-python.js.map +1 -0
  55. package/dist/generators/templates/database-typescript.d.ts +34 -0
  56. package/dist/generators/templates/database-typescript.d.ts.map +1 -0
  57. package/dist/generators/templates/database-typescript.js +232 -0
  58. package/dist/generators/templates/database-typescript.js.map +1 -0
  59. package/dist/generators/templates/fullstack.d.ts.map +1 -1
  60. package/dist/generators/templates/fullstack.js +29 -0
  61. package/dist/generators/templates/fullstack.js.map +1 -1
  62. package/dist/generators/templates/index.d.ts +5 -0
  63. package/dist/generators/templates/index.d.ts.map +1 -1
  64. package/dist/generators/templates/index.js +5 -0
  65. package/dist/generators/templates/index.js.map +1 -1
  66. package/dist/state/index.d.ts +10 -0
  67. package/dist/state/index.d.ts.map +1 -1
  68. package/dist/state/index.js +22 -0
  69. package/dist/state/index.js.map +1 -1
  70. package/dist/types/consensus.d.ts +3 -0
  71. package/dist/types/consensus.d.ts.map +1 -1
  72. package/dist/types/consensus.js +1 -0
  73. package/dist/types/consensus.js.map +1 -1
  74. package/dist/types/database-runtime.d.ts +86 -0
  75. package/dist/types/database-runtime.d.ts.map +1 -0
  76. package/dist/types/database-runtime.js +61 -0
  77. package/dist/types/database-runtime.js.map +1 -0
  78. package/dist/types/database.d.ts +85 -0
  79. package/dist/types/database.d.ts.map +1 -0
  80. package/dist/types/database.js +71 -0
  81. package/dist/types/database.js.map +1 -0
  82. package/dist/types/index.d.ts +3 -0
  83. package/dist/types/index.d.ts.map +1 -1
  84. package/dist/types/index.js +6 -0
  85. package/dist/types/index.js.map +1 -1
  86. package/dist/types/tester.d.ts +138 -0
  87. package/dist/types/tester.d.ts.map +1 -0
  88. package/dist/types/tester.js +110 -0
  89. package/dist/types/tester.js.map +1 -0
  90. package/dist/types/workflow.d.ts +166 -0
  91. package/dist/types/workflow.d.ts.map +1 -1
  92. package/dist/types/workflow.js +14 -0
  93. package/dist/types/workflow.js.map +1 -1
  94. package/dist/workflow/db-setup-runner.d.ts +63 -0
  95. package/dist/workflow/db-setup-runner.d.ts.map +1 -0
  96. package/dist/workflow/db-setup-runner.js +336 -0
  97. package/dist/workflow/db-setup-runner.js.map +1 -0
  98. package/dist/workflow/db-state-machine.d.ts +30 -0
  99. package/dist/workflow/db-state-machine.d.ts.map +1 -0
  100. package/dist/workflow/db-state-machine.js +51 -0
  101. package/dist/workflow/db-state-machine.js.map +1 -0
  102. package/dist/workflow/execution-mode.js +2 -2
  103. package/dist/workflow/execution-mode.js.map +1 -1
  104. package/dist/workflow/index.d.ts +3 -0
  105. package/dist/workflow/index.d.ts.map +1 -1
  106. package/dist/workflow/index.js +3 -0
  107. package/dist/workflow/index.js.map +1 -1
  108. package/dist/workflow/task-workflow.d.ts +5 -0
  109. package/dist/workflow/task-workflow.d.ts.map +1 -1
  110. package/dist/workflow/task-workflow.js +172 -6
  111. package/dist/workflow/task-workflow.js.map +1 -1
  112. package/dist/workflow/tester.d.ts +120 -0
  113. package/dist/workflow/tester.d.ts.map +1 -0
  114. package/dist/workflow/tester.js +589 -0
  115. package/dist/workflow/tester.js.map +1 -0
  116. package/dist/workflow/workflow-logger.d.ts +1 -1
  117. package/dist/workflow/workflow-logger.d.ts.map +1 -1
  118. package/dist/workflow/workflow-logger.js.map +1 -1
  119. package/package.json +1 -1
  120. package/src/cli/commands/db.ts +281 -0
  121. package/src/cli/commands/doctor.ts +273 -0
  122. package/src/cli/commands/index.ts +2 -0
  123. package/src/cli/index.ts +4 -0
  124. package/src/cli/interactive.ts +102 -0
  125. package/src/generators/admin-wizard.ts +146 -0
  126. package/src/generators/all.ts +10 -3
  127. package/src/generators/database.ts +286 -0
  128. package/src/generators/fullstack.ts +26 -9
  129. package/src/generators/index.ts +12 -0
  130. package/src/generators/templates/admin-wizard-python.ts +431 -0
  131. package/src/generators/templates/admin-wizard-react.ts +560 -0
  132. package/src/generators/templates/database-docker.ts +227 -0
  133. package/src/generators/templates/database-python.ts +734 -0
  134. package/src/generators/templates/database-typescript.ts +238 -0
  135. package/src/generators/templates/fullstack.ts +29 -0
  136. package/src/generators/templates/index.ts +5 -0
  137. package/src/state/index.ts +29 -0
  138. package/src/types/consensus.ts +3 -0
  139. package/src/types/database-runtime.ts +69 -0
  140. package/src/types/database.ts +84 -0
  141. package/src/types/index.ts +50 -0
  142. package/src/types/tester.ts +136 -0
  143. package/src/types/workflow.ts +31 -0
  144. package/src/workflow/db-setup-runner.ts +391 -0
  145. package/src/workflow/db-state-machine.ts +58 -0
  146. package/src/workflow/execution-mode.ts +2 -2
  147. package/src/workflow/index.ts +3 -0
  148. package/src/workflow/task-workflow.ts +227 -5
  149. package/src/workflow/tester.ts +723 -0
  150. package/src/workflow/workflow-logger.ts +2 -0
  151. package/tests/generators/admin-wizard-orchestrator.test.ts +64 -0
  152. package/tests/generators/admin-wizard-templates.test.ts +366 -0
  153. package/tests/generators/cross-phase-integration.test.ts +383 -0
  154. package/tests/generators/database.test.ts +456 -0
  155. package/tests/generators/fe-be-db-integration.test.ts +613 -0
  156. package/tests/types/database-runtime.test.ts +158 -0
  157. package/tests/types/database.test.ts +187 -0
  158. package/tests/types/tester.test.ts +174 -0
  159. package/tests/workflow/db-setup-runner.test.ts +211 -0
  160. package/tests/workflow/db-state-machine.test.ts +117 -0
  161. package/tests/workflow/tester.test.ts +401 -0
@@ -0,0 +1,589 @@
1
+ /**
2
+ * Tester (QA) skill module
3
+ * Provides test planning, review, and fix plan capabilities.
4
+ * Provider-agnostic -- uses whichever AI provider is configured.
5
+ */
6
+ import { promises as fs } from 'node:fs';
7
+ import path from 'node:path';
8
+ import { isWorkspace } from '../types/project.js';
9
+ import { createPlan as claudeCreatePlan } from '../adapters/claude.js';
10
+ import { runOptimizedConsensusProcess, iterateUntilConsensus } from './consensus.js';
11
+ // ============================================================================
12
+ // Command Discovery
13
+ // ============================================================================
14
+ /**
15
+ * Inspect the project directory to discover available test/lint/build commands.
16
+ * Checks package.json scripts, pyproject.toml, Makefile, and common config files.
17
+ *
18
+ * @param projectDir - Root of the project
19
+ * @param language - Project language
20
+ * @returns Discovered command references
21
+ */
22
+ export async function discoverTestCommands(projectDir, language) {
23
+ const result = {
24
+ testCmd: null,
25
+ lintCmd: null,
26
+ buildCmd: null,
27
+ typecheckCmd: null,
28
+ };
29
+ // Check package.json for JS/TS projects
30
+ const pkgPath = path.join(projectDir, 'package.json');
31
+ try {
32
+ const raw = await fs.readFile(pkgPath, 'utf-8');
33
+ const pkg = JSON.parse(raw);
34
+ const scripts = pkg.scripts || {};
35
+ if (scripts.test)
36
+ result.testCmd = 'npm test';
37
+ if (scripts.lint)
38
+ result.lintCmd = 'npm run lint';
39
+ if (scripts.build)
40
+ result.buildCmd = 'npm run build';
41
+ if (scripts.typecheck || scripts['type-check']) {
42
+ result.typecheckCmd = scripts.typecheck ? 'npm run typecheck' : 'npm run type-check';
43
+ }
44
+ }
45
+ catch {
46
+ // No package.json or invalid JSON -- not a JS project at root
47
+ }
48
+ // Check pyproject.toml for Python projects
49
+ const pyprojectPath = path.join(projectDir, 'pyproject.toml');
50
+ try {
51
+ const raw = await fs.readFile(pyprojectPath, 'utf-8');
52
+ if (raw.includes('[tool.pytest'))
53
+ result.testCmd = result.testCmd || 'pytest';
54
+ if (raw.includes('ruff') || raw.includes('flake8'))
55
+ result.lintCmd = result.lintCmd || 'ruff check .';
56
+ if (raw.includes('mypy'))
57
+ result.typecheckCmd = result.typecheckCmd || 'mypy .';
58
+ }
59
+ catch {
60
+ // No pyproject.toml
61
+ }
62
+ // Check Makefile for any project
63
+ const makefilePath = path.join(projectDir, 'Makefile');
64
+ try {
65
+ const raw = await fs.readFile(makefilePath, 'utf-8');
66
+ if (!result.testCmd && /^test:/m.test(raw))
67
+ result.testCmd = 'make test';
68
+ if (!result.lintCmd && /^lint:/m.test(raw))
69
+ result.lintCmd = 'make lint';
70
+ if (!result.buildCmd && /^build:/m.test(raw))
71
+ result.buildCmd = 'make build';
72
+ }
73
+ catch {
74
+ // No Makefile
75
+ }
76
+ // Fallback defaults by language
77
+ if (!result.testCmd) {
78
+ if (language === 'python')
79
+ result.testCmd = 'pytest';
80
+ if (language === 'typescript')
81
+ result.testCmd = 'npx vitest run';
82
+ }
83
+ if (!result.lintCmd) {
84
+ if (language === 'python')
85
+ result.lintCmd = 'ruff check .';
86
+ if (language === 'typescript')
87
+ result.lintCmd = 'npx eslint .';
88
+ }
89
+ if (!result.buildCmd) {
90
+ if (language === 'typescript')
91
+ result.buildCmd = 'npm run build';
92
+ }
93
+ return result;
94
+ }
95
+ // ============================================================================
96
+ // Component Playbooks
97
+ // ============================================================================
98
+ /**
99
+ * Return language-specific testing guidance for the Tester persona.
100
+ *
101
+ * @param language - Project output language
102
+ * @returns Playbook text to embed in the Tester prompt
103
+ */
104
+ export function getComponentPlaybook(language) {
105
+ const pythonPlaybook = `
106
+ ### Python Testing Playbook
107
+ - Use pytest with fixtures and conftest.py for shared setup
108
+ - Use FastAPI TestClient for API endpoint testing
109
+ - Use unittest.mock / pytest-mock for mocking external dependencies
110
+ - Structure: tests/ mirroring src/ with test_ prefix per file
111
+ - Coverage: pytest --cov for coverage reports
112
+ - Async tests: use pytest-asyncio for async function testing
113
+ `.trim();
114
+ const tsPlaybook = `
115
+ ### TypeScript Testing Playbook
116
+ - Use Vitest or Jest as the test runner
117
+ - Use React Testing Library for component testing
118
+ - Use MSW (Mock Service Worker) for API mocking
119
+ - Structure: tests/ or __tests__/ directories alongside source
120
+ - Type checking: tsc --noEmit for compile-time validation
121
+ - Coverage: vitest run --coverage or jest --coverage
122
+ `.trim();
123
+ const websitePlaybook = `
124
+ ### Website Testing Playbook
125
+ - Use Next.js test utilities for page/component testing
126
+ - Use axe-core or @axe-core/react for accessibility testing
127
+ - Verify SEO meta tags with custom assertions (title, description, OG tags)
128
+ - Test responsive layouts with viewport size assertions
129
+ - Lighthouse CI for performance regression testing
130
+ `.trim();
131
+ if (language === 'python')
132
+ return pythonPlaybook;
133
+ if (language === 'typescript')
134
+ return tsPlaybook;
135
+ if (language === 'website')
136
+ return `${tsPlaybook}\n\n${websitePlaybook}`;
137
+ if (isWorkspace(language)) {
138
+ return `${pythonPlaybook}\n\n${tsPlaybook}\n\n${websitePlaybook}\n\n### API Contract Testing\n- Validate frontend API calls match backend endpoint schemas\n- Use shared type definitions or OpenAPI specs for contract alignment`;
139
+ }
140
+ // Default fallback
141
+ return pythonPlaybook;
142
+ }
143
+ // ============================================================================
144
+ // Prompt Builders
145
+ // ============================================================================
146
+ /**
147
+ * Build the prompt for the Tester to create a TestPlan.
148
+ * Provider-agnostic -- refers to "the Tester", not any specific AI.
149
+ */
150
+ export function buildTestPlanPrompt(task, milestone, state, approvedCodePlan, discoveredCommands) {
151
+ const playbook = getComponentPlaybook(state.language);
152
+ const completedTasks = milestone.tasks
153
+ .filter(t => t.status === 'complete')
154
+ .map(t => `- ${t.name}`)
155
+ .join('\n') || 'None yet';
156
+ const cmdSummary = [
157
+ discoveredCommands.testCmd ? `Test: ${discoveredCommands.testCmd}` : null,
158
+ discoveredCommands.lintCmd ? `Lint: ${discoveredCommands.lintCmd}` : null,
159
+ discoveredCommands.buildCmd ? `Build: ${discoveredCommands.buildCmd}` : null,
160
+ discoveredCommands.typecheckCmd ? `Typecheck: ${discoveredCommands.typecheckCmd}` : null,
161
+ ].filter(Boolean).join('\n');
162
+ return `
163
+ You are the Tester -- a dedicated QA engineer responsible for designing a comprehensive test plan.
164
+ Your job is to ensure code quality, catch regressions, and verify that the implementation meets its requirements.
165
+
166
+ ## Project Context
167
+ Project: ${state.name}
168
+ Language: ${state.language}
169
+
170
+ ## Milestone: ${milestone.name}
171
+ ${milestone.description}
172
+
173
+ ## Completed Tasks
174
+ ${completedTasks}
175
+
176
+ ## Task Under Test
177
+ **${task.name}**
178
+ ${task.description}
179
+
180
+ ## Approved Code Plan (read-only context -- DO NOT modify this)
181
+ ${approvedCodePlan}
182
+
183
+ ## Discovered Test Infrastructure
184
+ ${cmdSummary || 'No test commands discovered -- the Tester should specify commands explicitly.'}
185
+
186
+ ${playbook}
187
+
188
+ ## Instructions
189
+ Based on the approved code plan above, design a structured test plan. Output valid JSON matching this schema:
190
+
191
+ \`\`\`json
192
+ {
193
+ "summary": "What risks this plan targets",
194
+ "scope": ["frontend" | "backend" | "db" | "infra"],
195
+ "testMatrix": [
196
+ {
197
+ "id": "TC-1",
198
+ "category": "unit | integration | e2e | smoke | lint | build",
199
+ "description": "What is being tested",
200
+ "acceptanceCriteria": "What must be true to pass",
201
+ "evidenceRequired": "What output/log proves it passed",
202
+ "priority": "critical | high | medium | low"
203
+ }
204
+ ],
205
+ "commands": [
206
+ {
207
+ "command": "exact shell command",
208
+ "cwd": "optional relative path",
209
+ "purpose": "why this command is needed",
210
+ "required": true
211
+ }
212
+ ],
213
+ "riskFocus": ["top risks being tested"],
214
+ "evidenceRequired": ["logs/reports to capture"],
215
+ "minimumVerification": ["build check", "lint check", "smoke test"]
216
+ }
217
+ \`\`\`
218
+
219
+ Rules:
220
+ - Always include minimumVerification (build, lint, basic smoke test)
221
+ - Commands must be concrete and executable (no placeholders)
222
+ - Each test case needs clear acceptance criteria
223
+ - Focus on risks introduced by the code plan, not general testing
224
+ - If no custom tests are needed beyond minimum verification, include "noTestsRationale" explaining why
225
+ `.trim();
226
+ }
227
+ /**
228
+ * Build the prompt for the Tester to review test execution results.
229
+ * Provider-agnostic.
230
+ */
231
+ export function buildTestRunReviewPrompt(task, approvedTestPlan, testResult, state) {
232
+ const output = testResult.output.slice(0, 5000);
233
+ const failedTests = testResult.failedTests?.map(t => `- ${t}`).join('\n') || 'None';
234
+ return `
235
+ You are the Tester -- a dedicated QA engineer reviewing the test execution results.
236
+ ONLY the Tester decides whether tests pass or fail. The coder cannot override this verdict.
237
+
238
+ ## Project Context
239
+ Project: ${state.name}
240
+ Language: ${state.language}
241
+
242
+ ## Task: ${task.name}
243
+ ${task.description}
244
+
245
+ ## Approved Test Plan
246
+ ${approvedTestPlan}
247
+
248
+ ## Test Execution Results
249
+ - Success: ${testResult.success}
250
+ - Total: ${testResult.total}
251
+ - Passed: ${testResult.passed}
252
+ - Failed: ${testResult.failed}
253
+
254
+ ### Failed Tests
255
+ ${failedTests}
256
+
257
+ ### Output (truncated to 5000 chars)
258
+ \`\`\`
259
+ ${output}
260
+ \`\`\`
261
+
262
+ ## Instructions
263
+ Review the test results against the approved test plan's acceptance criteria.
264
+ Output valid JSON matching this schema:
265
+
266
+ \`\`\`json
267
+ {
268
+ "verdict": "PASS | PASS_WITH_NOTES | FAIL",
269
+ "summary": "Brief summary of the review",
270
+ "evidenceReviewed": ["list of evidence checked"],
271
+ "failures": ["specific failures found, empty if PASS"],
272
+ "gaps": ["missing evidence or coverage gaps"],
273
+ "recommendations": ["suggestions for improvement"],
274
+ "requiresConsensus": false
275
+ }
276
+ \`\`\`
277
+
278
+ Rules:
279
+ - PASS: All critical and high-priority acceptance criteria met, evidence present
280
+ - PASS_WITH_NOTES: Criteria met but with caveats or minor gaps (recommendations logged)
281
+ - FAIL: Any critical acceptance criteria not met, or required commands failed
282
+ - Set requiresConsensus to true ONLY when verdict is FAIL
283
+ - Be specific about which acceptance criteria passed/failed
284
+ `.trim();
285
+ }
286
+ /**
287
+ * Build the prompt for the Tester to create a fix plan after test failures.
288
+ * Provider-agnostic.
289
+ */
290
+ export function buildTestFixPlanPrompt(task, approvedTestPlan, testResult, review, state) {
291
+ const output = testResult.output.slice(0, 4000);
292
+ const isCrash = testResult.passed === 0 && testResult.failed > 20;
293
+ return `
294
+ You are the Tester -- a dedicated QA engineer creating a fix plan for test failures.
295
+ Your root cause analysis guides the coder's fix implementation.
296
+
297
+ ## Project Context
298
+ Project: ${state.name}
299
+ Language: ${state.language}
300
+
301
+ ## Task: ${task.name}
302
+ ${task.description}
303
+
304
+ ## Approved Test Plan
305
+ ${approvedTestPlan}
306
+
307
+ ## Tester's Review
308
+ Verdict: ${review.verdict}
309
+ Summary: ${review.summary}
310
+ Failures: ${review.failures.join('; ')}
311
+
312
+ ## Test Output
313
+ \`\`\`
314
+ ${output}
315
+ \`\`\`
316
+
317
+ ${isCrash ? '**WARNING: This appears to be a test runner crash (0 passed), not individual test failures. Focus on the root import/syntax/config error.**\n' : ''}
318
+
319
+ ## Instructions
320
+ Create a fix plan. Output valid JSON matching this schema:
321
+
322
+ \`\`\`json
323
+ {
324
+ "failedCriteria": ["which acceptance criteria failed"],
325
+ "rootCauseAnalysis": "detailed root cause analysis",
326
+ "fixSteps": [
327
+ { "file": "path/to/file", "change": "what to change", "reason": "why" }
328
+ ],
329
+ "regressionRisks": ["risks of introducing new bugs"],
330
+ "retestStrategy": "how to verify the fix"
331
+ }
332
+ \`\`\`
333
+
334
+ Rules:
335
+ - Identify the root cause, not just symptoms
336
+ - Fix steps should be minimal and focused
337
+ - Consider regression risks for each change
338
+ - Retest strategy must reference the original acceptance criteria
339
+ `.trim();
340
+ }
341
+ /**
342
+ * Run the test planning phase: discover commands -> create test plan -> consensus.
343
+ *
344
+ * @param task - The task to plan tests for
345
+ * @param milestone - Parent milestone
346
+ * @param state - Current project state
347
+ * @param approvedCodePlan - The consensus-approved code plan
348
+ * @param options - Workflow options (projectDir, consensusConfig, onProgress)
349
+ * @returns Test plan result with consensus outcome
350
+ */
351
+ export async function runTestPlanningPhase(task, milestone, state, approvedCodePlan, options) {
352
+ const { projectDir, consensusConfig, onProgress } = options;
353
+ // Step 1: Discover test infrastructure
354
+ onProgress?.('test-planning', 'Discovering test infrastructure...');
355
+ const discoveredCommands = await discoverTestCommands(projectDir, state.language);
356
+ // Step 2: Build the test plan prompt
357
+ const testPlanPrompt = buildTestPlanPrompt(task, milestone, state, approvedCodePlan, discoveredCommands);
358
+ // Step 3: Generate test plan via AI (provider-agnostic)
359
+ onProgress?.('test-planning', 'Tester is designing the test plan...');
360
+ const planResult = await claudeCreatePlan(testPlanPrompt, `Project: ${state.name}\nLanguage: ${state.language}`, state.language, (msg) => onProgress?.('test-planning', msg));
361
+ if (!planResult.success) {
362
+ return {
363
+ testPlanText: '',
364
+ testPlanParsed: null,
365
+ consensusResult: {
366
+ approved: false, finalPlan: '', finalScore: 0, bestPlan: '', bestScore: 0,
367
+ bestIteration: 0, totalIterations: 0, iterations: [], finalConcerns: [],
368
+ finalRecommendations: [], arbitrated: false,
369
+ },
370
+ error: `Tester failed to create test plan: ${planResult.error}`,
371
+ };
372
+ }
373
+ const testPlanText = planResult.response;
374
+ // Step 4: Parse structured test plan (best-effort)
375
+ let testPlanParsed = null;
376
+ try {
377
+ const jsonMatch = testPlanText.match(/```json\s*([\s\S]*?)```/) ||
378
+ testPlanText.match(/\{[\s\S]*"summary"[\s\S]*\}/);
379
+ if (jsonMatch) {
380
+ const raw = jsonMatch[1] || jsonMatch[0];
381
+ testPlanParsed = JSON.parse(raw);
382
+ }
383
+ }
384
+ catch {
385
+ // Structured parsing failed -- plan text still usable for consensus
386
+ onProgress?.('test-planning', 'Could not parse structured test plan; using text-based plan for consensus.');
387
+ }
388
+ // Step 5: Submit for consensus with BOTH code plan and test plan as context
389
+ onProgress?.('test-planning', 'Submitting test plan for consensus review...');
390
+ const combinedPlanForConsensus = `## Approved Code Plan (read-only, for reviewer context)\n${approvedCodePlan}\n\n## Proposed Test Plan (subject to consensus review)\n${testPlanText}`;
391
+ const consensusContext = `Project: ${state.name}\nLanguage: ${state.language}\nMilestone: ${milestone.name}\nTask: ${task.name}\nPhase: Test Plan Review`;
392
+ // Use configurable threshold (default 90 for test plans, lower than code plans)
393
+ const testPlanThreshold = consensusConfig?.testPlanThreshold ?? 90;
394
+ const testPlanConfig = {
395
+ ...consensusConfig,
396
+ threshold: testPlanThreshold,
397
+ };
398
+ const useOptimized = consensusConfig?.useOptimizedConsensus !== false;
399
+ let consensusResult;
400
+ if (useOptimized) {
401
+ consensusResult = await runOptimizedConsensusProcess(combinedPlanForConsensus, consensusContext, {
402
+ projectDir,
403
+ config: testPlanConfig,
404
+ milestoneId: milestone.id,
405
+ milestoneName: milestone.name,
406
+ taskId: task.id,
407
+ taskName: `${task.name} - Test Plan`,
408
+ parallelReviews: true,
409
+ isFullstack: isWorkspace(state.language),
410
+ onIteration: (iteration, result) => {
411
+ onProgress?.('test-planning', `Test plan consensus iteration ${iteration}: ${result.score}%`);
412
+ },
413
+ onProgress,
414
+ });
415
+ }
416
+ else {
417
+ consensusResult = await iterateUntilConsensus(combinedPlanForConsensus, consensusContext, {
418
+ projectDir,
419
+ config: testPlanConfig,
420
+ isFullstack: isWorkspace(state.language),
421
+ language: state.language,
422
+ onIteration: (iteration, result) => {
423
+ onProgress?.('test-planning', `Test plan consensus iteration ${iteration}: ${result.score}%`);
424
+ },
425
+ onProgress,
426
+ });
427
+ }
428
+ return { testPlanText, testPlanParsed, consensusResult };
429
+ }
430
+ /**
431
+ * Run the test review phase: AI reviews test results and issues a verdict.
432
+ * ONLY the Tester decides PASS/FAIL -- the coder cannot bypass this.
433
+ *
434
+ * @param task - The task whose tests were run
435
+ * @param approvedTestPlan - The approved test plan text
436
+ * @param testResult - Test execution results
437
+ * @param state - Current project state
438
+ * @param onProgress - Progress callback
439
+ * @returns Structured TestRunReview
440
+ */
441
+ export async function runTestReviewPhase(task, approvedTestPlan, testResult, state, onProgress) {
442
+ onProgress?.('test-review', 'Tester is reviewing test results...');
443
+ const reviewPrompt = buildTestRunReviewPrompt(task, approvedTestPlan, testResult, state);
444
+ const result = await claudeCreatePlan(reviewPrompt, `Project: ${state.name}\nLanguage: ${state.language}`, state.language, (msg) => onProgress?.('test-review', msg));
445
+ if (!result.success) {
446
+ // If AI fails, default to a conservative review based on raw results
447
+ return {
448
+ verdict: testResult.success ? 'PASS_WITH_NOTES' : 'FAIL',
449
+ summary: result.error || 'Tester review unavailable; falling back to raw test results.',
450
+ evidenceReviewed: ['raw test output'],
451
+ failures: testResult.success ? [] : [`${testResult.failed} test(s) failed`],
452
+ gaps: ['Full tester review could not be generated'],
453
+ recommendations: [],
454
+ requiresConsensus: !testResult.success,
455
+ };
456
+ }
457
+ // Parse the structured review
458
+ try {
459
+ const jsonMatch = result.response.match(/```json\s*([\s\S]*?)```/) ||
460
+ result.response.match(/\{[\s\S]*"verdict"[\s\S]*\}/);
461
+ if (jsonMatch) {
462
+ const raw = jsonMatch[1] || jsonMatch[0];
463
+ return JSON.parse(raw);
464
+ }
465
+ }
466
+ catch {
467
+ // Parse failed -- construct from text
468
+ }
469
+ // Fallback: construct review from raw AI response
470
+ return {
471
+ verdict: testResult.success ? 'PASS_WITH_NOTES' : 'FAIL',
472
+ summary: result.response.slice(0, 500),
473
+ evidenceReviewed: ['test output', 'AI review response'],
474
+ failures: testResult.success ? [] : [`${testResult.failed} test(s) failed`],
475
+ gaps: ['Structured review could not be parsed'],
476
+ recommendations: [],
477
+ requiresConsensus: !testResult.success,
478
+ };
479
+ }
480
+ /**
481
+ * Create a fix plan from the Tester when tests fail.
482
+ *
483
+ * @param task - The task whose tests failed
484
+ * @param approvedTestPlan - The approved test plan text
485
+ * @param testResult - Test execution results
486
+ * @param review - The Tester's review with verdict
487
+ * @param state - Current project state
488
+ * @param onProgress - Progress callback
489
+ * @returns Fix plan text for consensus review
490
+ */
491
+ export async function createTesterFixPlan(task, approvedTestPlan, testResult, review, state, onProgress) {
492
+ onProgress?.('test-review', 'Tester is creating a fix plan...');
493
+ const fixPrompt = buildTestFixPlanPrompt(task, approvedTestPlan, testResult, review, state);
494
+ const result = await claudeCreatePlan(fixPrompt, `Project: ${state.name}\nLanguage: ${state.language}`, state.language, (msg) => onProgress?.('test-review', msg));
495
+ if (!result.success) {
496
+ return `## Tester Fix Plan (auto-generated fallback)\n\nThe Tester could not generate a structured fix plan.\n\nReview summary: ${review.summary}\nFailures: ${review.failures.join('; ')}\n\nPlease address the test failures listed above.`;
497
+ }
498
+ return result.response;
499
+ }
500
+ // ============================================================================
501
+ // Documentation
502
+ // ============================================================================
503
+ /**
504
+ * Document an approved test plan to docs/qa/test-plans/
505
+ *
506
+ * @param projectDir - Project root
507
+ * @param milestone - Parent milestone
508
+ * @param task - The task
509
+ * @param testPlan - Test plan text
510
+ * @param consensusResult - Consensus outcome
511
+ * @returns Relative path to the doc
512
+ */
513
+ export async function documentTestPlan(projectDir, milestone, task, testPlan, consensusResult) {
514
+ const docsDir = path.join(projectDir, 'docs', 'qa', 'test-plans');
515
+ await fs.mkdir(docsDir, { recursive: true });
516
+ const milestoneNum = milestone.id.replace('milestone-', '');
517
+ const taskNum = task.id.split('-task-')[1] || '1';
518
+ const filename = `milestone_${milestoneNum}_task_${taskNum}.md`;
519
+ const docPath = path.join(docsDir, filename);
520
+ const content = `# QA Test Plan: ${task.name}
521
+
522
+ ## Metadata
523
+ - **Milestone**: ${milestone.name}
524
+ - **Task ID**: ${task.id}
525
+ - **Consensus Score**: ${consensusResult.finalScore}%
526
+ - **Iterations**: ${consensusResult.totalIterations}
527
+ - **Status**: ${consensusResult.approved ? 'APPROVED' : 'NOT APPROVED'}
528
+ - **Generated**: ${new Date().toISOString()}
529
+
530
+ ## Task Description
531
+ ${task.description}
532
+
533
+ ## Test Plan
534
+ ${testPlan}
535
+
536
+ ${consensusResult.finalConcerns.length > 0 ? `## Review Notes\n${consensusResult.finalConcerns.map(c => `- ${c}`).join('\n')}\n` : ''}
537
+ `;
538
+ await fs.writeFile(docPath, content, 'utf-8');
539
+ return `docs/qa/test-plans/${filename}`;
540
+ }
541
+ /**
542
+ * Document a test run review to docs/qa/test-runs/
543
+ *
544
+ * @param projectDir - Project root
545
+ * @param milestone - Parent milestone
546
+ * @param task - The task
547
+ * @param review - Tester's review
548
+ * @returns Relative path to the doc
549
+ */
550
+ export async function documentTestReview(projectDir, milestone, task, review) {
551
+ const docsDir = path.join(projectDir, 'docs', 'qa', 'test-runs');
552
+ await fs.mkdir(docsDir, { recursive: true });
553
+ const milestoneNum = milestone.id.replace('milestone-', '');
554
+ const taskNum = task.id.split('-task-')[1] || '1';
555
+ const filename = `milestone_${milestoneNum}_task_${taskNum}.md`;
556
+ const docPath = path.join(docsDir, filename);
557
+ const content = `# QA Test Review: ${task.name}
558
+
559
+ ## Verdict: ${review.verdict}
560
+
561
+ ## Summary
562
+ ${review.summary}
563
+
564
+ ## Evidence Reviewed
565
+ ${review.evidenceReviewed.map(e => `- ${e}`).join('\n')}
566
+
567
+ ${review.failures.length > 0 ? `## Failures\n${review.failures.map(f => `- ${f}`).join('\n')}\n` : ''}
568
+ ${review.gaps.length > 0 ? `## Gaps\n${review.gaps.map(g => `- ${g}`).join('\n')}\n` : ''}
569
+ ${review.recommendations.length > 0 ? `## Recommendations\n${review.recommendations.map(r => `- ${r}`).join('\n')}\n` : ''}
570
+
571
+ - **Generated**: ${new Date().toISOString()}
572
+ `;
573
+ await fs.writeFile(docPath, content, 'utf-8');
574
+ return `docs/qa/test-runs/${filename}`;
575
+ }
576
+ // ============================================================================
577
+ // Helpers
578
+ // ============================================================================
579
+ /**
580
+ * Check whether QA is enabled for the given project state.
581
+ * Defaults to false for existing projects (undefined), true only when explicitly set.
582
+ *
583
+ * @param state - Current project state
584
+ * @returns Whether the QA Tester skill is active
585
+ */
586
+ export function isQaEnabled(state) {
587
+ return state.qaEnabled === true;
588
+ }
589
+ //# sourceMappingURL=tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tester.js","sourceRoot":"","sources":["../../src/workflow/tester.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export type LogLevel = 'info' | 'warn' | 'error' | 'success' | 'debug';
20
20
  /**
21
21
  * Workflow stages for categorization
22
22
  */
23
- export type WorkflowStage = 'init' | 'plan-generation' | 'plan-parsing' | 'consensus' | 'arbitration' | 'execution' | 'task' | 'milestone' | 'testing' | 'verification' | 'ui-design' | 'ui-setup' | 'website-strategy' | 'completion';
23
+ export type WorkflowStage = 'init' | 'plan-generation' | 'plan-parsing' | 'consensus' | 'arbitration' | 'execution' | 'task' | 'milestone' | 'testing' | 'verification' | 'ui-design' | 'ui-setup' | 'website-strategy' | 'test-planning' | 'test-review' | 'completion';
24
24
  /**
25
25
  * Workflow logger class that persists logs to the project's docs folder
26
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-logger.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-logger.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,iBAAiB,GACjB,cAAc,GACd,WAAW,GACX,aAAa,GACb,WAAW,GACX,MAAM,GACN,WAAW,GACX,SAAS,GACT,cAAc,GACd,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,eAAe,GACf,aAAa,GACb,YAAY,CAAC;AAEjB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,WAAW,CAAkB;gBAEzB,UAAU,EAAE,MAAM;IAK9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;OAEG;IACG,GAAG,CACP,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,GAAE,QAAiB,GACvB,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/G;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/G;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhH;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlH;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1G;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7G;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1H;;OAEG;YACW,OAAO;IASrB;;OAEG;IACH,OAAO,CAAC,cAAc;IA6DtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,UAAU,IAAI,QAAQ,EAAE;IAIxB;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE;IAIpD;;OAEG;IACH,SAAS,IAAI,QAAQ,EAAE;IAIvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAQpE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,GAAE,QAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAGf"}