prizmkit 1.1.7 → 1.1.8
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/bundled/VERSION.json +3 -3
- package/bundled/dev-pipeline/README.md +64 -64
- package/bundled/dev-pipeline/launch-bugfix-daemon.sh +11 -10
- package/bundled/dev-pipeline/launch-feature-daemon.sh +12 -11
- package/bundled/dev-pipeline/launch-refactor-daemon.sh +11 -10
- package/bundled/dev-pipeline/reset-bug.sh +10 -9
- package/bundled/dev-pipeline/reset-feature.sh +9 -8
- package/bundled/dev-pipeline/reset-refactor.sh +10 -9
- package/bundled/dev-pipeline/retry-bugfix.sh +7 -6
- package/bundled/dev-pipeline/retry-feature.sh +7 -6
- package/bundled/dev-pipeline/retry-refactor.sh +7 -6
- package/bundled/dev-pipeline/run-bugfix.sh +16 -15
- package/bundled/dev-pipeline/run-feature.sh +18 -17
- package/bundled/dev-pipeline/run-refactor.sh +16 -15
- package/bundled/dev-pipeline/scripts/cleanup-logs.py +2 -2
- package/bundled/dev-pipeline/scripts/detect-stuck.py +3 -3
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +26 -14
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +6 -6
- package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +6 -6
- package/bundled/dev-pipeline/scripts/init-bugfix-pipeline.py +4 -4
- package/bundled/dev-pipeline/scripts/init-pipeline.py +7 -7
- package/bundled/dev-pipeline/scripts/init-refactor-pipeline.py +4 -4
- package/bundled/dev-pipeline/scripts/update-bug-status.py +8 -8
- package/bundled/dev-pipeline/scripts/update-feature-status.py +25 -25
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +8 -8
- package/bundled/dev-pipeline/templates/bug-fix-list-schema.json +1 -1
- package/bundled/dev-pipeline/templates/feature-list-schema.json +88 -22
- package/bundled/dev-pipeline/templates/refactor-list-schema.json +1 -1
- package/bundled/skills/_metadata.json +1 -1
- package/bundled/skills/app-planner/SKILL.md +11 -11
- package/bundled/skills/app-planner/references/project-brief-guide.md +1 -1
- package/bundled/skills/bug-fix-workflow/SKILL.md +5 -5
- package/bundled/skills/bug-planner/SKILL.md +21 -21
- package/bundled/skills/bug-planner/scripts/validate-bug-list.py +3 -3
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +29 -29
- package/bundled/skills/feature-pipeline-launcher/SKILL.md +33 -33
- package/bundled/skills/feature-pipeline-launcher/scripts/preflight-check.py +3 -3
- package/bundled/skills/feature-planner/SKILL.md +27 -27
- package/bundled/skills/feature-planner/references/error-recovery.md +8 -8
- package/bundled/skills/feature-planner/scripts/validate-and-generate.py +18 -18
- package/bundled/skills/feature-workflow/SKILL.md +21 -21
- package/bundled/skills/prizmkit-verify/SKILL.md +1 -1
- package/bundled/skills/recovery-workflow/SKILL.md +14 -14
- package/bundled/skills/recovery-workflow/evals/evals.json +5 -5
- package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +43 -10
- package/bundled/skills/refactor-pipeline-launcher/SKILL.md +31 -31
- package/bundled/skills/refactor-planner/SKILL.md +23 -23
- package/bundled/skills/refactor-planner/scripts/validate-and-generate-refactor.py +17 -17
- package/bundled/skills/refactor-workflow/SKILL.md +22 -22
- package/package.json +1 -1
- package/src/clean.js +4 -4
- package/src/gitignore-template.js +7 -8
- package/src/scaffold.js +4 -2
|
@@ -8,7 +8,7 @@ set -euo pipefail
|
|
|
8
8
|
# re-executed from scratch by the pipeline.
|
|
9
9
|
#
|
|
10
10
|
# Usage:
|
|
11
|
-
# ./reset-bug.sh <bug-id|range> [options] [bug-fix-list.json]
|
|
11
|
+
# ./reset-bug.sh <bug-id|range> [options] [.prizmkit/plans/bug-fix-list.json]
|
|
12
12
|
#
|
|
13
13
|
# Bug selection:
|
|
14
14
|
# B-007 Single bug
|
|
@@ -33,7 +33,8 @@ set -euo pipefail
|
|
|
33
33
|
# ============================================================
|
|
34
34
|
|
|
35
35
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
36
|
-
|
|
36
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
37
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/bugfix"
|
|
37
38
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
38
39
|
|
|
39
40
|
# Colors
|
|
@@ -68,7 +69,7 @@ for arg in "$@"; do
|
|
|
68
69
|
--failed) FILTER_MODE="failed" ;;
|
|
69
70
|
--stalled) FILTER_MODE="stalled" ;;
|
|
70
71
|
-h|--help)
|
|
71
|
-
echo "Usage: $0 <bug-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [bug-fix-list.json]"
|
|
72
|
+
echo "Usage: $0 <bug-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [.prizmkit/plans/bug-fix-list.json]"
|
|
72
73
|
echo ""
|
|
73
74
|
echo " bug-id Single bug (e.g. B-007)"
|
|
74
75
|
echo " B-008:B-013 Range of bugs (inclusive)"
|
|
@@ -77,7 +78,7 @@ for arg in "$@"; do
|
|
|
77
78
|
echo " --stalled Reset all non-completed (failed + auto_skipped)"
|
|
78
79
|
echo " --clean Delete session history and .prizmkit artifacts"
|
|
79
80
|
echo " --run Retry immediately after reset (single bug only)"
|
|
80
|
-
echo " bug-fix-list.json Path to bug fix list (default: bug-fix-list.json)"
|
|
81
|
+
echo " .prizmkit/plans/bug-fix-list.json Path to bug fix list (default: .prizmkit/plans/bug-fix-list.json)"
|
|
81
82
|
exit 0
|
|
82
83
|
;;
|
|
83
84
|
B-*:B-*|b-*:b-*) BUG_RANGE="$arg" ;;
|
|
@@ -87,7 +88,7 @@ for arg in "$@"; do
|
|
|
87
88
|
done
|
|
88
89
|
|
|
89
90
|
if [[ -z "$BUG_ID" && -z "$BUG_RANGE" && -z "$FILTER_MODE" ]]; then
|
|
90
|
-
echo "Usage: $0 <bug-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [bug-fix-list.json]"
|
|
91
|
+
echo "Usage: $0 <bug-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [.prizmkit/plans/bug-fix-list.json]"
|
|
91
92
|
echo ""
|
|
92
93
|
echo " bug-id Single bug (e.g. B-007)"
|
|
93
94
|
echo " B-008:B-013 Range of bugs (inclusive)"
|
|
@@ -96,11 +97,11 @@ if [[ -z "$BUG_ID" && -z "$BUG_RANGE" && -z "$FILTER_MODE" ]]; then
|
|
|
96
97
|
echo " --stalled Reset all non-completed (failed + auto_skipped)"
|
|
97
98
|
echo " --clean Delete session history and .prizmkit artifacts"
|
|
98
99
|
echo " --run Retry immediately after reset (single bug only)"
|
|
99
|
-
echo " bug-fix-list.json Path to bug fix list (default: bug-fix-list.json)"
|
|
100
|
+
echo " .prizmkit/plans/bug-fix-list.json Path to bug fix list (default: .prizmkit/plans/bug-fix-list.json)"
|
|
100
101
|
exit 1
|
|
101
102
|
fi
|
|
102
103
|
|
|
103
|
-
BUG_LIST="${BUG_LIST
|
|
104
|
+
BUG_LIST="${BUG_LIST:-.prizmkit/plans/bug-fix-list.json}"
|
|
104
105
|
|
|
105
106
|
# Resolve absolute path
|
|
106
107
|
if [[ ! "$BUG_LIST" = /* ]]; then
|
|
@@ -128,7 +129,7 @@ fi
|
|
|
128
129
|
BUG_IDS=()
|
|
129
130
|
|
|
130
131
|
if [[ -n "$FILTER_MODE" ]]; then
|
|
131
|
-
# Filter by status from
|
|
132
|
+
# Filter by status from .prizmkit/state/bugfix/bugs/*/status.json
|
|
132
133
|
while IFS= read -r bid; do
|
|
133
134
|
[[ -n "$bid" ]] && BUG_IDS+=("$bid")
|
|
134
135
|
done < <(python3 -c "
|
|
@@ -296,7 +297,7 @@ if [[ "$DO_RUN" == true && ${#BUG_IDS[@]} -eq 1 ]]; then
|
|
|
296
297
|
echo ""
|
|
297
298
|
exec "$SCRIPT_DIR/retry-bugfix.sh" "${BUG_IDS[0]}" "$BUG_LIST"
|
|
298
299
|
else
|
|
299
|
-
log_info " ./dev-pipeline/run-bugfix.sh run bug-fix-list.json # Resume pipeline from first pending"
|
|
300
|
+
log_info " ./dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json # Resume pipeline from first pending"
|
|
300
301
|
if [[ ${#BUG_IDS[@]} -eq 1 ]]; then
|
|
301
302
|
log_info " ./dev-pipeline/retry-bugfix.sh ${BUG_IDS[0]} # Retry single bug"
|
|
302
303
|
fi
|
|
@@ -8,7 +8,7 @@ set -euo pipefail
|
|
|
8
8
|
# re-executed from scratch by the pipeline.
|
|
9
9
|
#
|
|
10
10
|
# Usage:
|
|
11
|
-
# ./reset-feature.sh <feature-id|range> [options] [feature-list.json]
|
|
11
|
+
# ./reset-feature.sh <feature-id|range> [options] [.prizmkit/plans/feature-list.json]
|
|
12
12
|
#
|
|
13
13
|
# Feature selection:
|
|
14
14
|
# F-007 Single feature
|
|
@@ -33,7 +33,8 @@ set -euo pipefail
|
|
|
33
33
|
# ============================================================
|
|
34
34
|
|
|
35
35
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
36
|
-
|
|
36
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
37
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/features"
|
|
37
38
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
38
39
|
|
|
39
40
|
# Colors
|
|
@@ -68,7 +69,7 @@ for arg in "$@"; do
|
|
|
68
69
|
--failed) FILTER_MODE="failed" ;;
|
|
69
70
|
--stalled) FILTER_MODE="stalled" ;;
|
|
70
71
|
-h|--help)
|
|
71
|
-
echo "Usage: $0 <feature-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [feature-list.json]"
|
|
72
|
+
echo "Usage: $0 <feature-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [.prizmkit/plans/feature-list.json]"
|
|
72
73
|
echo ""
|
|
73
74
|
echo " feature-id Single feature (e.g. F-007)"
|
|
74
75
|
echo " F-008:F-013 Range of features (inclusive)"
|
|
@@ -77,7 +78,7 @@ for arg in "$@"; do
|
|
|
77
78
|
echo " --stalled Reset all non-completed (failed + auto_skipped)"
|
|
78
79
|
echo " --clean Delete session history and .prizmkit artifacts"
|
|
79
80
|
echo " --run Retry immediately after reset (single feature only)"
|
|
80
|
-
echo " feature-list.json Path to feature list (default: feature-list.json)"
|
|
81
|
+
echo " .prizmkit/plans/feature-list.json Path to feature list (default: .prizmkit/plans/feature-list.json)"
|
|
81
82
|
exit 0
|
|
82
83
|
;;
|
|
83
84
|
F-*:F-*|f-*:f-*) FEATURE_RANGE="$arg" ;;
|
|
@@ -87,7 +88,7 @@ for arg in "$@"; do
|
|
|
87
88
|
done
|
|
88
89
|
|
|
89
90
|
if [[ -z "$FEATURE_ID" && -z "$FEATURE_RANGE" && -z "$FILTER_MODE" ]]; then
|
|
90
|
-
echo "Usage: $0 <feature-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [feature-list.json]"
|
|
91
|
+
echo "Usage: $0 <feature-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [.prizmkit/plans/feature-list.json]"
|
|
91
92
|
echo ""
|
|
92
93
|
echo " feature-id Single feature (e.g. F-007)"
|
|
93
94
|
echo " F-008:F-013 Range of features (inclusive)"
|
|
@@ -96,11 +97,11 @@ if [[ -z "$FEATURE_ID" && -z "$FEATURE_RANGE" && -z "$FILTER_MODE" ]]; then
|
|
|
96
97
|
echo " --stalled Reset all non-completed (failed + auto_skipped)"
|
|
97
98
|
echo " --clean Delete session history and .prizmkit artifacts"
|
|
98
99
|
echo " --run Retry immediately after reset (single feature only)"
|
|
99
|
-
echo " feature-list.json Path to feature list (default: feature-list.json)"
|
|
100
|
+
echo " .prizmkit/plans/feature-list.json Path to feature list (default: .prizmkit/plans/feature-list.json)"
|
|
100
101
|
exit 1
|
|
101
102
|
fi
|
|
102
103
|
|
|
103
|
-
FEATURE_LIST="${FEATURE_LIST
|
|
104
|
+
FEATURE_LIST="${FEATURE_LIST:-.prizmkit/plans/feature-list.json}"
|
|
104
105
|
|
|
105
106
|
# Resolve absolute path
|
|
106
107
|
if [[ ! "$FEATURE_LIST" = /* ]]; then
|
|
@@ -305,7 +306,7 @@ if [[ "$DO_RUN" == true && ${#FEATURE_IDS[@]} -eq 1 ]]; then
|
|
|
305
306
|
echo ""
|
|
306
307
|
exec "$SCRIPT_DIR/retry-feature.sh" "${FEATURE_IDS[0]}" "$FEATURE_LIST"
|
|
307
308
|
else
|
|
308
|
-
log_info " ./dev-pipeline/run-feature.sh run feature-list.json # Resume pipeline from first pending"
|
|
309
|
+
log_info " ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json # Resume pipeline from first pending"
|
|
309
310
|
if [[ ${#FEATURE_IDS[@]} -eq 1 ]]; then
|
|
310
311
|
log_info " ./dev-pipeline/retry-feature.sh ${FEATURE_IDS[0]} # Retry single feature"
|
|
311
312
|
fi
|
|
@@ -8,7 +8,7 @@ set -euo pipefail
|
|
|
8
8
|
# re-executed from scratch by the pipeline.
|
|
9
9
|
#
|
|
10
10
|
# Usage:
|
|
11
|
-
# ./reset-refactor.sh <refactor-id|range> [options] [refactor-list.json]
|
|
11
|
+
# ./reset-refactor.sh <refactor-id|range> [options] [.prizmkit/plans/refactor-list.json]
|
|
12
12
|
#
|
|
13
13
|
# Refactor selection:
|
|
14
14
|
# R-007 Single refactor
|
|
@@ -33,7 +33,8 @@ set -euo pipefail
|
|
|
33
33
|
# ============================================================
|
|
34
34
|
|
|
35
35
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
36
|
-
|
|
36
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
37
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/refactor"
|
|
37
38
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
38
39
|
|
|
39
40
|
# Colors
|
|
@@ -68,7 +69,7 @@ for arg in "$@"; do
|
|
|
68
69
|
--failed) FILTER_MODE="failed" ;;
|
|
69
70
|
--stalled) FILTER_MODE="stalled" ;;
|
|
70
71
|
-h|--help)
|
|
71
|
-
echo "Usage: $0 <refactor-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [refactor-list.json]"
|
|
72
|
+
echo "Usage: $0 <refactor-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [.prizmkit/plans/refactor-list.json]"
|
|
72
73
|
echo ""
|
|
73
74
|
echo " refactor-id Single refactor (e.g. R-007)"
|
|
74
75
|
echo " R-008:R-013 Range of refactors (inclusive)"
|
|
@@ -77,7 +78,7 @@ for arg in "$@"; do
|
|
|
77
78
|
echo " --stalled Reset all non-completed (failed + auto_skipped)"
|
|
78
79
|
echo " --clean Delete session history and .prizmkit artifacts"
|
|
79
80
|
echo " --run Retry immediately after reset (single refactor only)"
|
|
80
|
-
echo " refactor-list.json Path to refactor list (default: refactor-list.json)"
|
|
81
|
+
echo " .prizmkit/plans/refactor-list.json Path to refactor list (default: .prizmkit/plans/refactor-list.json)"
|
|
81
82
|
exit 0
|
|
82
83
|
;;
|
|
83
84
|
R-*:R-*|r-*:r-*) REFACTOR_RANGE="$arg" ;;
|
|
@@ -87,7 +88,7 @@ for arg in "$@"; do
|
|
|
87
88
|
done
|
|
88
89
|
|
|
89
90
|
if [[ -z "$REFACTOR_ID" && -z "$REFACTOR_RANGE" && -z "$FILTER_MODE" ]]; then
|
|
90
|
-
echo "Usage: $0 <refactor-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [refactor-list.json]"
|
|
91
|
+
echo "Usage: $0 <refactor-id|range> [--clean] [--run] [--auto-skipped|--failed|--stalled] [.prizmkit/plans/refactor-list.json]"
|
|
91
92
|
echo ""
|
|
92
93
|
echo " refactor-id Single refactor (e.g. R-007)"
|
|
93
94
|
echo " R-008:R-013 Range of refactors (inclusive)"
|
|
@@ -96,11 +97,11 @@ if [[ -z "$REFACTOR_ID" && -z "$REFACTOR_RANGE" && -z "$FILTER_MODE" ]]; then
|
|
|
96
97
|
echo " --stalled Reset all non-completed (failed + auto_skipped)"
|
|
97
98
|
echo " --clean Delete session history and .prizmkit artifacts"
|
|
98
99
|
echo " --run Retry immediately after reset (single refactor only)"
|
|
99
|
-
echo " refactor-list.json Path to refactor list (default: refactor-list.json)"
|
|
100
|
+
echo " .prizmkit/plans/refactor-list.json Path to refactor list (default: .prizmkit/plans/refactor-list.json)"
|
|
100
101
|
exit 1
|
|
101
102
|
fi
|
|
102
103
|
|
|
103
|
-
REFACTOR_LIST="${REFACTOR_LIST
|
|
104
|
+
REFACTOR_LIST="${REFACTOR_LIST:-.prizmkit/plans/refactor-list.json}"
|
|
104
105
|
|
|
105
106
|
# Resolve absolute path
|
|
106
107
|
if [[ ! "$REFACTOR_LIST" = /* ]]; then
|
|
@@ -128,7 +129,7 @@ fi
|
|
|
128
129
|
REFACTOR_IDS=()
|
|
129
130
|
|
|
130
131
|
if [[ -n "$FILTER_MODE" ]]; then
|
|
131
|
-
# Filter by status from
|
|
132
|
+
# Filter by status from .prizmkit/state/refactor/refactors/*/status.json
|
|
132
133
|
while IFS= read -r rid; do
|
|
133
134
|
[[ -n "$rid" ]] && REFACTOR_IDS+=("$rid")
|
|
134
135
|
done < <(python3 -c "
|
|
@@ -304,7 +305,7 @@ if [[ "$DO_RUN" == true && ${#REFACTOR_IDS[@]} -eq 1 ]]; then
|
|
|
304
305
|
echo ""
|
|
305
306
|
exec "$SCRIPT_DIR/retry-refactor.sh" "${REFACTOR_IDS[0]}" "$REFACTOR_LIST"
|
|
306
307
|
else
|
|
307
|
-
log_info " ./dev-pipeline/run-refactor.sh run refactor-list.json # Resume pipeline from first pending"
|
|
308
|
+
log_info " ./dev-pipeline/run-refactor.sh run .prizmkit/plans/refactor-list.json # Resume pipeline from first pending"
|
|
308
309
|
if [[ ${#REFACTOR_IDS[@]} -eq 1 ]]; then
|
|
309
310
|
log_info " ./dev-pipeline/retry-refactor.sh ${REFACTOR_IDS[0]} # Retry single refactor"
|
|
310
311
|
fi
|
|
@@ -9,16 +9,17 @@ set -euo pipefail
|
|
|
9
9
|
# the full bugfix pipeline.
|
|
10
10
|
#
|
|
11
11
|
# Usage:
|
|
12
|
-
# ./retry-bugfix.sh <bug-id> [bug-fix-list.json]
|
|
12
|
+
# ./retry-bugfix.sh <bug-id> [.prizmkit/plans/bug-fix-list.json]
|
|
13
13
|
#
|
|
14
14
|
# Examples:
|
|
15
15
|
# ./retry-bugfix.sh B-001
|
|
16
|
-
# ./retry-bugfix.sh B-001 bug-fix-list.json
|
|
16
|
+
# ./retry-bugfix.sh B-001 .prizmkit/plans/bug-fix-list.json
|
|
17
17
|
# SESSION_TIMEOUT=3600 ./retry-bugfix.sh B-001
|
|
18
18
|
# ============================================================
|
|
19
19
|
|
|
20
20
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
21
|
-
|
|
21
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
22
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/bugfix"
|
|
22
23
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
23
24
|
|
|
24
25
|
SESSION_TIMEOUT=${SESSION_TIMEOUT:-0}
|
|
@@ -44,10 +45,10 @@ detect_stream_json_support "$CLI_CMD"
|
|
|
44
45
|
# ============================================================
|
|
45
46
|
|
|
46
47
|
if [[ $# -lt 1 ]]; then
|
|
47
|
-
echo "Usage: $0 <bug-id> [bug-fix-list.json]"
|
|
48
|
+
echo "Usage: $0 <bug-id> [.prizmkit/plans/bug-fix-list.json]"
|
|
48
49
|
echo ""
|
|
49
50
|
echo " bug-id Bug to retry (e.g. B-001)"
|
|
50
|
-
echo " bug-fix-list.json Path to bug fix list (default: bug-fix-list.json)"
|
|
51
|
+
echo " bug-fix-list.json Path to bug fix list (default: .prizmkit/plans/bug-fix-list.json)"
|
|
51
52
|
echo ""
|
|
52
53
|
echo "Environment Variables:"
|
|
53
54
|
echo " SESSION_TIMEOUT Timeout in seconds (default: 0 = no limit)"
|
|
@@ -59,7 +60,7 @@ if [[ $# -lt 1 ]]; then
|
|
|
59
60
|
fi
|
|
60
61
|
|
|
61
62
|
BUG_ID="$1"
|
|
62
|
-
BUG_LIST="${2
|
|
63
|
+
BUG_LIST="${2:-.prizmkit/plans/bug-fix-list.json}"
|
|
63
64
|
|
|
64
65
|
if [[ ! "$BUG_LIST" = /* ]]; then
|
|
65
66
|
BUG_LIST="$(pwd)/$BUG_LIST"
|
|
@@ -9,16 +9,17 @@ set -euo pipefail
|
|
|
9
9
|
# the full pipeline.
|
|
10
10
|
#
|
|
11
11
|
# Usage:
|
|
12
|
-
# ./retry-feature.sh <feature-id> [feature-list.json]
|
|
12
|
+
# ./retry-feature.sh <feature-id> [.prizmkit/plans/feature-list.json]
|
|
13
13
|
#
|
|
14
14
|
# Examples:
|
|
15
15
|
# ./retry-feature.sh F-007
|
|
16
|
-
# ./retry-feature.sh F-007 feature-list.json
|
|
16
|
+
# ./retry-feature.sh F-007 .prizmkit/plans/feature-list.json
|
|
17
17
|
# SESSION_TIMEOUT=3600 ./retry-feature.sh F-007 # with 1h timeout
|
|
18
18
|
# ============================================================
|
|
19
19
|
|
|
20
20
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
21
|
-
|
|
21
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
22
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/features"
|
|
22
23
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
23
24
|
|
|
24
25
|
SESSION_TIMEOUT=${SESSION_TIMEOUT:-0}
|
|
@@ -47,10 +48,10 @@ AUTO_PUSH=${AUTO_PUSH:-0}
|
|
|
47
48
|
# ============================================================
|
|
48
49
|
|
|
49
50
|
if [[ $# -lt 1 ]]; then
|
|
50
|
-
echo "Usage: $0 <feature-id> [feature-list.json]"
|
|
51
|
+
echo "Usage: $0 <feature-id> [.prizmkit/plans/feature-list.json]"
|
|
51
52
|
echo ""
|
|
52
53
|
echo " feature-id Feature to retry (e.g. F-007)"
|
|
53
|
-
echo " feature-list.json Path to feature list (default: feature-list.json)"
|
|
54
|
+
echo " feature-list.json Path to feature list (default: .prizmkit/plans/feature-list.json)"
|
|
54
55
|
echo ""
|
|
55
56
|
echo "Environment Variables:"
|
|
56
57
|
echo " SESSION_TIMEOUT Timeout in seconds (default: 0 = no limit)"
|
|
@@ -60,7 +61,7 @@ if [[ $# -lt 1 ]]; then
|
|
|
60
61
|
fi
|
|
61
62
|
|
|
62
63
|
FEATURE_ID="$1"
|
|
63
|
-
FEATURE_LIST="${2
|
|
64
|
+
FEATURE_LIST="${2:-.prizmkit/plans/feature-list.json}"
|
|
64
65
|
|
|
65
66
|
# Resolve absolute path
|
|
66
67
|
if [[ ! "$FEATURE_LIST" = /* ]]; then
|
|
@@ -9,16 +9,17 @@ set -euo pipefail
|
|
|
9
9
|
# the full refactor pipeline.
|
|
10
10
|
#
|
|
11
11
|
# Usage:
|
|
12
|
-
# ./retry-refactor.sh <refactor-id> [refactor-list.json]
|
|
12
|
+
# ./retry-refactor.sh <refactor-id> [.prizmkit/plans/refactor-list.json]
|
|
13
13
|
#
|
|
14
14
|
# Examples:
|
|
15
15
|
# ./retry-refactor.sh R-001
|
|
16
|
-
# ./retry-refactor.sh R-001 refactor-list.json
|
|
16
|
+
# ./retry-refactor.sh R-001 .prizmkit/plans/refactor-list.json
|
|
17
17
|
# SESSION_TIMEOUT=3600 ./retry-refactor.sh R-001
|
|
18
18
|
# ============================================================
|
|
19
19
|
|
|
20
20
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
21
|
-
|
|
21
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
22
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/refactor"
|
|
22
23
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
23
24
|
|
|
24
25
|
SESSION_TIMEOUT=${SESSION_TIMEOUT:-0}
|
|
@@ -39,10 +40,10 @@ detect_stream_json_support "$CLI_CMD"
|
|
|
39
40
|
# ============================================================
|
|
40
41
|
|
|
41
42
|
if [[ $# -lt 1 ]]; then
|
|
42
|
-
echo "Usage: $0 <refactor-id> [refactor-list.json]"
|
|
43
|
+
echo "Usage: $0 <refactor-id> [.prizmkit/plans/refactor-list.json]"
|
|
43
44
|
echo ""
|
|
44
45
|
echo " refactor-id Refactor to retry (e.g. R-001)"
|
|
45
|
-
echo " refactor-list.json Path to refactor list (default: refactor-list.json)"
|
|
46
|
+
echo " refactor-list.json Path to refactor list (default: .prizmkit/plans/refactor-list.json)"
|
|
46
47
|
echo ""
|
|
47
48
|
echo "Environment Variables:"
|
|
48
49
|
echo " SESSION_TIMEOUT Timeout in seconds (default: 0 = no limit)"
|
|
@@ -51,7 +52,7 @@ if [[ $# -lt 1 ]]; then
|
|
|
51
52
|
fi
|
|
52
53
|
|
|
53
54
|
REFACTOR_ID="$1"
|
|
54
|
-
REFACTOR_LIST="${2
|
|
55
|
+
REFACTOR_LIST="${2:-.prizmkit/plans/refactor-list.json}"
|
|
55
56
|
|
|
56
57
|
if [[ ! "$REFACTOR_LIST" = /* ]]; then
|
|
57
58
|
REFACTOR_LIST="$(pwd)/$REFACTOR_LIST"
|
|
@@ -5,12 +5,12 @@ set -euo pipefail
|
|
|
5
5
|
# dev-pipeline/run-bugfix.sh - Autonomous Bug Fix Pipeline Runner
|
|
6
6
|
#
|
|
7
7
|
# Drives the prizm-dev-team through iterative AI CLI sessions to
|
|
8
|
-
# fix bugs from a bug-fix-list.json specification.
|
|
8
|
+
# fix bugs from a .prizmkit/plans/bug-fix-list.json specification.
|
|
9
9
|
#
|
|
10
10
|
# Usage:
|
|
11
|
-
# ./run-bugfix.sh run [bug-fix-list.json] Run all bugs
|
|
11
|
+
# ./run-bugfix.sh run [.prizmkit/plans/bug-fix-list.json] Run all bugs
|
|
12
12
|
# ./run-bugfix.sh run <bug-id> [options] Run a single bug
|
|
13
|
-
# ./run-bugfix.sh status [bug-fix-list.json] Show pipeline status
|
|
13
|
+
# ./run-bugfix.sh status [.prizmkit/plans/bug-fix-list.json] Show pipeline status
|
|
14
14
|
# ./run-bugfix.sh reset Clear all state
|
|
15
15
|
#
|
|
16
16
|
# Environment Variables:
|
|
@@ -30,7 +30,8 @@ set -euo pipefail
|
|
|
30
30
|
# ============================================================
|
|
31
31
|
|
|
32
32
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
33
|
-
|
|
33
|
+
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
34
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/bugfix"
|
|
34
35
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
35
36
|
|
|
36
37
|
# Configuration
|
|
@@ -272,7 +273,7 @@ sys.exit(0)
|
|
|
272
273
|
--max-retries "$max_retries" \
|
|
273
274
|
--action update >/dev/null 2>&1 || true
|
|
274
275
|
|
|
275
|
-
# Commit bug-fix-list.json status update (pipeline management commit)
|
|
276
|
+
# Commit .prizmkit/plans/bug-fix-list.json status update (pipeline management commit)
|
|
276
277
|
if ! git -C "$project_root" diff --quiet "$bug_list" 2>/dev/null; then
|
|
277
278
|
git -C "$project_root" add "$bug_list"
|
|
278
279
|
git -C "$project_root" commit --no-verify -m "chore($bug_id): update bug status" 2>/dev/null || true
|
|
@@ -374,7 +375,7 @@ run_one() {
|
|
|
374
375
|
fi
|
|
375
376
|
|
|
376
377
|
if [[ -z "$bug_list" ]]; then
|
|
377
|
-
bug_list="bug-fix-list.json"
|
|
378
|
+
bug_list=".prizmkit/plans/bug-fix-list.json"
|
|
378
379
|
fi
|
|
379
380
|
if [[ ! "$bug_list" = /* ]]; then
|
|
380
381
|
bug_list="$(pwd)/$bug_list"
|
|
@@ -403,7 +404,7 @@ run_one() {
|
|
|
403
404
|
local _gitignore_path
|
|
404
405
|
_gitignore_path="$(cd "$SCRIPT_DIR/.." && pwd)/.gitignore"
|
|
405
406
|
local _state_rel
|
|
406
|
-
_state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo "
|
|
407
|
+
_state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo ".prizmkit/state/bugfix")
|
|
407
408
|
if [[ -f "$_gitignore_path" ]]; then
|
|
408
409
|
if ! grep -qF "$_state_rel" "$_gitignore_path" 2>/dev/null; then
|
|
409
410
|
printf '\n# Pipeline runtime state (auto-added by dev-pipeline)\n%s/\n' "$_state_rel" >> "$_gitignore_path"
|
|
@@ -591,7 +592,7 @@ sys.exit(1)
|
|
|
591
592
|
# ============================================================
|
|
592
593
|
|
|
593
594
|
main() {
|
|
594
|
-
local bug_list="${1
|
|
595
|
+
local bug_list="${1:-.prizmkit/plans/bug-fix-list.json}"
|
|
595
596
|
|
|
596
597
|
if [[ ! "$bug_list" = /* ]]; then
|
|
597
598
|
bug_list="$(pwd)/$bug_list"
|
|
@@ -601,7 +602,7 @@ main() {
|
|
|
601
602
|
if [[ ! -f "$bug_list" ]]; then
|
|
602
603
|
log_error "Bug fix list not found: $bug_list"
|
|
603
604
|
log_info "Create a bug fix list first using the bug-planner skill,"
|
|
604
|
-
log_info "or provide a path: ./run-bugfix.sh run <path-to
|
|
605
|
+
log_info "or provide a path: ./run-bugfix.sh run <path-to-.prizmkit/plans/bug-fix-list.json>"
|
|
605
606
|
exit 1
|
|
606
607
|
fi
|
|
607
608
|
|
|
@@ -633,7 +634,7 @@ main() {
|
|
|
633
634
|
local _gitignore_path
|
|
634
635
|
_gitignore_path="$(cd "$SCRIPT_DIR/.." && pwd)/.gitignore"
|
|
635
636
|
local _state_rel
|
|
636
|
-
_state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo "
|
|
637
|
+
_state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo ".prizmkit/state/bugfix")
|
|
637
638
|
if [[ -f "$_gitignore_path" ]]; then
|
|
638
639
|
if ! grep -qF "$_state_rel" "$_gitignore_path" 2>/dev/null; then
|
|
639
640
|
printf '\n# Pipeline runtime state (auto-added by dev-pipeline)\n%s/\n' "$_state_rel" >> "$_gitignore_path"
|
|
@@ -788,9 +789,9 @@ show_help() {
|
|
|
788
789
|
echo "Usage: $0 <command> [options]"
|
|
789
790
|
echo ""
|
|
790
791
|
echo "Commands:"
|
|
791
|
-
echo " run [bug-fix-list.json] Run all bugs by severity/priority order"
|
|
792
|
+
echo " run [.prizmkit/plans/bug-fix-list.json] Run all bugs by severity/priority order"
|
|
792
793
|
echo " run <bug-id> [options] Run a single bug fix"
|
|
793
|
-
echo " status [bug-fix-list.json] Show bug fix pipeline status"
|
|
794
|
+
echo " status [.prizmkit/plans/bug-fix-list.json] Show bug fix pipeline status"
|
|
794
795
|
echo " reset Clear all bugfix state"
|
|
795
796
|
echo " help Show this help message"
|
|
796
797
|
echo ""
|
|
@@ -812,7 +813,7 @@ show_help() {
|
|
|
812
813
|
echo ""
|
|
813
814
|
echo "Examples:"
|
|
814
815
|
echo " ./run-bugfix.sh run # Run all bugs"
|
|
815
|
-
echo " ./run-bugfix.sh run bug-fix-list.json # Custom bug list"
|
|
816
|
+
echo " ./run-bugfix.sh run .prizmkit/plans/bug-fix-list.json # Custom bug list"
|
|
816
817
|
echo " ./run-bugfix.sh run B-001 --dry-run # Inspect generated prompt"
|
|
817
818
|
echo " ./run-bugfix.sh run B-001 --clean # Clean artifacts + reset + run"
|
|
818
819
|
echo " ./run-bugfix.sh run B-001 --no-reset # Retry without resetting status"
|
|
@@ -827,7 +828,7 @@ case "${1:-run}" in
|
|
|
827
828
|
if [[ "${1:-}" =~ ^[Bb]-[0-9]+ ]]; then
|
|
828
829
|
run_one "$@"
|
|
829
830
|
else
|
|
830
|
-
main "${1
|
|
831
|
+
main "${1:-.prizmkit/plans/bug-fix-list.json}"
|
|
831
832
|
fi
|
|
832
833
|
;;
|
|
833
834
|
status)
|
|
@@ -837,7 +838,7 @@ case "${1:-run}" in
|
|
|
837
838
|
exit 1
|
|
838
839
|
fi
|
|
839
840
|
python3 "$SCRIPTS_DIR/update-bug-status.py" \
|
|
840
|
-
--bug-list "${2
|
|
841
|
+
--bug-list "${2:-.prizmkit/plans/bug-fix-list.json}" \
|
|
841
842
|
--state-dir "$STATE_DIR" \
|
|
842
843
|
--action status
|
|
843
844
|
;;
|
|
@@ -9,9 +9,9 @@ set -euo pipefail
|
|
|
9
9
|
# from a feature list.
|
|
10
10
|
#
|
|
11
11
|
# Usage:
|
|
12
|
-
# ./run-feature.sh run [feature-list.json] Run all features
|
|
12
|
+
# ./run-feature.sh run [.prizmkit/plans/feature-list.json] Run all features
|
|
13
13
|
# ./run-feature.sh run <feature-id> [options] Run a single feature
|
|
14
|
-
# ./run-feature.sh status [feature-list.json] Show pipeline status
|
|
14
|
+
# ./run-feature.sh status [.prizmkit/plans/feature-list.json] Show pipeline status
|
|
15
15
|
# ./run-feature.sh reset Clear all state
|
|
16
16
|
#
|
|
17
17
|
# Environment Variables:
|
|
@@ -33,7 +33,8 @@ set -euo pipefail
|
|
|
33
33
|
# ============================================================
|
|
34
34
|
|
|
35
35
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
36
|
-
|
|
36
|
+
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
37
|
+
STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/features"
|
|
37
38
|
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
|
|
38
39
|
|
|
39
40
|
# Configuration (override via environment variables)
|
|
@@ -345,7 +346,7 @@ sys.exit(0)
|
|
|
345
346
|
--max-retries "$max_retries" \
|
|
346
347
|
--action update 2>&1) || {
|
|
347
348
|
log_error "Failed to update feature status: $update_output"
|
|
348
|
-
log_error "feature-list.json may be out of sync. Manual intervention needed."
|
|
349
|
+
log_error ".prizmkit/plans/feature-list.json may be out of sync. Manual intervention needed."
|
|
349
350
|
}
|
|
350
351
|
|
|
351
352
|
# Commit feature status update (pipeline management commit)
|
|
@@ -514,7 +515,7 @@ run_one() {
|
|
|
514
515
|
|
|
515
516
|
# Default feature list
|
|
516
517
|
if [[ -z "$feature_list" ]]; then
|
|
517
|
-
feature_list="feature-list.json"
|
|
518
|
+
feature_list=".prizmkit/plans/feature-list.json"
|
|
518
519
|
fi
|
|
519
520
|
|
|
520
521
|
# Resolve to absolute path
|
|
@@ -832,7 +833,7 @@ sys.exit(1)
|
|
|
832
833
|
# ============================================================
|
|
833
834
|
|
|
834
835
|
main() {
|
|
835
|
-
local feature_list="${1
|
|
836
|
+
local feature_list="${1:-.prizmkit/plans/feature-list.json}"
|
|
836
837
|
local features_filter="${2:-}"
|
|
837
838
|
|
|
838
839
|
# Resolve to absolute path
|
|
@@ -846,18 +847,18 @@ main() {
|
|
|
846
847
|
if [[ ! -f "$feature_list" ]]; then
|
|
847
848
|
log_error "Feature list not found: $feature_list"
|
|
848
849
|
log_info "Create a feature list first using the feature-planner skill,"
|
|
849
|
-
log_info "or provide a path: ./run-feature.sh run <path-to
|
|
850
|
+
log_info "or provide a path: ./run-feature.sh run <path-to-.prizmkit/plans/feature-list.json>"
|
|
850
851
|
exit 1
|
|
851
852
|
fi
|
|
852
853
|
|
|
853
|
-
# Validate feature-list.json is at project root
|
|
854
|
+
# Validate .prizmkit/plans/feature-list.json is at project root
|
|
854
855
|
local fl_dir
|
|
855
856
|
fl_dir="$(cd "$(dirname "$feature_list")" && pwd)"
|
|
856
857
|
local project_root
|
|
857
858
|
project_root="$(pwd)"
|
|
858
859
|
if [[ "$fl_dir" != "$project_root" ]]; then
|
|
859
|
-
log_warn "feature-list.json is not at project root ($project_root), found at $fl_dir"
|
|
860
|
-
log_warn "Pipeline expects feature-list.json at project root. Proceeding but results may be unstable."
|
|
860
|
+
log_warn ".prizmkit/plans/feature-list.json is not at project root ($project_root), found at $fl_dir"
|
|
861
|
+
log_warn "Pipeline expects .prizmkit/plans/feature-list.json at project root. Proceeding but results may be unstable."
|
|
861
862
|
fi
|
|
862
863
|
|
|
863
864
|
check_dependencies
|
|
@@ -888,7 +889,7 @@ main() {
|
|
|
888
889
|
local _gitignore_path
|
|
889
890
|
_gitignore_path="$(cd "$SCRIPT_DIR/.." && pwd)/.gitignore"
|
|
890
891
|
local _state_rel
|
|
891
|
-
_state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo "
|
|
892
|
+
_state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo ".prizmkit/state/features")
|
|
892
893
|
if [[ -f "$_gitignore_path" ]]; then
|
|
893
894
|
if ! grep -qF "$_state_rel" "$_gitignore_path" 2>/dev/null; then
|
|
894
895
|
printf '\n# Pipeline runtime state (auto-added by dev-pipeline)\n%s/\n' "$_state_rel" >> "$_gitignore_path"
|
|
@@ -1158,10 +1159,10 @@ show_help() {
|
|
|
1158
1159
|
echo "Usage: $0 <command> [options]"
|
|
1159
1160
|
echo ""
|
|
1160
1161
|
echo "Commands:"
|
|
1161
|
-
echo " run [feature-list.json] [--features <filter>] Run features (all or filtered subset)"
|
|
1162
|
+
echo " run [.prizmkit/plans/feature-list.json] [--features <filter>] Run features (all or filtered subset)"
|
|
1162
1163
|
echo " run <feature-id> [options] Run a single feature"
|
|
1163
|
-
echo " status [feature-list.json] Show pipeline status"
|
|
1164
|
-
echo " unskip [feature-id] [feature-list.json] Reset auto-skipped/failed features"
|
|
1164
|
+
echo " status [.prizmkit/plans/feature-list.json] Show pipeline status"
|
|
1165
|
+
echo " unskip [feature-id] [.prizmkit/plans/feature-list.json] Reset auto-skipped/failed features"
|
|
1165
1166
|
echo " test-cli Test AI CLI: show detected CLI, version, and model"
|
|
1166
1167
|
echo " reset Clear all state and start fresh"
|
|
1167
1168
|
echo " help Show this help message"
|
|
@@ -1217,7 +1218,7 @@ case "${1:-run}" in
|
|
|
1217
1218
|
run_one "$@"
|
|
1218
1219
|
else
|
|
1219
1220
|
# Parse positional and --features flag
|
|
1220
|
-
_run_feature_list="feature-list.json"
|
|
1221
|
+
_run_feature_list=".prizmkit/plans/feature-list.json"
|
|
1221
1222
|
_run_features_filter=""
|
|
1222
1223
|
while [[ $# -gt 0 ]]; do
|
|
1223
1224
|
case "$1" in
|
|
@@ -1246,7 +1247,7 @@ case "${1:-run}" in
|
|
|
1246
1247
|
exit 1
|
|
1247
1248
|
fi
|
|
1248
1249
|
python3 "$SCRIPTS_DIR/update-feature-status.py" \
|
|
1249
|
-
--feature-list "${2
|
|
1250
|
+
--feature-list "${2:-.prizmkit/plans/feature-list.json}" \
|
|
1250
1251
|
--state-dir "$STATE_DIR" \
|
|
1251
1252
|
--action status
|
|
1252
1253
|
;;
|
|
@@ -1319,7 +1320,7 @@ case "${1:-run}" in
|
|
|
1319
1320
|
log_error "No pipeline state found. Run './run-feature.sh run' first."
|
|
1320
1321
|
exit 1
|
|
1321
1322
|
fi
|
|
1322
|
-
_unskip_feature_list="feature-list.json"
|
|
1323
|
+
_unskip_feature_list=".prizmkit/plans/feature-list.json"
|
|
1323
1324
|
_unskip_feature_id=""
|
|
1324
1325
|
shift || true
|
|
1325
1326
|
# Parse arguments: optional feature-id and feature-list path
|