projecta-rrr 1.16.3 → 1.16.5
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/CHANGELOG.md +19 -0
- package/commands/rrr/verify-work.md +11 -2
- package/package.json +1 -1
- package/rrr/workflows/verify-work.md +287 -32
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@ All notable changes to RRR will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
|
|
7
|
+
## [1.16.5] - 2026-01-27
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- **Verify-Work UAT Workflow Path** - Fixed workflow file loading for UAT mode:
|
|
11
|
+
- Changed from relative path (`rrr/workflows/verify-work.md`) to `@` reference (`@rrr/workflows/verify-work.md`)
|
|
12
|
+
- Workflow now loads correctly from RRR framework (`~/.claude/rrr/workflows/verify-work.md`)
|
|
13
|
+
- **Milestone-Level UAT Support** - Added comprehensive milestone support:
|
|
14
|
+
- Detects milestone targets (`v1.2`, `v2.0`) and finds all phases in that milestone
|
|
15
|
+
- Creates UAT file at `.planning/milestones/{milestone}/phases/{milestone}-UAT.md`
|
|
16
|
+
- Updates frontmatter with `target_type` (phase/milestone) and `target`
|
|
17
|
+
- Fixed commit message generation for milestone-level UAT
|
|
18
|
+
- **PHASE_ARG Variable Propagation** - Added export of `PHASE_ARG` for workflow consumption
|
|
19
|
+
- **SUMMARY Path Detection** - Fixed test type detection to search both old and new directory structures
|
|
20
|
+
- **UAT File Discovery** - Updated active session detection to search `.planning/` recursively for both phase and milestone UAT files
|
|
21
|
+
|
|
22
|
+
## [1.16.4] - 2026-01-27
|
|
23
|
+
- `playwright` → run_playwright_batch
|
|
24
|
+
- `manual` → present_test
|
|
25
|
+
|
|
7
26
|
## [1.16.3] - 2026-01-27
|
|
8
27
|
|
|
9
28
|
### Changed
|
|
@@ -86,6 +86,14 @@ Validate built features through **audit mode by default**, or interactive UAT wi
|
|
|
86
86
|
hasAuditFlag = $ARGUMENTS contains "--audit"
|
|
87
87
|
hasUatFlag = $ARGUMENTS contains "--uat"
|
|
88
88
|
target = $ARGUMENTS with flags removed (e.g., "05", "v1.9", or empty)
|
|
89
|
+
|
|
90
|
+
# Set PHASE_ARG for workflow consumption (UAT mode needs this)
|
|
91
|
+
if [ -n "$target" ]; then
|
|
92
|
+
PHASE_ARG="$target"
|
|
93
|
+
else
|
|
94
|
+
PHASE_ARG=""
|
|
95
|
+
fi
|
|
96
|
+
export PHASE_ARG
|
|
89
97
|
```
|
|
90
98
|
|
|
91
99
|
**Step 2: Route and explain selection**
|
|
@@ -98,6 +106,7 @@ target = $ARGUMENTS with flags removed (e.g., "05", "v1.9", or empty)
|
|
|
98
106
|
**If --uat is present:**
|
|
99
107
|
1. Execute the `<uat_mode>` section below
|
|
100
108
|
2. This loads the workflow file which runs component tests then UAT
|
|
109
|
+
3. The workflow uses `$PHASE_ARG` to find summaries
|
|
101
110
|
|
|
102
111
|
**If --audit is present OR no flags:**
|
|
103
112
|
1. Execute the `<audit_mode>` section below (DEFAULT)
|
|
@@ -331,9 +340,9 @@ Purpose: Component tests → Zeroshot/Manual user acceptance testing
|
|
|
331
340
|
For quick evidence check, use: /rrr:verify-work --audit
|
|
332
341
|
```
|
|
333
342
|
|
|
334
|
-
**Load the workflow
|
|
343
|
+
**Load the UAT workflow:**
|
|
335
344
|
|
|
336
|
-
|
|
345
|
+
@rrr/workflows/verify-work.md
|
|
337
346
|
|
|
338
347
|
The workflow contains the full UAT process including:
|
|
339
348
|
1. **Component tests** — Runs vitest --browser if configured
|
package/package.json
CHANGED
|
@@ -179,31 +179,123 @@ Check if zeroshot validation is available:
|
|
|
179
179
|
|
|
180
180
|
**If ZEROSHOT_AVAILABLE and MODULE_EXISTS:**
|
|
181
181
|
|
|
182
|
-
Check for Playwright MCP availability:
|
|
182
|
+
Check for Playwright MCP availability (multiple detection methods):
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Enhanced Playwright MCP detection - checks multiple locations
|
|
186
|
+
PLAYWRIGHT_STATUS="NO_PLAYWRIGHT_MCP"
|
|
187
|
+
|
|
188
|
+
# Method 1: Check ~/.claude/mcp.json
|
|
189
|
+
if [ -f "$HOME/.claude/mcp.json" ]; then
|
|
190
|
+
if grep -qi "playwright" "$HOME/.claude/mcp.json" 2>/dev/null; then
|
|
191
|
+
PLAYWRIGHT_STATUS="PLAYWRIGHT_MCP_AVAILABLE"
|
|
192
|
+
fi
|
|
193
|
+
fi
|
|
194
|
+
|
|
195
|
+
# Method 2: Check ~/.claude/settings.json (alternate location)
|
|
196
|
+
if [ "$PLAYWRIGHT_STATUS" = "NO_PLAYWRIGHT_MCP" ] && [ -f "$HOME/.claude/settings.json" ]; then
|
|
197
|
+
if grep -qi "playwright" "$HOME/.claude/settings.json" 2>/dev/null; then
|
|
198
|
+
PLAYWRIGHT_STATUS="PLAYWRIGHT_MCP_AVAILABLE"
|
|
199
|
+
fi
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# Method 3: Check if playwright-mcp command exists
|
|
203
|
+
if [ "$PLAYWRIGHT_STATUS" = "NO_PLAYWRIGHT_MCP" ]; then
|
|
204
|
+
if command -v playwright-mcp >/dev/null 2>&1; then
|
|
205
|
+
PLAYWRIGHT_STATUS="PLAYWRIGHT_MCP_AVAILABLE"
|
|
206
|
+
fi
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
# Method 4: Check MCP servers via ps or other running processes
|
|
210
|
+
if [ "$PLAYWRIGHT_STATUS" = "NO_PLAYWRIGHT_MCP" ]; then
|
|
211
|
+
if ps aux 2>/dev/null | grep -qi "[p]laywright-mcp"; then
|
|
212
|
+
PLAYWRIGHT_STATUS="PLAYWRIGHT_MCP_AVAILABLE"
|
|
213
|
+
fi
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
echo "$PLAYWRIGHT_STATUS"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Check for MiniMax API key (enables AI visual validation):
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
[ -n "$MINIMAX_API_KEY" ] && echo "MINIMAX_AVAILABLE" || echo "NO_MINIMAX"
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Determine Recommended Mode:**
|
|
226
|
+
|
|
227
|
+
Based on what's available, calculate the recommended mode:
|
|
228
|
+
|
|
229
|
+
| Available | Recommended Mode | Why |
|
|
230
|
+
|-----------|-----------------|-----|
|
|
231
|
+
| Playwright MCP + MiniMax | AI QA Engineer | Best for web UI - browser control + visual validation |
|
|
232
|
+
| MiniMax only | Zeroshot (Screenshot) | Fast, cheap visual validation |
|
|
233
|
+
| Anthropic API only | Zeroshot (Screenshot) | Uses Claude vision |
|
|
234
|
+
| No API keys | Manual | User testing required |
|
|
235
|
+
|
|
236
|
+
**Auto-detect test type from SUMMARY.md:**
|
|
237
|
+
|
|
183
238
|
```bash
|
|
184
|
-
# Check
|
|
185
|
-
|
|
239
|
+
# Check SUMMARY.md content to determine test type
|
|
240
|
+
# Search in both old (.planning/phases/*/) and new (.planning/milestones/*/phases/*/) structures
|
|
241
|
+
SUMMARY_CONTENT=$(cat .planning/phases/*/*-SUMMARY.md .planning/milestones/*/phases/*/*-SUMMARY.md 2>/dev/null | head -100)
|
|
242
|
+
|
|
243
|
+
if echo "$SUMMARY_CONTENT" | grep -qiE "(ui|page|screen|button|form|input|click|navigation|redirect|layout|visual|interface)"; then
|
|
244
|
+
TEST_TYPE="WEB_UI"
|
|
245
|
+
elif echo "$SUMMARY_CONTENT" | grep -qiE "(api|endpoint|database|backend|voice|sip|telephony|audio|websocket)"; then
|
|
246
|
+
TEST_TYPE="API_BACKEND"
|
|
247
|
+
else
|
|
248
|
+
TEST_TYPE="MIXED"
|
|
249
|
+
fi
|
|
250
|
+
echo "$TEST_TYPE"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Mode Selection UX:**
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
╔══════════════════════════════════════════════════════════════════════╗
|
|
257
|
+
║ UAT Testing Mode (auto-detected: Web UI tests) ║
|
|
258
|
+
╠══════════════════════════════════════════════════════════════════════╣
|
|
259
|
+
║ ║
|
|
260
|
+
║ Recommended: ║
|
|
261
|
+
║ ──────────────────── ║
|
|
262
|
+
║ ⭐ AI QA Engineer (Recommended for web UI) ║
|
|
263
|
+
║ • Browser automation + visual AI validation ║
|
|
264
|
+
║ • Explores edge cases, tests like a real user ║
|
|
265
|
+
║ • Cost: ~$0.001/test (MiniMax vision) ║
|
|
266
|
+
║ ║
|
|
267
|
+
║ Alternative: ║
|
|
268
|
+
║ ──────────── ║
|
|
269
|
+
║ • Zeroshot (Screenshot) — Fast, fully automated ║
|
|
270
|
+
║ • Manual — You test each feature and report results ║
|
|
271
|
+
║ ║
|
|
272
|
+
╚══════════════════════════════════════════════════════════════════════╝
|
|
186
273
|
```
|
|
187
274
|
|
|
188
275
|
Use AskUserQuestion:
|
|
189
276
|
- header: "Testing Mode"
|
|
190
|
-
- question: "How would you like to run UAT?"
|
|
277
|
+
- question: "How would you like to run UAT? (Recommended: AI QA Engineer for web UI)"
|
|
191
278
|
- options:
|
|
192
|
-
{If PLAYWRIGHT_MCP_AVAILABLE:}
|
|
193
|
-
- "AI QA Engineer (Recommended)" — Claude acts as a QA engineer, controlling the browser interactively.
|
|
279
|
+
{If PLAYWRIGHT_MCP_AVAILABLE and MINIMAX_AVAILABLE:}
|
|
280
|
+
- "AI QA Engineer (Recommended)" — Claude acts as a QA engineer, controlling the browser interactively with visual validation. Tests edge cases automatically. Best for web UI.
|
|
194
281
|
- "Zeroshot (Screenshot)" — Claude validates UI using screenshots. Faster, less thorough.
|
|
195
282
|
- "Manual" — You'll test each feature and report results. More control, slower.
|
|
196
|
-
{
|
|
283
|
+
{ElseIf PLAYWRIGHT_MCP_AVAILABLE and TEST_TYPE = "WEB_UI":}
|
|
284
|
+
- "Playwright MCP (Interactive)" — Use browser automation for testing. No visual AI validation.
|
|
285
|
+
- "Manual" — You'll test each feature and report results.
|
|
286
|
+
{ElseIf MINIMAX_AVAILABLE or ANTHROPIC_API_KEY:}
|
|
197
287
|
- "Zeroshot (Automated) (Recommended)" — Claude validates UI autonomously using screenshots. Faster, no input needed per test.
|
|
198
288
|
- "Manual" — You'll test each feature and report results. More control, slower.
|
|
289
|
+
{Else:}
|
|
290
|
+
- "Manual" — You'll test each feature and report results.
|
|
199
291
|
|
|
200
|
-
Store result in `TESTING_MODE` (qa-engineer, zeroshot, or manual).
|
|
292
|
+
Store result in `TESTING_MODE` (qa-engineer, zeroshot, playwright, or manual).
|
|
201
293
|
|
|
202
294
|
**If MANUAL_ONLY or MODULE_MISSING:**
|
|
203
295
|
|
|
204
296
|
```
|
|
205
297
|
UAT will run in manual mode.
|
|
206
|
-
(Set ANTHROPIC_API_KEY to enable automated
|
|
298
|
+
(Set ANTHROPIC_API_KEY to enable automated testing)
|
|
207
299
|
```
|
|
208
300
|
|
|
209
301
|
Set `TESTING_MODE=manual`.
|
|
@@ -215,34 +307,35 @@ Proceed to `check_active_session`.
|
|
|
215
307
|
**First: Check for active UAT sessions**
|
|
216
308
|
|
|
217
309
|
```bash
|
|
218
|
-
|
|
310
|
+
# Search for UAT files in both old (.planning/phases/) and new (.planning/milestones/*/phases/) structures
|
|
311
|
+
UAT_FILES=$(find .planning -name "*-UAT.md" -type f 2>/dev/null | head -10)
|
|
219
312
|
```
|
|
220
313
|
|
|
221
314
|
**If active sessions exist AND no $ARGUMENTS provided:**
|
|
222
315
|
|
|
223
|
-
Read each file's frontmatter (status,
|
|
316
|
+
Read each file's frontmatter (status, target, target_type) and Current Test section.
|
|
224
317
|
|
|
225
318
|
Display inline:
|
|
226
319
|
|
|
227
320
|
```
|
|
228
321
|
## Active UAT Sessions
|
|
229
322
|
|
|
230
|
-
| # |
|
|
231
|
-
|
|
232
|
-
| 1 | 04-comments | testing | 3. Reply to Comment | 2/6 |
|
|
233
|
-
| 2 |
|
|
323
|
+
| # | Target | Type | Status | Current Test | Progress |
|
|
324
|
+
|---|--------|------|--------|--------------|----------|
|
|
325
|
+
| 1 | 04-comments | phase | testing | 3. Reply to Comment | 2/6 |
|
|
326
|
+
| 2 | v1.2 | milestone | testing | 1. Login Form | 0/4 |
|
|
234
327
|
|
|
235
|
-
Reply with a number to resume, or provide a
|
|
328
|
+
Reply with a number to resume, or provide a target to start new.
|
|
236
329
|
```
|
|
237
330
|
|
|
238
331
|
Wait for user response.
|
|
239
332
|
|
|
240
333
|
- If user replies with number (1, 2) → Load that file, go to `resume_from_file`
|
|
241
|
-
- If user replies with phase number → Treat as new session, go to `create_uat_file`
|
|
334
|
+
- If user replies with phase number or milestone → Treat as new session, go to `create_uat_file`
|
|
242
335
|
|
|
243
336
|
**If active sessions exist AND $ARGUMENTS provided:**
|
|
244
337
|
|
|
245
|
-
Check if session exists for that phase. If yes, offer to resume or restart.
|
|
338
|
+
Check if session exists for that target (phase or milestone). If yes, offer to resume or restart.
|
|
246
339
|
If no, continue to `create_uat_file`.
|
|
247
340
|
|
|
248
341
|
**If no active sessions AND no $ARGUMENTS:**
|
|
@@ -250,7 +343,7 @@ If no, continue to `create_uat_file`.
|
|
|
250
343
|
```
|
|
251
344
|
No active UAT sessions.
|
|
252
345
|
|
|
253
|
-
Provide a phase number
|
|
346
|
+
Provide a phase number (e.g., 4) or milestone (e.g., v1.2) to start testing:
|
|
254
347
|
```
|
|
255
348
|
|
|
256
349
|
**If no active sessions AND $ARGUMENTS provided:**
|
|
@@ -261,15 +354,32 @@ Continue to `create_uat_file`.
|
|
|
261
354
|
<step name="find_summaries">
|
|
262
355
|
**Find what to test:**
|
|
263
356
|
|
|
264
|
-
Parse $ARGUMENTS
|
|
357
|
+
Parse $ARGUMENTS to determine scope:
|
|
265
358
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
PHASE_DIR=$(find_phase_dir "${PHASE_ARG}")
|
|
359
|
+
- **Phase number** (e.g., `4`, `05`, `05-auth`): Test that phase only
|
|
360
|
+
- **Milestone** (e.g., `v1.9`, `v2.0`): Test all phases in that milestone
|
|
361
|
+
- **Empty**: Use current milestone from ROADMAP.md
|
|
270
362
|
|
|
271
|
-
|
|
272
|
-
|
|
363
|
+
```bash
|
|
364
|
+
# Determine if target is a milestone (starts with 'v' followed by digits)
|
|
365
|
+
if [[ "$PHASE_ARG" =~ ^v[0-9]+\.[0-9]+$ ]]; then
|
|
366
|
+
# Milestone target - find all SUMMARY files in that milestone's phases
|
|
367
|
+
MILESTONE="$PHASE_ARG"
|
|
368
|
+
MILESTONE_DIR=".planning/milestones/${MILESTONE}/phases"
|
|
369
|
+
if [ -d "$MILESTONE_DIR" ]; then
|
|
370
|
+
find "$MILESTONE_DIR" -maxdepth 2 -name "*-SUMMARY.md" 2>/dev/null | sort
|
|
371
|
+
else
|
|
372
|
+
echo "ERROR: Milestone directory not found: $MILESTONE_DIR" >&2
|
|
373
|
+
fi
|
|
374
|
+
else
|
|
375
|
+
# Phase target - use find_phase_dir
|
|
376
|
+
PHASE_DIR=$(find_phase_dir "${PHASE_ARG}")
|
|
377
|
+
if [ -n "$PHASE_DIR" ]; then
|
|
378
|
+
ls "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
|
|
379
|
+
else
|
|
380
|
+
echo "ERROR: Phase directory not found for: $PHASE_ARG" >&2
|
|
381
|
+
fi
|
|
382
|
+
fi
|
|
273
383
|
```
|
|
274
384
|
|
|
275
385
|
Read each SUMMARY.md to extract testable deliverables.
|
|
@@ -300,7 +410,21 @@ Skip internal/non-observable items (refactors, type changes, etc.).
|
|
|
300
410
|
**Create UAT file with all tests:**
|
|
301
411
|
|
|
302
412
|
```bash
|
|
303
|
-
|
|
413
|
+
# Determine if milestone target and set up output location
|
|
414
|
+
if [[ "$PHASE_ARG" =~ ^v[0-9]+\.[0-9]+$ ]]; then
|
|
415
|
+
# Milestone-level UAT - create in milestone's phases directory
|
|
416
|
+
MILESTONE="$PHASE_ARG"
|
|
417
|
+
MILESTONE_DIR=".planning/milestones/${MILESTONE}/phases"
|
|
418
|
+
mkdir -p "$MILESTONE_DIR"
|
|
419
|
+
UAT_FILE="$MILESTONE_DIR/${MILESTONE}-UAT.md"
|
|
420
|
+
TARGET_TYPE="milestone"
|
|
421
|
+
else
|
|
422
|
+
# Phase-level UAT - use existing phase directory
|
|
423
|
+
mkdir -p "$PHASE_DIR"
|
|
424
|
+
PHASE_NAME=$(basename "$PHASE_DIR")
|
|
425
|
+
UAT_FILE="$PHASE_DIR/${PHASE_NAME}-UAT.md"
|
|
426
|
+
TARGET_TYPE="phase"
|
|
427
|
+
fi
|
|
304
428
|
```
|
|
305
429
|
|
|
306
430
|
Build test list from extracted deliverables.
|
|
@@ -310,7 +434,8 @@ Create file:
|
|
|
310
434
|
```markdown
|
|
311
435
|
---
|
|
312
436
|
status: testing
|
|
313
|
-
|
|
437
|
+
target_type: {TARGET_TYPE}
|
|
438
|
+
target: {PHASE_ARG}
|
|
314
439
|
source: [list of SUMMARY.md files]
|
|
315
440
|
started: [ISO timestamp]
|
|
316
441
|
updated: [ISO timestamp]
|
|
@@ -350,10 +475,12 @@ skipped: 0
|
|
|
350
475
|
[none yet]
|
|
351
476
|
```
|
|
352
477
|
|
|
353
|
-
Write to `
|
|
478
|
+
Write to `$UAT_FILE`
|
|
354
479
|
|
|
355
480
|
**Route based on testing mode:**
|
|
481
|
+
- If `TESTING_MODE=qa-engineer` → Go to `run_qa_engineer_batch`
|
|
356
482
|
- If `TESTING_MODE=zeroshot` → Go to `run_zeroshot_batch`
|
|
483
|
+
- If `TESTING_MODE=playwright` → Go to `run_playwright_batch`
|
|
357
484
|
- If `TESTING_MODE=manual` → Go to `present_test`
|
|
358
485
|
</step>
|
|
359
486
|
|
|
@@ -444,6 +571,128 @@ Falling back to manual mode for remaining tests.
|
|
|
444
571
|
Set `TESTING_MODE=manual` and continue from current test.
|
|
445
572
|
</step>
|
|
446
573
|
|
|
574
|
+
<step name="run_qa_engineer_batch">
|
|
575
|
+
**Run AI QA Engineer mode for all tests:**
|
|
576
|
+
|
|
577
|
+
This mode combines Playwright MCP (browser control) with MiniMax (visual AI) for comprehensive exploratory testing.
|
|
578
|
+
|
|
579
|
+
```
|
|
580
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
581
|
+
║ AI QA ENGINEER: Autonomous Testing ║
|
|
582
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
583
|
+
|
|
584
|
+
Running {N} tests with browser automation + AI visual validation...
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**For each test in the UAT file:**
|
|
588
|
+
|
|
589
|
+
1. Extract test name and expected behavior
|
|
590
|
+
2. Determine the URL to test
|
|
591
|
+
3. Run QA Engineer validation:
|
|
592
|
+
```javascript
|
|
593
|
+
const { zeroshotValidate } = require('~/.claude/rrr/lib/uat/zeroshot-validator.js');
|
|
594
|
+
|
|
595
|
+
const result = await zeroshotValidate({
|
|
596
|
+
url: testUrl,
|
|
597
|
+
task: `Verify: ${expectedBehavior}`,
|
|
598
|
+
mode: 'qa-engineer', // QA engineer persona
|
|
599
|
+
interactive: true, // Use Playwright MCP for browser control
|
|
600
|
+
timeout: 60000 // Longer timeout for exploratory testing
|
|
601
|
+
});
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
4. Process result:
|
|
605
|
+
- If `result.passed === true`:
|
|
606
|
+
- Update test result to "pass"
|
|
607
|
+
- Log: `✓ Test {N}: {name}`
|
|
608
|
+
- If `result.passed === false`:
|
|
609
|
+
- Update test result to "issue"
|
|
610
|
+
- Capture observations and reasoning
|
|
611
|
+
- Add to Gaps section
|
|
612
|
+
- Log: `✗ Test {N}: {name} - {brief reason}`
|
|
613
|
+
|
|
614
|
+
5. Update UAT.md after each test (checkpoint)
|
|
615
|
+
|
|
616
|
+
6. Display progress:
|
|
617
|
+
```
|
|
618
|
+
Progress: [████████░░] 8/10 tests complete
|
|
619
|
+
✓ Test 1: Login page loads with form fields
|
|
620
|
+
✓ Test 2: Form validation on submit
|
|
621
|
+
✗ Test 3: Password reset email not sent (edge case found)
|
|
622
|
+
...
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
**QA Engineer specific behaviors:**
|
|
626
|
+
- Tests edge cases automatically (empty fields, long inputs, special chars)
|
|
627
|
+
- Explores navigation paths beyond the happy path
|
|
628
|
+
- Screenshots any issues found
|
|
629
|
+
- Validates visual correctness with MiniMax vision
|
|
630
|
+
|
|
631
|
+
**After all tests complete:**
|
|
632
|
+
|
|
633
|
+
Update frontmatter status to "complete".
|
|
634
|
+
|
|
635
|
+
**Display summary:**
|
|
636
|
+
|
|
637
|
+
```
|
|
638
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
639
|
+
║ AI QA ENGINEER: Complete ║
|
|
640
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
641
|
+
|
|
642
|
+
Results:
|
|
643
|
+
✓ Passed: {N}
|
|
644
|
+
✗ Issues: {N}
|
|
645
|
+
⏭ Skipped: {N}
|
|
646
|
+
|
|
647
|
+
Exploratory Testing Notes:
|
|
648
|
+
- {N} edge cases tested automatically
|
|
649
|
+
- {N} navigation paths explored
|
|
650
|
+
|
|
651
|
+
{If issues > 0:}
|
|
652
|
+
Issues Found:
|
|
653
|
+
1. Test 3: Password reset - Edge case: special chars in email cause error
|
|
654
|
+
2. Test 7: Form submission - Visual: error message clipped on mobile
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
Go to `complete_session`.
|
|
658
|
+
|
|
659
|
+
**On error (Playwright MCP not available, timeout):**
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
⚠ QA Engineer mode error: {error}
|
|
663
|
+
Falling back to Zeroshot mode...
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
Set `TESTING_MODE=zeroshot` and continue to `run_zeroshot_batch`.
|
|
667
|
+
</step>
|
|
668
|
+
|
|
669
|
+
<step name="run_playwright_batch">
|
|
670
|
+
**Run Playwright-only mode (no visual AI):**
|
|
671
|
+
|
|
672
|
+
Use Playwright MCP for browser automation without visual AI validation.
|
|
673
|
+
|
|
674
|
+
```
|
|
675
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
676
|
+
║ PLAYWRIGHT UAT: Browser Automation ║
|
|
677
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
678
|
+
|
|
679
|
+
Running {N} tests with Playwright browser automation...
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
**For each test:**
|
|
683
|
+
|
|
684
|
+
1. Navigate to URL using Playwright MCP
|
|
685
|
+
2. Perform interactions described in test
|
|
686
|
+
3. Take screenshot at key points
|
|
687
|
+
4. Report findings (manual AI analysis not used)
|
|
688
|
+
|
|
689
|
+
**After all tests:**
|
|
690
|
+
|
|
691
|
+
Display summary and prompt for manual verification of screenshots.
|
|
692
|
+
|
|
693
|
+
Go to `complete_session`.
|
|
694
|
+
</step>
|
|
695
|
+
|
|
447
696
|
<step name="present_test">
|
|
448
697
|
**Present current test to user (Manual Mode):**
|
|
449
698
|
|
|
@@ -567,13 +816,19 @@ Clear Current Test section:
|
|
|
567
816
|
|
|
568
817
|
Commit the UAT file:
|
|
569
818
|
```bash
|
|
570
|
-
|
|
571
|
-
|
|
819
|
+
# Use target from frontmatter (phase or milestone)
|
|
820
|
+
if [ "$TARGET_TYPE" = "milestone" ]; then
|
|
821
|
+
git add "$UAT_FILE"
|
|
822
|
+
git commit -m "test(${TARGET}): complete UAT - ${passed} passed, ${issues} issues"
|
|
823
|
+
else
|
|
824
|
+
git add "$UAT_FILE"
|
|
825
|
+
git commit -m "test(${TARGET}): complete UAT - ${passed} passed, ${issues} issues"
|
|
826
|
+
fi
|
|
572
827
|
```
|
|
573
828
|
|
|
574
829
|
Present summary:
|
|
575
830
|
```
|
|
576
|
-
## UAT Complete:
|
|
831
|
+
## UAT Complete: {TARGET_TYPE} {TARGET}
|
|
577
832
|
|
|
578
833
|
| Result | Count |
|
|
579
834
|
|--------|-------|
|