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 +11 -0
- package/bin/install.js +70 -1
- package/package.json +1 -1
- package/scripts/pushpa-jarvis.sh +9 -6
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 = [
|
|
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
package/scripts/pushpa-jarvis.sh
CHANGED
|
@@ -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
|
-
|
|
289
|
-
|
|
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 $
|
|
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 "$
|
|
351
|
-
ledger_set_phase "$
|
|
353
|
+
ledger_set_phase "$phase" "verified" "true"
|
|
354
|
+
ledger_set_phase "$phase" "state" "verified"
|
|
352
355
|
else
|
|
353
|
-
ledger_set_phase "$
|
|
356
|
+
ledger_set_phase "$phase" "verified" "false"
|
|
354
357
|
fi
|
|
355
358
|
|
|
356
359
|
return "$result"
|