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 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.4] - 2026-01-27
7
+ ## [1.16.5] - 2026-01-27
8
8
 
9
9
  ### Fixed
10
- - **Playwright MCP Detection** - Enhanced detection logic now checks multiple locations:
11
- - `~/.claude/mcp.json` (primary)
12
- - `~/.claude/settings.json` (alternate)
13
- - `playwright-mcp` command availability
14
- - Running processes via `ps`
15
- - **QA Engineer Mode Auto-Detection** - UAT now auto-detects test type from SUMMARY.md:
16
- - Web UI tests Recommend AI QA Engineer (Playwright + MiniMax)
17
- - API/Backend tests Recommend Zeroshot
18
- - Mixed tests Offer both options with clear recommendations
19
-
20
- ### Added
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
- - **run_playwright_batch Step** - New workflow step for Playwright-only mode:
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 to run UAT:**
343
+ **Load the UAT workflow:**
335
344
 
336
- Read the file at: `rrr/workflows/verify-work.md`
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projecta-rrr",
3
- "version": "1.16.4",
3
+ "version": "1.16.5",
4
4
  "description": "A meta-prompting, context engineering and spec-driven development system for Claude Code by Projecta.ai",
5
5
  "bin": {
6
6
  "projecta-rrr": "bin/install.js"
@@ -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
- SUMMARY_CONTENT=$(cat .planning/phases/*/phases/*-SUMMARY.md 2>/dev/null | head -100)
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
- find .planning/phases -name "*-UAT.md" -type f 2>/dev/null | head -5
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, phase) and Current Test section.
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
- | # | Phase | Status | Current Test | Progress |
322
- |---|-------|--------|--------------|----------|
323
- | 1 | 04-comments | testing | 3. Reply to Comment | 2/6 |
324
- | 2 | 05-auth | testing | 1. Login Form | 0/4 |
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 phase number to start new.
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 to start testing (e.g., /rrr:verify-work 4)
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 as phase number (e.g., "4") or plan number (e.g., "04-02").
357
+ Parse $ARGUMENTS to determine scope:
356
358
 
357
- ```bash
358
- # Find phase directory
359
- # Find phase directory using phase-paths library (handles milestone-aware structure)
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
- # Find SUMMARY files
363
- ls "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
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
- mkdir -p "$PHASE_DIR"
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
- phase: XX-name
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 `{phase_dir}/{phase}-UAT.md` (where phase_dir is from get_phase_dir)
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
- git add "{phase_dir}/{phase}-UAT.md"
786
- git commit -m "test({phase}): complete UAT - {passed} passed, {issues} issues"
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: Phase {phase}
831
+ ## UAT Complete: {TARGET_TYPE} {TARGET}
792
832
 
793
833
  | Result | Count |
794
834
  |--------|-------|