projecta-rrr 1.16.0 → 1.16.1

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,6 +4,17 @@ 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.1] - 2026-01-27
8
+
9
+ ### Fixed
10
+ - **Missing scripts in npm install** - All user-facing scripts now copied to target project
11
+ - Added: `pushpa-jarvis.sh`, `browser-uat.sh`, `scaffold-e2e.sh`, `chrome-visual-check.sh`, `index-sessions.sh`
12
+ - Added npm scripts: `pushpa:jarvis`, `browser:uat`, `scaffold:e2e`, `chrome:visual`, `sessions:index`
13
+ - Scripts copied alongside existing `pushpa-mode.sh`, `mcp-setup.sh`, `visual-proof.sh`
14
+ - **pushpa-jarvis.sh bug fixes**
15
+ - Fixed `verify_phase()` using wrong variable (`$ph` instead of `$phase`)
16
+ - Fixed `phase_has_summary()` to search both active phases and milestone archives
17
+
7
18
  ## [1.16.0] - 2026-01-26
8
19
 
9
20
  ### Added
package/bin/install.js CHANGED
@@ -505,7 +505,16 @@ function installScripts(targetDir) {
505
505
 
506
506
  const installed = [];
507
507
  const skipped = [];
508
- const scripts = ['pushpa-mode.sh', 'mcp-setup.sh', 'visual-proof.sh'];
508
+ const scripts = [
509
+ 'pushpa-mode.sh',
510
+ 'pushpa-jarvis.sh',
511
+ 'mcp-setup.sh',
512
+ 'visual-proof.sh',
513
+ 'browser-uat.sh',
514
+ 'scaffold-e2e.sh',
515
+ 'chrome-visual-check.sh',
516
+ 'index-sessions.sh'
517
+ ];
509
518
 
510
519
  for (const script of scripts) {
511
520
  const srcFile = path.join(srcScriptsDir, script);
@@ -598,6 +607,66 @@ function addNpmScripts(targetDir, installedScripts, bashAvailable = true) {
598
607
  }
599
608
  }
600
609
 
610
+ // Add pushpa:jarvis script if pushpa-jarvis.sh was installed
611
+ if (installedScripts.includes('pushpa-jarvis.sh') || fs.existsSync(path.join(targetDir, 'scripts', 'pushpa-jarvis.sh'))) {
612
+ if (pkgJson.scripts['pushpa:jarvis']) {
613
+ skipped.push('pushpa:jarvis');
614
+ console.log(` ${yellow}⚠${reset} Skipped npm script "pushpa:jarvis" (already exists)`);
615
+ } else {
616
+ pkgJson.scripts['pushpa:jarvis'] = 'bash scripts/pushpa-jarvis.sh';
617
+ added.push('pushpa:jarvis');
618
+ console.log(` ${green}✓${reset} Added npm script "pushpa:jarvis"`);
619
+ }
620
+ }
621
+
622
+ // Add browser:uat script if browser-uat.sh was installed
623
+ if (installedScripts.includes('browser-uat.sh') || fs.existsSync(path.join(targetDir, 'scripts', 'browser-uat.sh'))) {
624
+ if (pkgJson.scripts['browser:uat']) {
625
+ skipped.push('browser:uat');
626
+ console.log(` ${yellow}⚠${reset} Skipped npm script "browser:uat" (already exists)`);
627
+ } else {
628
+ pkgJson.scripts['browser:uat'] = 'bash scripts/browser-uat.sh';
629
+ added.push('browser:uat');
630
+ console.log(` ${green}✓${reset} Added npm script "browser:uat"`);
631
+ }
632
+ }
633
+
634
+ // Add scaffold:e2e script if scaffold-e2e.sh was installed
635
+ if (installedScripts.includes('scaffold-e2e.sh') || fs.existsSync(path.join(targetDir, 'scripts', 'scaffold-e2e.sh'))) {
636
+ if (pkgJson.scripts['scaffold:e2e']) {
637
+ skipped.push('scaffold:e2e');
638
+ console.log(` ${yellow}⚠${reset} Skipped npm script "scaffold:e2e" (already exists)`);
639
+ } else {
640
+ pkgJson.scripts['scaffold:e2e'] = 'bash scripts/scaffold-e2e.sh';
641
+ added.push('scaffold:e2e');
642
+ console.log(` ${green}✓${reset} Added npm script "scaffold:e2e"`);
643
+ }
644
+ }
645
+
646
+ // Add chrome:visual script if chrome-visual-check.sh was installed
647
+ if (installedScripts.includes('chrome-visual-check.sh') || fs.existsSync(path.join(targetDir, 'scripts', 'chrome-visual-check.sh'))) {
648
+ if (pkgJson.scripts['chrome:visual']) {
649
+ skipped.push('chrome:visual');
650
+ console.log(` ${yellow}⚠${reset} Skipped npm script "chrome:visual" (already exists)`);
651
+ } else {
652
+ pkgJson.scripts['chrome:visual'] = 'bash scripts/chrome-visual-check.sh';
653
+ added.push('chrome:visual');
654
+ console.log(` ${green}✓${reset} Added npm script "chrome:visual"`);
655
+ }
656
+ }
657
+
658
+ // Add sessions:index script if index-sessions.sh was installed
659
+ if (installedScripts.includes('index-sessions.sh') || fs.existsSync(path.join(targetDir, 'scripts', 'index-sessions.sh'))) {
660
+ if (pkgJson.scripts['sessions:index']) {
661
+ skipped.push('sessions:index');
662
+ console.log(` ${yellow}⚠${reset} Skipped npm script "sessions:index" (already exists)`);
663
+ } else {
664
+ pkgJson.scripts['sessions:index'] = 'bash scripts/index-sessions.sh';
665
+ added.push('sessions:index');
666
+ console.log(` ${green}✓${reset} Added npm script "sessions:index"`);
667
+ }
668
+ }
669
+
601
670
  // Write back if we added anything
602
671
  if (added.length > 0) {
603
672
  fs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2) + '\n');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projecta-rrr",
