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
@@ -5,12 +5,12 @@ set -euo pipefail
5
5
  # dev-pipeline/run-refactor.sh - Autonomous Refactor Pipeline Runner
6
6
  #
7
7
  # Drives the prizm-dev-team through iterative AI CLI sessions to
8
- # execute refactors from a refactor-list.json specification.
8
+ # execute refactors from a .prizmkit/plans/refactor-list.json specification.
9
9
  #
10
10
  # Usage:
11
- # ./run-refactor.sh run [refactor-list.json] Run all refactors
11
+ # ./run-refactor.sh run [.prizmkit/plans/refactor-list.json] Run all refactors
12
12
  # ./run-refactor.sh run <refactor-id> [options] Run a single refactor
13
- # ./run-refactor.sh status [refactor-list.json] Show pipeline status
13
+ # ./run-refactor.sh status [.prizmkit/plans/refactor-list.json] Show pipeline status
14
14
  # ./run-refactor.sh reset Clear all state
15
15
  #
16
16
  # Environment Variables:
@@ -31,7 +31,8 @@ set -euo pipefail
31
31
  # ============================================================
32
32
 
33
33
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
34
- STATE_DIR="$SCRIPT_DIR/refactor-state"
34
+ PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
35
+ STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/refactor"
35
36
  SCRIPTS_DIR="$SCRIPT_DIR/scripts"
36
37
 
37
38
  # Configuration
