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