projecta-rrr 1.16.4 → 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 +13 -31
- package/commands/rrr/verify-work.md +11 -2
- package/package.json +1 -1
- package/rrr/workflows/verify-work.md +64 -24
package/CHANGELOG.md
CHANGED
|
@@ -4,40 +4,22 @@ 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.
|
|
7
|
+
## [1.16.5] - 2026-01-27
|
|
8
8
|
|
|
9
9
|
### Fixed
|
|
10
|
-
- **
|
|
11
|
-
-
|
|
12
|
-
- `~/.claude/
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- **Intuitive Mode Selection** - Testing mode selection now shows:
|
|
22
|
-
- Auto-detected test type (e.g., "Web UI tests")
|
|
23
|
-
- Clear explanation of each mode's strengths
|
|
24
|
-
- Recommended option highlighted
|
|
25
|
-
- Cost estimates for AI-powered modes
|
|
26
|
-
|
|
27
|
-
- **run_qa_engineer_batch Step** - New workflow step for AI QA Engineer mode:
|
|
28
|
-
- Combines Playwright MCP (browser control) + MiniMax (visual AI)
|
|
29
|
-
- Tests edge cases automatically
|
|
30
|
-
- Explores navigation paths beyond happy path
|
|
31
|
-
- ~$0.001 per test (MiniMax vision is 50-100x cheaper than Anthropic API)
|
|
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
|
|
32
21
|
|
|
33
|
-
|
|
34
|
-
- Browser automation without visual AI validation
|
|
35
|
-
- Fallback when MiniMax API key not available
|
|
36
|
-
|
|
37
|
-
### Changed
|
|
38
|
-
- **Improved Mode Routing** - create_uat_file step now routes to 4 modes:
|
|
39
|
-
- `qa-engineer` → run_qa_engineer_batch
|
|
40
|
-
- `zeroshot` → run_zeroshot_batch
|
|
22
|
+
## [1.16.4] - 2026-01-27
|
|
41
23
|
- `playwright` → run_playwright_batch
|
|
42
24
|
- `manual` → present_test
|
|
43
25
|
|
|
@@ -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
|
@@ -237,7 +237,8 @@ Based on what's available, calculate the recommended mode:
|
|
|
237
237
|
|
|
238
238
|
```bash
|
|
239
239
|
# Check SUMMARY.md content to determine test type
|
|
240
|
-
|
|
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)
|
|
241
242
|
|
|
242
243
|
if echo "$SUMMARY_CONTENT" | grep -qiE "(ui|page|screen|button|form|input|click|navigation|redirect|layout|visual|interface)"; then
|
|
243
244
|
TEST_TYPE="WEB_UI"
|
|
@@ -306,34 +307,35 @@ Proceed to `check_active_session`.
|
|
|
306
307
|
**First: Check for active UAT sessions**
|
|
307
308
|
|
|
308
309
|
```bash
|
|
309
|
-
|
|
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)
|
|
310
312
|
```
|
|
311
313
|
|
|
312
314
|
**If active sessions exist AND no $ARGUMENTS provided:**
|
|
313
315
|
|
|
314
|
-
Read each file's frontmatter (status,
|
|
316
|
+
Read each file's frontmatter (status, target, target_type) and Current Test section.
|
|
315
317
|
|
|
316
318
|
Display inline:
|
|
317
319
|
|
|
318
320
|
```
|
|
319
321
|
## Active UAT Sessions
|
|
320
322
|
|
|
321
|
-
| # |
|
|
322
|
-
|
|
323
|
-
| 1 | 04-comments | testing | 3. Reply to Comment | 2/6 |
|
|
324
|
-
| 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 |
|
|
325
327
|
|
|
326
|
-
Reply with a number to resume, or provide a
|
|
328
|
+
Reply with a number to resume, or provide a target to start new.
|
|
327
329
|
```
|
|
328
330
|
|
|
329
331
|
Wait for user response.
|
|
330
332
|
|
|
331
333
|
- If user replies with number (1, 2) → Load that file, go to `resume_from_file`
|
|
332
|
-
- 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`
|
|
333
335
|
|
|
334
336
|
**If active sessions exist AND $ARGUMENTS provided:**
|
|
335
337
|
|
|
336
|
-
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.
|
|
337
339
|
If no, continue to `create_uat_file`.
|
|
338
340
|
|
|
339
341
|
**If no active sessions AND no $ARGUMENTS:**
|
|
@@ -341,7 +343,7 @@ If no, continue to `create_uat_file`.
|
|
|
341
343
|
```
|
|
342
344
|
No active UAT sessions.
|
|
343
345
|
|
|
344
|
-
Provide a phase number
|
|
346
|
+
Provide a phase number (e.g., 4) or milestone (e.g., v1.2) to start testing:
|
|
345
347
|
```
|
|
346
348
|
|
|
347
349
|
**If no active sessions AND $ARGUMENTS provided:**
|
|
@@ -352,15 +354,32 @@ Continue to `create_uat_file`.
|
|
|
352
354
|
<step name="find_summaries">
|
|
353
355
|
**Find what to test:**
|
|
354
356
|
|
|
355
|
-
Parse $ARGUMENTS
|
|
357
|
+
Parse $ARGUMENTS to determine scope:
|
|
356
358
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
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
|
|
361
362
|
|
|
362
|
-
|
|
363
|
-
|
|
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
|
|
364
383
|
```
|
|
365
384
|
|
|
366
385
|
Read each SUMMARY.md to extract testable deliverables.
|
|
@@ -391,7 +410,21 @@ Skip internal/non-observable items (refactors, type changes, etc.).
|
|
|
391
410
|
**Create UAT file with all tests:**
|
|
392
411
|
|
|
393
412
|
```bash
|
|
394
|
-
|
|
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
|
|
395
428
|
```
|
|
396
429
|
|
|
397
430
|
Build test list from extracted deliverables.
|
|
@@ -401,7 +434,8 @@ Create file:
|
|
|
401
434
|
```markdown
|
|
402
435
|
---
|
|
403
436
|
status: testing
|
|
404
|
-
|
|
437
|
+
target_type: {TARGET_TYPE}
|
|
438
|
+
target: {PHASE_ARG}
|
|
405
439
|
source: [list of SUMMARY.md files]
|
|
406
440
|
started: [ISO timestamp]
|
|
407
441
|
updated: [ISO timestamp]
|
|
@@ -441,7 +475,7 @@ skipped: 0
|
|
|
441
475
|
[none yet]
|
|
442
476
|
```
|
|
443
477
|
|
|
444
|
-
Write to `
|
|
478
|
+
Write to `$UAT_FILE`
|
|
445
479
|
|
|
446
480
|
**Route based on testing mode:**
|
|
447
481
|
- If `TESTING_MODE=qa-engineer` → Go to `run_qa_engineer_batch`
|
|
@@ -782,13 +816,19 @@ Clear Current Test section:
|
|
|
782
816
|
|
|
783
817
|
Commit the UAT file:
|
|
784
818
|
```bash
|
|
785
|
-
|
|
786
|
-
|
|
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
|
|
787
827
|
```
|
|
788
828
|
|
|
789
829
|
Present summary:
|
|
790
830
|
```
|
|
791
|
-
## UAT Complete:
|
|
831
|
+
## UAT Complete: {TARGET_TYPE} {TARGET}
|
|
792
832
|
|
|
793
833
|
| Result | Count |
|
|
794
834
|
|--------|-------|
|