@@ -239,7 +240,7 @@ spawn_and_wait_session() {
239
240
  --max-retries "$max_retries" \
240
241
  --action update >/dev/null 2>&1 || true
241
242
 
242
- # Commit refactor-list.json status update (pipeline management commit)
243
+ # Commit .prizmkit/plans/refactor-list.json status update (pipeline management commit)
243
244
  if ! git -C "$project_root" diff --quiet "$refactor_list" 2>/dev/null; then
244
245
  git -C "$project_root" add "$refactor_list"
245
246
  git -C "$project_root" commit --no-verify -m "chore($refactor_id): update refactor status" 2>/dev/null || true
@@ -337,7 +338,7 @@ run_one() {
337
338
  fi
338
339
 
339
340
  if [[ -z "$refactor_list" ]]; then
340
- refactor_list="refactor-list.json"
341
+ refactor_list=".prizmkit/plans/refactor-list.json"
341
342
  fi
342
343
  if [[ ! "$refactor_list" = /* ]]; then
343
344
  refactor_list="$(pwd)/$refactor_list"
@@ -366,7 +367,7 @@ run_one() {
366
367
  local _gitignore_path
367
368
  _gitignore_path="$(cd "$SCRIPT_DIR/.." && pwd)/.gitignore"
368
369
  local _state_rel
369
- _state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo "dev-pipeline/refactor-state")
370
+ _state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo ".prizmkit/state/refactor")
370
371
  if [[ -f "$_gitignore_path" ]]; then
371
372
  if ! grep -qF "$_state_rel" "$_gitignore_path" 2>/dev/null; then
372
373
  printf '\n# Pipeline runtime state (auto-added by dev-pipeline)\n%s/\n' "$_state_rel" >> "$_gitignore_path"
@@ -521,7 +522,7 @@ sys.exit(1)
521
522
  # ============================================================
522
523
 
523
524
  main() {
524
- local refactor_list="${1:-refactor-list.json}"
525
+ local refactor_list="${1:-.prizmkit/plans/refactor-list.json}"
525
526
 
526
527
  if [[ ! "$refactor_list" = /* ]]; then
527
528
  refactor_list="$(pwd)/$refactor_list"
@@ -531,7 +532,7 @@ main() {
531
532
  if [[ ! -f "$refactor_list" ]]; then
532
533
  log_error "Refactor list not found: $refactor_list"
533
534
  log_info "Create a refactor list first using the refactor-planner skill,"
534
- log_info "or provide a path: ./run-refactor.sh run <path-to-refactor-list.json>"
535
+ log_info "or provide a path: ./run-refactor.sh run <path-to-.prizmkit/plans/refactor-list.json>"
535
536
  exit 1
536
537
  fi
537
538
 
@@ -563,7 +564,7 @@ main() {
563
564
  local _gitignore_path
564
565
  _gitignore_path="$(cd "$SCRIPT_DIR/.." && pwd)/.gitignore"
565
566
  local _state_rel
566
- _state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo "dev-pipeline/refactor-state")
567
+ _state_rel=$(python3 -c "import os; print(os.path.relpath('$STATE_DIR', '$(cd "$SCRIPT_DIR/.." && pwd)'))" 2>/dev/null || echo ".prizmkit/state/refactor")
567
568
  if [[ -f "$_gitignore_path" ]]; then
568
569
  if ! grep -qF "$_state_rel" "$_gitignore_path" 2>/dev/null; then
569
570
  printf '\n# Pipeline runtime state (auto-added by dev-pipeline)\n%s/\n' "$_state_rel" >> "$_gitignore_path"
@@ -723,9 +724,9 @@ show_help() {
723
724
  echo "Usage: $0 <command> [options]"
724
725
  echo ""
725
726
  echo "Commands:"
726
- echo " run [refactor-list.json] Run all refactors in dependency-topological order"
727
+ echo " run [.prizmkit/plans/refactor-list.json] Run all refactors in dependency-topological order"
727
728
  echo " run <refactor-id> [options] Run a single refactor"
728
- echo " status [refactor-list.json] Show refactor pipeline status"
729
+ echo " status [.prizmkit/plans/refactor-list.json] Show refactor pipeline status"
729
730
  echo " reset Clear all refactor state"
730
731
  echo " help Show this help message"
731
732
  echo ""
@@ -746,7 +747,7 @@ show_help() {
746
747
  echo ""
747
748
  echo "Examples:"
748
749
  echo " ./run-refactor.sh run # Run all refactors"
749
- echo " ./run-refactor.sh run refactor-list.json # Custom refactor list"
750
+ echo " ./run-refactor.sh run .prizmkit/plans/refactor-list.json # Custom refactor list"
750
751
  echo " ./run-refactor.sh run R-001 --dry-run # Inspect generated prompt"
751
752
  echo " ./run-refactor.sh run R-001 --timeout 3600 # 1h timeout"
752
753
  echo " ./run-refactor.sh status # Show status"
@@ -760,7 +761,7 @@ case "${1:-run}" in
760
761
  if [[ "${1:-}" =~ ^[Rr]-[0-9]+ ]]; then
761
762
  run_one "$@"
762
763
  else
763
- main "${1:-refactor-list.json}"
764
+ main "${1:-.prizmkit/plans/refactor-list.json}"
764
765
  fi
765
766
  ;;
766
767
  status)
@@ -770,7 +771,7 @@ case "${1:-run}" in
770
771
  exit 1
771
772
  fi
772
773
  python3 "$SCRIPTS_DIR/update-refactor-status.py" \
773
- --refactor-list "${2:-refactor-list.json}" \
774
+ --refactor-list "${2:-.prizmkit/plans/refactor-list.json}" \
774
775
  --state-dir "$STATE_DIR" \
775
776
  --action status
776
777
  ;;
@@ -9,8 +9,8 @@ Policies:
9
9
  until within threshold.
10
10
 
11
11
  Usage:
12
- python3 cleanup-logs.py --state-dir dev-pipeline/state
13
- python3 cleanup-logs.py --state-dir dev-pipeline/bugfix-state --retention-days 30 --max-total-mb 2048
12
+ python3 cleanup-logs.py --state-dir .prizmkit/state/features
13
+ python3 cleanup-logs.py --state-dir .prizmkit/state/bugfix --retention-days 30 --max-total-mb 2048
14
14
  """
15
15
 
16
16
  import argparse
@@ -35,7 +35,7 @@ def parse_args():
35
35
  parser.add_argument(
36
36
  "--state-dir",
37
37
  required=True,
38
- help="Path to the state/ directory",
38
+ help="Path to the state directory (default: .prizmkit/state/features)",
39
39
  )
40
40
  parser.add_argument(
41
41
  "--feature-id",
@@ -57,7 +57,7 @@ def parse_args():
57
57
  parser.add_argument(
58
58
  "--feature-list",
59
59
  default=None,
60
- help="Path to feature-list.json (overrides pipeline.json reference)",
60
+ help="Path to .prizmkit/plans/feature-list.json (overrides pipeline.json reference)",
61
61
  )
62
62
  return parser.parse_args()
63
63
 
@@ -285,7 +285,7 @@ def check_dependency_deadlock(feature_id, feature_list_data, state_dir):
285
285
 
286
286
 
287
287
  def find_feature_list(state_dir):
288
- """Attempt to locate and load feature-list.json via pipeline.json reference.
288
+ """Attempt to locate and load .prizmkit/plans/feature-list.json via pipeline.json reference.
289
289
 
290
290
  Resolves feature_list_path relative to state_dir when it is a relative path,
291
291
  so that pipeline.json is portable across machines and directory structures.
@@ -38,13 +38,13 @@ def parse_args():
38
38
  parser = argparse.ArgumentParser(
39
39
  description=(
40
40
  "Generate a session-specific bootstrap prompt from a template "
41
- "and feature-list.json."
41
+ "and .prizmkit/plans/feature-list.json."
42
42
  )
43
43
  )
44
44
  parser.add_argument(
45
45
  "--feature-list",
46
46
  required=True,
47
- help="Path to feature-list.json",
47
+ help="Path to .prizmkit/plans/feature-list.json",
48
48
  )
49
49
  parser.add_argument(
50
50
  "--feature-id",
@@ -348,7 +348,7 @@ def get_prev_session_status(state_dir, feature_id):
348
348
 
349
349
 
350
350
  def _read_project_brief(project_root):
351
- """Read project-brief.md from project root if it exists.
351
+ """Read project-brief.md from new or old location with fallback.
352
352
 
353
353
  Returns the file content as a string, or a fallback message if absent.
354
354
  This brief is generated by app-planner during interactive planning and
@@ -356,13 +356,25 @@ def _read_project_brief(project_root):
356
356
  marked [ ] for pending or [x] for completed. Feature sessions should mark
357
357
  items [x] and append key file paths when implementing relevant ideas.
358
358
  """
359
- brief_path = os.path.join(project_root, "project-brief.md")
360
- if os.path.isfile(brief_path):
361
- try:
362
- with open(brief_path, "r", encoding="utf-8") as f:
363
- return f.read().strip()
364
- except IOError:
365
- return "(project-brief.md exists but could not be read)"
359
+ # Check both new and old paths for backward compatibility
360
+ new_path = os.path.join(project_root, ".prizmkit", "plans", "project-brief.md")
361
+ old_path = os.path.join(project_root, "project-brief.md")
362
+
363
+ for brief_path in [new_path, old_path]:
364
+ if os.path.isfile(brief_path):
365
+ try:
366
+ with open(brief_path, "r", encoding="utf-8") as f:
367
+ content = f.read().strip()
368
+ if brief_path == old_path:
369
+ # Warn user about old path
370
+ import sys
371
+ print("⚠️ Migration notice: project-brief.md found in root. "
372
+ "Please move to .prizmkit/plans/project-brief.md",
373
+ file=sys.stderr)
374
+ return content
375
+ except IOError:
376
+ return "(project-brief.md exists but could not be read)"
377
+
366
378
  return "(No project brief available)"
367
379
 
368
380
 
@@ -1179,12 +1191,12 @@ def build_replacements(args, feature, features, global_context, script_dir):
1179
1191
  validator_scripts_dir = os.path.join(project_root, "dev-pipeline", "scripts")
1180
1192
  init_script_path = os.path.join(validator_scripts_dir, "init-dev-team.py")
1181
1193
 
1182
- # Session status path (relative to dev-pipeline/)
1194
+ # Session status path (relative to project root)
1183
1195
  session_status_path = os.path.join(
1184
- "dev-pipeline", "state", "features", args.feature_id,
1196
+ ".prizmkit", "state", "features", args.feature_id,
1185
1197
  "sessions", args.session_id, "session-status.json",
1186
1198
  )
1187
- # Make it relative from project root
1199
+ # Make it absolute from project root
1188
1200
  session_status_abs = os.path.join(project_root, session_status_path)
1189
1201
 
1190
1202
  prev_status = get_prev_session_status(args.state_dir, args.feature_id)
@@ -1221,7 +1233,7 @@ def build_replacements(args, feature, features, global_context, script_dir):
1221
1233
  critic_enabled = bool(feature.get("critic", False))
1222
1234
 
1223
1235
  # Determine critic count (from feature field, default 1)
1224
- # Multi-critic voting (3) must be explicitly set by the user in feature-list.json
1236
+ # Multi-critic voting (3) must be explicitly set by the user in .prizmkit/plans/feature-list.json
1225
1237
  critic_count = feature.get("critic_count", 1)
1226
1238
 
1227
1239
  # Guard: if critic enabled but agent file missing, force disable and warn
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
- """Generate a session-specific bug fix bootstrap prompt from template and bug-fix-list.json.
2
+ """Generate a session-specific bug fix bootstrap prompt from template and .prizmkit/plans/bug-fix-list.json.
3
3
 
4
- Reads the bugfix-bootstrap-prompt.md template and a bug-fix-list.json, resolves all
4
+ Reads the bugfix-bootstrap-prompt.md template and a .prizmkit/plans/bug-fix-list.json, resolves all
5
5
  {{PLACEHOLDER}} variables, handles conditional blocks, and writes the rendered
6
6
  prompt to the specified output path.
7
7
 
@@ -31,16 +31,16 @@ def parse_args():
31
31
  parser = argparse.ArgumentParser(
32
32
  description=(
33
33
  "Generate a session-specific bug fix bootstrap prompt from a template "
34
- "and bug-fix-list.json."
34
+ "and .prizmkit/plans/bug-fix-list.json."
35
35
  )
36
36
  )
37
- parser.add_argument("--bug-list", required=True, help="Path to bug-fix-list.json")
37
+ parser.add_argument("--bug-list", required=True, help="Path to .prizmkit/plans/bug-fix-list.json")
38
38
  parser.add_argument("--bug-id", required=True, help="Bug ID to generate prompt for (e.g. B-001)")
39
39
  parser.add_argument("--session-id", required=True, help="Session ID for this pipeline session")
40
40
  parser.add_argument("--run-id", required=True, help="Pipeline run ID")
41
41
  parser.add_argument("--retry-count", required=True, help="Current retry count")
42
42
  parser.add_argument("--resume-phase", required=True, help='Phase to resume from, or "null" for fresh start')
43
- parser.add_argument("--state-dir", default=None, help="State directory path for reading previous session info")
43
+ parser.add_argument("--state-dir", default=None, help="State directory (default: .prizmkit/state/bugfix)")
44
44
  parser.add_argument("--output", required=True, help="Output path for the rendered prompt")
45
45
  parser.add_argument("--template", default=None, help="Custom template path. Defaults to {script_dir}/../templates/bugfix-bootstrap-prompt.md")
46
46
  return parser.parse_args()
@@ -217,7 +217,7 @@ def build_replacements(args, bug, global_context, script_dir):
217
217
 
218
218
  # Session status path
219
219
  session_status_path = os.path.join(
220
- project_root, "dev-pipeline", "bugfix-state", "bugs", args.bug_id,
220
+ project_root, ".prizmkit", "state", "bugfix", "bugs", args.bug_id,
221
221
  "sessions", args.session_id, "session-status.json"
222
222
  )
223
223
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
- """Generate a session-specific refactor bootstrap prompt from template and refactor-list.json.
2
+ """Generate a session-specific refactor bootstrap prompt from template and .prizmkit/plans/refactor-list.json.
3
3
 
4
- Reads the refactor-bootstrap-prompt.md template and a refactor-list.json, resolves all
4
+ Reads the refactor-bootstrap-prompt.md template and a .prizmkit/plans/refactor-list.json, resolves all
5
5
  {{PLACEHOLDER}} variables, handles conditional blocks, and writes the rendered
6
6
  prompt to the specified output path.
7
7
 
@@ -30,16 +30,16 @@ def parse_args():
30
30
  parser = argparse.ArgumentParser(
31
31
  description=(
32
32
  "Generate a session-specific refactor bootstrap prompt from a template "
33
- "and refactor-list.json."
33
+ "and .prizmkit/plans/refactor-list.json."
34
34
  )
35
35
  )
36
- parser.add_argument("--refactor-list", required=True, help="Path to refactor-list.json")
36
+ parser.add_argument("--refactor-list", required=True, help="Path to .prizmkit/plans/refactor-list.json")
37
37
  parser.add_argument("--refactor-id", required=True, help="Refactor ID to generate prompt for (e.g. R-001)")
38
38
  parser.add_argument("--session-id", required=True, help="Session ID for this pipeline session")
39
39
  parser.add_argument("--run-id", required=True, help="Pipeline run ID")
40
40
  parser.add_argument("--retry-count", required=True, help="Current retry count")
41
41
  parser.add_argument("--resume-phase", required=True, help='Phase to resume from, or "null" for fresh start')
42
- parser.add_argument("--state-dir", default=None, help="State directory path for reading previous session info")
42
+ parser.add_argument("--state-dir", default=None, help="State directory (default: .prizmkit/state/refactor)")
43
43
  parser.add_argument("--output", required=True, help="Output path for the rendered prompt")
44
44
  parser.add_argument("--template", default=None, help="Custom template path. Defaults to {script_dir}/../templates/refactor-bootstrap-prompt.md")
45
45
  return parser.parse_args()
@@ -247,7 +247,7 @@ def build_replacements(args, refactor, global_context, script_dir):
247
247
 
248
248
  # Session status path
249
249
  session_status_path = os.path.join(
250
- project_root, "dev-pipeline", "refactor-state", "refactors", args.refactor_id,
250
+ project_root, ".prizmkit", "state", "refactor", "refactors", args.refactor_id,
251
251
  "sessions", args.session_id, "session-status.json"
252
252
  )
253
253
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python3
2
- """Initialize the bug-fix pipeline state directory from a bug-fix-list.json file.
2
+ """Initialize the bug-fix pipeline state directory from a .prizmkit/plans/bug-fix-list.json file.
3
3
 
4
4
  Validates the bug fix list schema, sorts by priority/severity, and creates
5
5
  the state directory structure with pipeline and per-bug status files.
@@ -40,17 +40,17 @@ VALID_STATUSES = [
40
40
 
41
41
  def parse_args():
42
42
  parser = argparse.ArgumentParser(
43
- description="Initialize bug-fix pipeline state from a bug-fix-list.json file."
43
+ description="Initialize bug-fix pipeline state from a .prizmkit/plans/bug-fix-list.json file."
44
44
  )
45
45
  parser.add_argument(
46
46
  "--bug-list",
47
47
  required=True,
48
- help="Path to the bug-fix-list.json file",
48
+ help="Path to the .prizmkit/plans/bug-fix-list.json file",
49
49
  )
50
50
  parser.add_argument(
51
51
  "--state-dir",
52
52
  required=True,
53
- help="Path to the state directory to create/initialize",
53
+ help="Path to the state directory (default: .prizmkit/state/bugfix)",
54
54
  )
55
55
  return parser.parse_args()
56
56
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python3
2
- """Initialize the dev-pipeline state directory from a feature-list.json file.
2
+ """Initialize the dev-pipeline state directory from a .prizmkit/plans/feature-list.json file.
3
3
 
4
4
  Validates the feature list schema, checks dependency DAG for cycles,
5
5
  and creates the state directory structure with pipeline and feature status files.
@@ -35,17 +35,17 @@ REQUIRED_FEATURE_FIELDS = [
35
35
 
36
36
  def parse_args():
37
37
  parser = argparse.ArgumentParser(
38
- description="Initialize dev-pipeline state from a feature-list.json file."
38
+ description="Initialize dev-pipeline state from a .prizmkit/plans/feature-list.json file."
39
39
  )
40
40
  parser.add_argument(
41
41
  "--feature-list",
42
42
  required=True,
43
- help="Path to the feature-list.json file",
43
+ help="Path to the .prizmkit/plans/feature-list.json file",
44
44
  )
45
45
  parser.add_argument(
46
46
  "--state-dir",
47
47
  required=True,
48
- help="Path to the state directory to create/initialize",
48
+ help="Path to the state directory (default: .prizmkit/state/features)",
49
49
  )
50
50
  return parser.parse_args()
51
51
 
@@ -283,7 +283,7 @@ def create_state_directory(state_dir, feature_list_path, features):
283
283
  sessions_dir = os.path.join(feature_dir, "sessions")
284
284
  os.makedirs(sessions_dir, exist_ok=True)
285
285
 
286
- # Respect existing terminal status from feature-list.json
286
+ # Respect existing terminal status from .prizmkit/plans/feature-list.json
287
287
  fl_status = feature.get("status", "pending")
288
288
  init_status = fl_status if fl_status in TERMINAL_STATUSES else "pending"
289
289
 
@@ -316,13 +316,13 @@ def main():
316
316
  print(json.dumps(output, indent=2, ensure_ascii=False))
317
317
  sys.exit(1)
318
318
 
319
- # Warn if feature-list.json is not at project root
319
+ # Warn if .prizmkit/plans/feature-list.json is not at project root
320
320
  feature_list_dir = os.path.dirname(os.path.abspath(args.feature_list))
321
321
  indicators = ['.git', 'package.json', '.prizmkit']
322
322
  is_at_root = any(os.path.exists(os.path.join(feature_list_dir, i)) for i in indicators)
323
323
  if not is_at_root:
324
324
  sys.stderr.write(
325
- "Warning: feature-list.json may not be at project root: {}\n".format(feature_list_dir)
325
+ "Warning: .prizmkit/plans/feature-list.json may not be at project root: {}\n".format(feature_list_dir)
326
326
  )
327
327
 
328
328
  # Validate schema
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python3
2
- """Initialize the refactor pipeline state directory from a refactor-list.json file.
2
+ """Initialize the refactor pipeline state directory from a .prizmkit/plans/refactor-list.json file.
3
3
 
4
4
  Validates the refactor list schema, sorts by priority/complexity, checks for
5
5
  circular dependencies, and creates the state directory structure with pipeline
@@ -47,17 +47,17 @@ VALID_BEHAVIOR_STRATEGIES = ["test-gate", "snapshot", "manual"]
47
47
 
48
48
  def parse_args():
49
49
  parser = argparse.ArgumentParser(
50
- description="Initialize refactor pipeline state from a refactor-list.json file."
50
+ description="Initialize refactor pipeline state from a .prizmkit/plans/refactor-list.json file."
51
51
  )
52
52
  parser.add_argument(
53
53
  "--refactor-list",
54
54
  required=True,
55
- help="Path to the refactor-list.json file",
55
+ help="Path to the .prizmkit/plans/refactor-list.json file",
56
56
  )
57
57
  parser.add_argument(
58
58
  "--state-dir",
59
59
  required=True,
60
- help="Path to the state directory to create/initialize",
60
+ help="Path to the state directory (default: .prizmkit/state/refactor)",
61
61
  )
62
62
  return parser.parse_args()
63
63
 
@@ -57,8 +57,8 @@ def parse_args():
57
57
  parser = argparse.ArgumentParser(
58
58
  description="Core state machine for bug-fix pipeline bug status management."
59
59
  )
60
- parser.add_argument("--bug-list", required=True, help="Path to the bug-fix-list.json file")
61
- parser.add_argument("--state-dir", required=True, help="Path to the bugfix-state/ directory")
60
+ parser.add_argument("--bug-list", required=True, help="Path to the .prizmkit/plans/bug-fix-list.json file")
61
+ parser.add_argument("--state-dir", required=True, help="Path to the state directory (default: .prizmkit/state/bugfix)")
62
62
  parser.add_argument(
63
63
  "--action", required=True,
64
64
  choices=["get_next", "update", "status", "pause", "reset", "clean"],
@@ -128,7 +128,7 @@ def update_bug_in_list(bug_list_path, bug_id, new_status):
128
128
  found = True
129
129
  break
130
130
  if not found:
131
- return "Bug '{}' not found in bug-fix-list.json".format(bug_id)
131
+ return "Bug '{}' not found in .prizmkit/plans/bug-fix-list.json".format(bug_id)
132
132
  return write_json_file(bug_list_path, data)
133
133
 
134
134
 
@@ -238,7 +238,7 @@ def action_update(args, bug_list_path, state_dir):
238
238
  bs["resume_from_phase"] = None
239
239
  err = update_bug_in_list(bug_list_path, bug_id, "completed")
240
240
  if err:
241
- error_out("Failed to update bug-fix-list.json: {}".format(err))
241
+ error_out("Failed to update .prizmkit/plans/bug-fix-list.json: {}".format(err))
242
242
  return
243
243
  elif session_status == "merge_conflict":
244
244
  # Degraded outcome: keep artifacts for retry (branch preserves work)
@@ -257,7 +257,7 @@ def action_update(args, bug_list_path, state_dir):
257
257
 
258
258
  err = update_bug_in_list(bug_list_path, bug_id, target_status)
259
259
  if err:
260
- error_out("Failed to update bug-fix-list.json: {}".format(err))
260
+ error_out("Failed to update .prizmkit/plans/bug-fix-list.json: {}".format(err))
261
261
  return
262
262
  else:
263
263
  bs["retry_count"] = bs.get("retry_count", 0) + 1
@@ -281,7 +281,7 @@ def action_update(args, bug_list_path, state_dir):
281
281
 
282
282
  err = update_bug_in_list(bug_list_path, bug_id, target_status)
283
283
  if err:
284
- error_out("Failed to update bug-fix-list.json: {}".format(err))
284
+ error_out("Failed to update .prizmkit/plans/bug-fix-list.json: {}".format(err))
285
285
  return
286
286
 
287
287
  if session_status == "success" and session_id:
@@ -544,7 +544,7 @@ def action_reset(args, bug_list_path, state_dir):
544
544
 
545
545
  err = update_bug_in_list(bug_list_path, bug_id, "pending")
546
546
  if err:
547
- error_out("Failed to update bug-fix-list.json: {}".format(err))
547
+ error_out("Failed to update .prizmkit/plans/bug-fix-list.json: {}".format(err))
548
548
  return
549
549
 
550
550
  result = {
@@ -620,7 +620,7 @@ def action_clean(args, bug_list_path, state_dir):
620
620
 
621
621
  err = update_bug_in_list(bug_list_path, bug_id, "pending")
622
622
  if err:
623
- error_out("Failed to update bug-fix-list.json: {}".format(err))
623
+ error_out("Failed to update .prizmkit/plans/bug-fix-list.json: {}".format(err))
624
624
  return
625
625
 
626
626
  result = {