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.
Files changed (53) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/dev-pipeline/README.md +64 -64
  3. package/bundled/dev-pipeline/launch-bugfix-daemon.sh +11 -10
  4. package/bundled/dev-pipeline/launch-feature-daemon.sh +12 -11
  5. package/bundled/dev-pipeline/launch-refactor-daemon.sh +11 -10
  6. package/bundled/dev-pipeline/reset-bug.sh +10 -9
  7. package/bundled/dev-pipeline/reset-feature.sh +9 -8
  8. package/bundled/dev-pipeline/reset-refactor.sh +10 -9
  9. package/bundled/dev-pipeline/retry-bugfix.sh +7 -6
  10. package/bundled/dev-pipeline/retry-feature.sh +7 -6
  11. package/bundled/dev-pipeline/retry-refactor.sh +7 -6
  12. package/bundled/dev-pipeline/run-bugfix.sh +16 -15
  13. package/bundled/dev-pipeline/run-feature.sh +18 -17
  14. package/bundled/dev-pipeline/run-refactor.sh +16 -15
  15. package/bundled/dev-pipeline/scripts/cleanup-logs.py +2 -2
  16. package/bundled/dev-pipeline/scripts/detect-stuck.py +3 -3
  17. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +26 -14
  18. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +6 -6
  19. package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +6 -6
  20. package/bundled/dev-pipeline/scripts/init-bugfix-pipeline.py +4 -4
  21. package/bundled/dev-pipeline/scripts/init-pipeline.py +7 -7
  22. package/bundled/dev-pipeline/scripts/init-refactor-pipeline.py +4 -4
  23. package/bundled/dev-pipeline/scripts/update-bug-status.py +8 -8
  24. package/bundled/dev-pipeline/scripts/update-feature-status.py +25 -25
  25. package/bundled/dev-pipeline/scripts/update-refactor-status.py +8 -8
  26. package/bundled/dev-pipeline/templates/bug-fix-list-schema.json +1 -1
  27. package/bundled/dev-pipeline/templates/feature-list-schema.json +88 -22
  28. package/bundled/dev-pipeline/templates/refactor-list-schema.json +1 -1
  29. package/bundled/skills/_metadata.json +1 -1
  30. package/bundled/skills/app-planner/SKILL.md +11 -11
  31. package/bundled/skills/app-planner/references/project-brief-guide.md +1 -1
  32. package/bundled/skills/bug-fix-workflow/SKILL.md +5 -5
  33. package/bundled/skills/bug-planner/SKILL.md +21 -21
  34. package/bundled/skills/bug-planner/scripts/validate-bug-list.py +3 -3
  35. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +29 -29
  36. package/bundled/skills/feature-pipeline-launcher/SKILL.md +33 -33
  37. package/bundled/skills/feature-pipeline-launcher/scripts/preflight-check.py +3 -3
  38. package/bundled/skills/feature-planner/SKILL.md +27 -27
  39. package/bundled/skills/feature-planner/references/error-recovery.md +8 -8
  40. package/bundled/skills/feature-planner/scripts/validate-and-generate.py +18 -18
  41. package/bundled/skills/feature-workflow/SKILL.md +21 -21
  42. package/bundled/skills/prizmkit-verify/SKILL.md +1 -1
  43. package/bundled/skills/recovery-workflow/SKILL.md +14 -14
  44. package/bundled/skills/recovery-workflow/evals/evals.json +5 -5
  45. package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +43 -10
  46. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +31 -31
  47. package/bundled/skills/refactor-planner/SKILL.md +23 -23
  48. package/bundled/skills/refactor-planner/scripts/validate-and-generate-refactor.py +17 -17
  49. package/bundled/skills/refactor-workflow/SKILL.md +22 -22
  50. package/package.json +1 -1
  51. package/src/clean.js +4 -4
  52. package/src/gitignore-template.js +7 -8
  53. 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
- STATE_DIR="$SCRIPT_DIR/bugfix-state"
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:-bug-fix-list.json}"
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 bugfix-state/bugs/*/status.json
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
- STATE_DIR="$SCRIPT_DIR/state"
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:-feature-list.json}"
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
- STATE_DIR="$SCRIPT_DIR/refactor-state"
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:-refactor-list.json}"
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 refactor-state/refactors/*/status.json
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
- STATE_DIR="$SCRIPT_DIR/bugfix-state"
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:-bug-fix-list.json}"
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
- STATE_DIR="$SCRIPT_DIR/state"
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:-feature-list.json}"
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
- STATE_DIR="$SCRIPT_DIR/refactor-state"
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:-refactor-list.json}"
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
- STATE_DIR="$SCRIPT_DIR/bugfix-state"
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 "dev-pipeline/bugfix-state")
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:-bug-fix-list.json}"
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-bug-fix-list.json>"
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 "dev-pipeline/bugfix-state")
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:-bug-fix-list.json}"
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:-bug-fix-list.json}" \
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
- STATE_DIR="$SCRIPT_DIR/state"
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:-feature-list.json}"
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-feature-list.json>"
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 "dev-pipeline/state")
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:-feature-list.json}" \
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