3
- "version": "1.16.0",
3
+ "version": "1.16.1",
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"
@@ -285,8 +285,11 @@ phase_has_summary() {
285
285
  # Uses word boundary to avoid substring matches (e.g., 23 matching in 223)
286
286
  local pfx="${phase%.*}" # For 23.1 -> 23, for 23 -> 23
287
287
  # Match pattern: /23-/ or /23.1-/ at directory boundary
288
- find "$PLANNING_DIR/phases" -type f -name "*-SUMMARY.md" 2>/dev/null | \
289
- grep -qE "(^|/)${pfx}(-|\\.)" && return 0 || return 1
288
+ # Search both legacy location (.planning/phases/) and milestone archives (.planning/milestones/vX.Y/phases/)
289
+ {
290
+ find "$PLANNING_DIR/phases" -type f -name "*-SUMMARY.md" 2>/dev/null
291
+ find "$PLANNING_DIR/milestones" -path "*/phases/*" -type f -name "*-SUMMARY.md" 2>/dev/null
292
+ } | grep -qE "(^|/)${pfx}(-|\\.)" && return 0 || return 1
290
293
  }
291
294
 
292
295
  plan_phase() { run_rrr "/rrr:plan-phase $1"; }
@@ -298,7 +301,7 @@ verify_phase() {
298
301
  local result=0
299
302
 
300
303
  # Ladder: unit -> playwright -> visual -> browser_uat
301
- log "Verifying phase $ph (level=$level)"
304
+ log "Verifying phase $phase (level=$level)"
302
305
 
303
306
  # Level 1: Check for test scripts
304
307
  if [[ -f "package.json" ]] && [[ "$("$JQ_BIN" -r '.scripts.test?' package.json)" != "null" ]]; then
@@ -347,10 +350,10 @@ verify_phase() {
347
350
 
348
351
  # Record verification result in ledger
349
352
  if [[ "$result" -eq 0 ]]; then
350
- ledger_set_phase "$ph" "verified" "true"
351
- ledger_set_phase "$ph" "state" "verified"
353
+ ledger_set_phase "$phase" "verified" "true"
354
+ ledger_set_phase "$phase" "state" "verified"
352
355
  else
353
- ledger_set_phase "$ph" "verified" "false"
356
+ ledger_set_phase "$phase" "verified" "false"
354
357
  fi
355
358
 
356
359
  return "$result"