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
@@ -1,5 +1,5 @@
1
1
  {
2
- "frameworkVersion": "1.1.7",
3
- "bundledAt": "2026-04-05T07:42:19.846Z",
4
- "bundledFrom": "b4e7b96"
2
+ "frameworkVersion": "1.1.8",
3
+ "bundledAt": "2026-04-05T15:42:52.119Z",
4
+ "bundledFrom": "7d1fa09"
5
5
  }
@@ -1,34 +1,34 @@
1
1
  # dev-pipeline
2
2
 
3
- Autonomous development pipeline that drives the `prizm-dev-team` multi-agent team through iterative AI CLI sessions, implementing a complete app feature-by-feature from a `feature-list.json` specification. Includes a parallel bug-fix pipeline for `bug-fix-list.json`.
3
+ Autonomous development pipeline that drives the `prizm-dev-team` multi-agent team through iterative AI CLI sessions, implementing a complete app feature-by-feature from a `.prizmkit/plans/feature-list.json` specification. Includes a parallel bug-fix pipeline for `.prizmkit/plans/bug-fix-list.json`.
4
4
 
5
5
  ## Prerequisites
6
6
 
7
7
  - Python 3.8+
8
8
  - [jq](https://jqlang.github.io/jq/) (`brew install jq`)
9
9
  - AI CLI in PATH: CodeBuddy (`cbc`) or Claude Code (`claude`)
10
- - `feature-list.json` generated by the `feature-planner` skill (for feature pipeline)
11
- - `bug-fix-list.json` generated by the `bug-planner` skill (for bug pipeline)
10
+ - `.prizmkit/plans/feature-list.json` generated by the `feature-planner` skill (for feature pipeline)
11
+ - `.prizmkit/plans/bug-fix-list.json` generated by the `bug-planner` skill (for bug pipeline)
12
12
 
13
13
  ## Quick Start
14
14
 
15
15
  ```bash
16
16
  # 1. Generate feature list (via feature-planner skill in an AI CLI session)
17
- # Output: feature-list.json in project root
17
+ # Output: .prizmkit/plans/feature-list.json in project root
18
18
 
19
19
  # 2. Initialize pipeline state
20
20
  python3 dev-pipeline/scripts/init-pipeline.py \
21
- --feature-list feature-list.json \
22
- --state-dir dev-pipeline/state
21
+ --feature-list .prizmkit/plans/feature-list.json \
22
+ --state-dir .prizmkit/state/features
23
23
 
24
24
  # 3. Run the pipeline (foreground, Ctrl+C to pause, re-run to resume)
25
- ./dev-pipeline/run-feature.sh run feature-list.json
25
+ ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
26
26
 
27
27
  # 4. Check progress at any time (from another terminal)
28
- ./dev-pipeline/run-feature.sh status feature-list.json
28
+ ./dev-pipeline/run-feature.sh status .prizmkit/plans/feature-list.json
29
29
 
30
30
  # 5. Or run as a background daemon
31
- ./dev-pipeline/launch-feature-daemon.sh start feature-list.json
31
+ ./dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json
32
32
  ```
33
33
 
34
34
  ---
@@ -40,9 +40,9 @@ python3 dev-pipeline/scripts/init-pipeline.py \
40
40
  Main entry point. Drives the full feature development pipeline.
41
41
 
42
42
  ```bash
43
- ./run-feature.sh run [feature-list.json] # Run all features
43
+ ./run-feature.sh run [.prizmkit/plans/feature-list.json] # Run all features
44
44
  ./run-feature.sh run <feature-id> [options] # Run a single feature (F-NNN)
45
- ./run-feature.sh status [feature-list.json] # Show pipeline status
45
+ ./run-feature.sh status [.prizmkit/plans/feature-list.json] # Show pipeline status
46
46
  ./run-feature.sh reset # Clear all state in state/
47
47
  ./run-feature.sh test-cli # Test AI CLI detection
48
48
  ./run-feature.sh help # Show usage help
@@ -61,7 +61,7 @@ Main entry point. Drives the full feature development pipeline.
61
61
 
62
62
  ```bash
63
63
  # Run all features
64
- ./dev-pipeline/run-feature.sh run feature-list.json
64
+ ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
65
65
 
66
66
  # Run a single feature
67
67
  ./dev-pipeline/run-feature.sh run F-007
@@ -70,13 +70,13 @@ Main entry point. Drives the full feature development pipeline.
70
70
  ./dev-pipeline/run-feature.sh run F-007 --dry-run
71
71
 
72
72
  # Resume from Phase 6 (implementation)
73
- ./dev-pipeline/run-feature.sh run feature-list.json --resume-phase 6
73
+ ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json --resume-phase 6
74
74
 
75
75
  # With timeout per session
76
- SESSION_TIMEOUT=7200 ./dev-pipeline/run-feature.sh run feature-list.json
76
+ SESSION_TIMEOUT=7200 ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
77
77
  ```
78
78
 
79
- If `feature-list.json` path is omitted, defaults to `feature-list.json` in the project root.
79
+ If `.prizmkit/plans/feature-list.json` path is omitted, defaults to `.prizmkit/plans/feature-list.json` in the project root.
80
80
 
81
81
  ---
82
82
 
@@ -85,7 +85,7 @@ If `feature-list.json` path is omitted, defaults to `feature-list.json` in the p
85
85
  Runs exactly ONE AI CLI session for a specified feature, then exits.
86
86
 
87
87
  ```bash
88
- ./retry-feature.sh <feature-id> [feature-list.json]
88
+ ./retry-feature.sh <feature-id> [.prizmkit/plans/feature-list.json]
89
89
  ```
90
90
 
91
91
  **What it does:**
@@ -99,7 +99,7 @@ Runs exactly ONE AI CLI session for a specified feature, then exits.
99
99
 
100
100
  ```bash
101
101
  ./dev-pipeline/retry-feature.sh F-007
102
- ./dev-pipeline/retry-feature.sh F-007 feature-list.json
102
+ ./dev-pipeline/retry-feature.sh F-007 .prizmkit/plans/feature-list.json
103
103
  SESSION_TIMEOUT=7200 ./dev-pipeline/retry-feature.sh F-007
104
104
  MODEL=claude-opus-4.6 ./dev-pipeline/retry-feature.sh F-007
105
105
  ```
@@ -111,7 +111,7 @@ MODEL=claude-opus-4.6 ./dev-pipeline/retry-feature.sh F-007
111
111
  Resets a feature's state so it can be re-executed from scratch.
112
112
 
113
113
  ```bash
114
- ./reset-feature.sh <feature-id> [--clean] [--run] [feature-list.json]
114
+ ./reset-feature.sh <feature-id> [--clean] [--run] [.prizmkit/plans/feature-list.json]
115
115
  ```
116
116
 
117
117
  | Flag | Description |
@@ -125,7 +125,7 @@ Resets a feature's state so it can be re-executed from scratch.
125
125
 
126
126
  **What is always reset (with or without `--clean`):**
127
127
  - `status.json` — status → pending, retry_count → 0
128
- - `feature-list.json` — feature status → pending
128
+ - `.prizmkit/plans/feature-list.json` — feature status → pending
129
129
 
130
130
  **Examples:**
131
131
 
@@ -143,11 +143,11 @@ Resets a feature's state so it can be re-executed from scratch.
143
143
  Manages `run-feature.sh` as a background daemon process with PID tracking and log consolidation. Designed for invocation from AI skill sessions.
144
144
 
145
145
  ```bash
146
- ./launch-feature-daemon.sh start [feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
146
+ ./launch-feature-daemon.sh start [.prizmkit/plans/feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
147
147
  ./launch-feature-daemon.sh stop
148
148
  ./launch-feature-daemon.sh status
149
149
  ./launch-feature-daemon.sh logs [--lines N] [--follow]
150
- ./launch-feature-daemon.sh restart [feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
150
+ ./launch-feature-daemon.sh restart [.prizmkit/plans/feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
151
151
  ./launch-feature-daemon.sh help
152
152
  ```
153
153
 
@@ -164,7 +164,7 @@ Manages `run-feature.sh` as a background daemon process with PID tracking and lo
164
164
  **`--env` format:** Pass environment variables as a quoted string:
165
165
 
166
166
  ```bash
167
- ./dev-pipeline/launch-feature-daemon.sh start feature-list.json \
167
+ ./dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json \
168
168
  --mode standard \
169
169
  --env "MAX_RETRIES=5 SESSION_TIMEOUT=3600 MODEL=claude-sonnet-4.6"
170
170
  ```
@@ -196,9 +196,9 @@ Manages `run-feature.sh` as a background daemon process with PID tracking and lo
196
196
  Equivalent to `run-feature.sh` but for the bug-fix pipeline.
197
197
 
198
198
  ```bash
199
- ./run-bugfix.sh run [bug-fix-list.json] # Run all bugs
199
+ ./run-bugfix.sh run [.prizmkit/plans/bug-fix-list.json] # Run all bugs
200
200
  ./run-bugfix.sh run <bug-id> [options] # Run single bug (B-NNN)
201
- ./run-bugfix.sh status [bug-fix-list.json] # Show status
201
+ ./run-bugfix.sh status [.prizmkit/plans/bug-fix-list.json] # Show status
202
202
  ./run-bugfix.sh reset # Clear all bugfix state
203
203
  ./run-bugfix.sh help
204
204
  ```
@@ -212,7 +212,7 @@ Processes bugs by: **severity** (critical > high > medium > low) then **priority
212
212
  ### `retry-bugfix.sh` — Retry Single Failed Bug
213
213
 
214
214
  ```bash
215
- ./retry-bugfix.sh <bug-id> [bug-fix-list.json]
215
+ ./retry-bugfix.sh <bug-id> [.prizmkit/plans/bug-fix-list.json]
216
216
  ```
217
217
 
218
218
  Same behavior as `retry-feature.sh` but for bugs. Cleans bug artifacts, generates bugfix prompt, runs one session, updates status.
@@ -224,14 +224,14 @@ Same behavior as `retry-feature.sh` but for bugs. Cleans bug artifacts, generate
224
224
  Identical interface to `launch-feature-daemon.sh` but manages `run-bugfix.sh` in background.
225
225
 
226
226
  ```bash
227
- ./launch-bugfix-daemon.sh start [bug-fix-list.json] [--env "KEY=VAL ..."]
227
+ ./launch-bugfix-daemon.sh start [.prizmkit/plans/bug-fix-list.json] [--env "KEY=VAL ..."]
228
228
  ./launch-bugfix-daemon.sh stop
229
229
  ./launch-bugfix-daemon.sh status
230
230
  ./launch-bugfix-daemon.sh logs [--lines N] [--follow]
231
- ./launch-bugfix-daemon.sh restart [bug-fix-list.json] [--env "KEY=VAL ..."]
231
+ ./launch-bugfix-daemon.sh restart [.prizmkit/plans/bug-fix-list.json] [--env "KEY=VAL ..."]
232
232
  ```
233
233
 
234
- Uses `bugfix-state/` instead of `state/`.
234
+ Uses `.prizmkit/state/bugfix/` instead of `.prizmkit/state/features/`.
235
235
 
236
236
  ---
237
237
 
@@ -239,7 +239,7 @@ Uses `bugfix-state/` instead of `state/`.
239
239
 
240
240
  ### `scripts/init-pipeline.py` — Initialize Feature Pipeline State
241
241
 
242
- Validates `feature-list.json` schema and creates the `state/` directory structure.
242
+ Validates `.prizmkit/plans/feature-list.json` schema and creates the `state/` directory structure.
243
243
 
244
244
  ```bash
245
245
  python3 scripts/init-pipeline.py \
@@ -295,7 +295,7 @@ python3 scripts/init-dev-team.py \
295
295
 
296
296
  ### `scripts/generate-bootstrap-prompt.py` — Generate Feature Session Prompt
297
297
 
298
- Renders a session-specific bootstrap prompt from a tier template and feature-list.json.
298
+ Renders a session-specific bootstrap prompt from a tier template and .prizmkit/plans/feature-list.json.
299
299
 
300
300
  ```bash
301
301
  python3 scripts/generate-bootstrap-prompt.py \
@@ -325,7 +325,7 @@ python3 scripts/generate-bootstrap-prompt.py \
325
325
  { "success": true, "output_path": "/absolute/path/prompt.md", "model": "claude-sonnet-4.6" }
326
326
  ```
327
327
 
328
- The `model` field is extracted from the feature's `"model"` field in feature-list.json (empty string if not specified). Used by `run-feature.sh` and `retry-feature.sh` to set `--model` on the AI CLI.
328
+ The `model` field is extracted from the feature's `"model"` field in .prizmkit/plans/feature-list.json (empty string if not specified). Used by `run-feature.sh` and `retry-feature.sh` to set `--model` on the AI CLI.
329
329
 
330
330
  **Conditional blocks resolved:**
331
331
  - `{{IF_RESUME}}` / `{{IF_FRESH_START}}` — Resume vs fresh start
@@ -600,10 +600,10 @@ Also exports: `log_info`, `log_warn`, `log_error`, `log_success` (with timestamp
600
600
  ```bash
601
601
  # All env vars in one invocation
602
602
  MAX_RETRIES=5 SESSION_TIMEOUT=7200 MODEL=claude-sonnet-4.6 VERBOSE=1 \
603
- ./dev-pipeline/run-feature.sh run feature-list.json
603
+ ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
604
604
 
605
605
  # Via daemon with --env
606
- ./dev-pipeline/launch-feature-daemon.sh start feature-list.json \
606
+ ./dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json \
607
607
  --mode standard \
608
608
  --env "MAX_RETRIES=5 SESSION_TIMEOUT=3600 AUTO_PUSH=1"
609
609
  ```
@@ -614,13 +614,13 @@ MAX_RETRIES=5 SESSION_TIMEOUT=7200 MODEL=claude-sonnet-4.6 VERBOSE=1 \
614
614
 
615
615
  Model is resolved with this priority chain (highest first):
616
616
 
617
- 1. **Per-feature `model` field** in `feature-list.json`
617
+ 1. **Per-feature `model` field** in `.prizmkit/plans/feature-list.json`
618
618
  2. **`MODEL` environment variable**
619
619
  3. **No `--model` flag** (CLI uses its default)
620
620
 
621
621
  ### Per-Feature Model
622
622
 
623
- Specify a model for individual features in `feature-list.json`:
623
+ Specify a model for individual features in `.prizmkit/plans/feature-list.json`:
624
624
 
625
625
  ```json
626
626
  {
@@ -640,7 +640,7 @@ Specify a model for individual features in `feature-list.json`:
640
640
 
641
641
  ```bash
642
642
  # All features without a per-feature model use Sonnet
643
- MODEL=claude-sonnet-4.6 ./dev-pipeline/run-feature.sh run feature-list.json
643
+ MODEL=claude-sonnet-4.6 ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
644
644
 
645
645
  # Retry with Opus
646
646
  MODEL=claude-opus-4.6 ./dev-pipeline/retry-feature.sh F-007
@@ -691,7 +691,7 @@ To permanently configure, create `.prizmkit/config.json`:
691
691
  Or override per-invocation:
692
692
 
693
693
  ```bash
694
- AI_CLI=claude ./dev-pipeline/run-feature.sh run feature-list.json
694
+ AI_CLI=claude ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
695
695
  ```
696
696
 
697
697
  ### Testing AI CLI (`test-cli`)
@@ -775,62 +775,62 @@ Features are executed in dependency order via DAG:
775
775
 
776
776
  ```bash
777
777
  # Live tail current session
778
- tail -f dev-pipeline/state/features/F-*/sessions/*/logs/session.log
778
+ tail -f .prizmkit/state/features/features/F-*/sessions/*/logs/session.log
779
779
 
780
780
  # Specific feature
781
- tail -f dev-pipeline/state/features/F-003/sessions/*/logs/session.log
781
+ tail -f .prizmkit/state/features/features/F-003/sessions/*/logs/session.log
782
782
 
783
783
  # Review completed session
784
- cat dev-pipeline/state/features/F-003/sessions/F-003-*/logs/session.log | less
784
+ cat .prizmkit/state/features/features/F-003/sessions/F-003-*/logs/session.log | less
785
785
  ```
786
786
 
787
787
  ### Pause & Resume
788
788
 
789
789
  - **Ctrl+C** triggers graceful shutdown — current state is saved
790
790
  - **Re-running** `./run-feature.sh run` resumes from where it left off (completed features skipped)
791
- - Force resume from a phase: `./run-feature.sh run feature-list.json --resume-phase 6`
791
+ - Force resume from a phase: `./run-feature.sh run .prizmkit/plans/feature-list.json --resume-phase 6`
792
792
 
793
793
  ### Manual Intervention
794
794
 
795
795
  ```bash
796
796
  # Check what failed
797
- ./dev-pipeline/run-feature.sh status feature-list.json
797
+ ./dev-pipeline/run-feature.sh status .prizmkit/plans/feature-list.json
798
798
 
799
799
  # Review session logs
800
- cat dev-pipeline/state/features/F-XXX/sessions/*/logs/session.log
800
+ cat .prizmkit/state/features/features/F-XXX/sessions/*/logs/session.log
801
801
 
802
802
  # Option A: Fix manually and mark complete
803
803
  python3 dev-pipeline/scripts/update-feature-status.py \
804
- --feature-list feature-list.json \
805
- --state-dir dev-pipeline/state \
804
+ --feature-list .prizmkit/plans/feature-list.json \
805
+ --state-dir .prizmkit/state/features \
806
806
  --feature-id F-XXX --action complete
807
807
 
808
808
  # Option B: Reset for retry
809
809
  python3 dev-pipeline/scripts/update-feature-status.py \
810
- --feature-list feature-list.json \
811
- --state-dir dev-pipeline/state \
810
+ --feature-list .prizmkit/plans/feature-list.json \
811
+ --state-dir .prizmkit/state/features \
812
812
  --feature-id F-XXX --action reset
813
813
 
814
814
  # Resume
815
- ./dev-pipeline/run-feature.sh run feature-list.json
815
+ ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
816
816
  ```
817
817
 
818
818
  ---
819
819
 
820
820
  ## Bug Fix Pipeline
821
821
 
822
- The bug fix pipeline provides the same autonomous outer-loop as the feature pipeline, tailored for `bug-fix-list.json`.
822
+ The bug fix pipeline provides the same autonomous outer-loop as the feature pipeline, tailored for `.prizmkit/plans/bug-fix-list.json`.
823
823
 
824
824
  ### Quick Start
825
825
 
826
826
  ```bash
827
827
  # 1. Generate bug fix list (via bug-planner skill)
828
828
  # 2. Run foreground
829
- ./dev-pipeline/run-bugfix.sh run bug-fix-list.json
829
+ ./dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json
830
830
  # 3. Or as daemon
831
- ./dev-pipeline/launch-bugfix-daemon.sh start bug-fix-list.json
831
+ ./dev-pipeline/launch-bugfix-daemon.sh start .prizmkit/plans/bug-fix-list.json
832
832
  # 4. Check progress
833
- ./dev-pipeline/run-bugfix.sh status bug-fix-list.json
833
+ ./dev-pipeline/run-bugfix.sh status .prizmkit/plans/bug-fix-list.json
834
834
  ```
835
835
 
836
836
  ### Bug Fix Execution Flow
@@ -862,7 +862,7 @@ run-bugfix.sh main loop
862
862
  ### Bug Fix State Directory
863
863
 
864
864
  ```
865
- dev-pipeline/bugfix-state/ # Runtime state (gitignored)
865
+ .prizmkit/state/bugfix/ # Runtime state (gitignored)
866
866
  +-- pipeline.json
867
867
  +-- bugs/B-XXX/
868
868
  +-- status.json
@@ -875,9 +875,9 @@ dev-pipeline/bugfix-state/ # Runtime state (gitignored)
875
875
 
876
876
  | Aspect | Feature Pipeline | Bug Fix Pipeline |
877
877
  |--------|-----------------|------------------|
878
- | Input file | `feature-list.json` | `bug-fix-list.json` |
878
+ | Input file | `.prizmkit/plans/feature-list.json` | `.prizmkit/plans/bug-fix-list.json` |
879
879
  | ID format | `F-NNN` | `B-NNN` |
880
- | State dir | `state/` | `bugfix-state/` |
880
+ | State dir | `.prizmkit/state/features/` | `.prizmkit/state/bugfix/` |
881
881
  | Ordering | Dependencies DAG + priority | Severity + priority (no deps) |
882
882
  | Phases | Tiered (3-10 phases) | 5-phase (triage-reproduce-fix-verify-commit) |
883
883
  | Commit prefix | `feat(<scope>):` | `fix(<scope>):` |
@@ -897,7 +897,7 @@ dev-pipeline/
897
897
  +-- retry-bugfix.sh # Retry single failed bug
898
898
  +-- launch-bugfix-daemon.sh # Background daemon for bugfix pipeline
899
899
  +-- README.md # This file
900
- +-- .gitignore # Ignores state/, bugfix-state/, __pycache__/
900
+ +-- .gitignore # Ignores .prizmkit/state/, __pycache__/
901
901
  |
902
902
  +-- lib/
903
903
  | +-- common.sh # CLI detection, deps check, logging helpers
@@ -906,8 +906,8 @@ dev-pipeline/
906
906
  |
907
907
  +-- scripts/
908
908
  | +-- utils.py # Shared Python utilities (JSON I/O, logging)
909
- | +-- init-pipeline.py # Validate feature-list.json + create state/
910
- | +-- init-bugfix-pipeline.py # Validate bug-fix-list.json + create bugfix-state/
909
+ | +-- init-pipeline.py # Validate .prizmkit/plans/feature-list.json + create .prizmkit/state/features/
910
+ | +-- init-bugfix-pipeline.py # Validate .prizmkit/plans/bug-fix-list.json + create .prizmkit/state/bugfix/
911
911
  | +-- init-dev-team.py # Create .prizmkit/specs/{slug}/ directories
912
912
  | +-- generate-bootstrap-prompt.py # Render feature session prompt from template
913
913
  | +-- generate-bugfix-prompt.py # Render bugfix session prompt from template
@@ -924,8 +924,8 @@ dev-pipeline/
924
924
  | +-- bootstrap-tier3.md # Tier 3 prompt template (full team, full)
925
925
  | +-- bootstrap-prompt.md # Legacy monolithic template (fallback)
926
926
  | +-- bugfix-bootstrap-prompt.md # Bug-fix session prompt template
927
- | +-- feature-list-schema.json # JSON schema for feature-list.json
928
- | +-- bug-fix-list-schema.json # JSON schema for bug-fix-list.json
927
+ | +-- feature-list-schema.json # JSON schema for .prizmkit/plans/feature-list.json
928
+ | +-- bug-fix-list-schema.json # JSON schema for .prizmkit/plans/bug-fix-list.json
929
929
  | +-- session-status-schema.json # JSON schema for session-status.json
930
930
  |
931
931
  +-- assets/
@@ -938,19 +938,19 @@ dev-pipeline/
938
938
  | +-- test_generate_bugfix_prompt.py # Tests for bugfix prompt generation
939
939
  | +-- test_utils.py # Tests for shared utilities
940
940
  |
941
- +-- state/ # Feature pipeline runtime state (gitignored)
941
+ +-- .prizmkit/state/features/ # Feature pipeline runtime state (gitignored)
942
942
  | +-- pipeline.json
943
943
  | +-- .pipeline.pid # Daemon PID file
944
944
  | +-- .pipeline-meta.json # Daemon metadata
945
945
  | +-- pipeline-daemon.log # Daemon log (50MB rotation)
946
- | +-- features/F-XXX/
946
+ | +-- F-XXX/
947
947
  | +-- status.json
948
948
  | +-- sessions/F-XXX-YYYYMMDDHHMMSS/
949
949
  | +-- bootstrap-prompt.md
950
950
  | +-- logs/session.log
951
951
  |
952
- +-- bugfix-state/ # Bug pipeline runtime state (gitignored)
953
- +-- (same structure as state/ but with bugs/B-XXX/)
952
+ +-- .prizmkit/state/bugfix/ # Bug pipeline runtime state (gitignored)
953
+ +-- (same structure as .prizmkit/state/features/ but with B-XXX/ IDs)
954
954
  ```
955
955
 
956
956
  ---
@@ -8,23 +8,24 @@ set -euo pipefail
8
8
  # log consolidation, and lifecycle commands.
9
9
  #
10
10
  # Usage:
11
- # ./launch-bugfix-daemon.sh start [bug-fix-list.json] [--env "KEY=VAL ..."]
11
+ # ./launch-bugfix-daemon.sh start [.prizmkit/plans/bug-fix-list.json] [--env "KEY=VAL ..."]
12
12
  # ./launch-bugfix-daemon.sh stop
13
13
  # ./launch-bugfix-daemon.sh status
14
14
  # ./launch-bugfix-daemon.sh logs [--lines N] [--follow]
15
- # ./launch-bugfix-daemon.sh restart [bug-fix-list.json] [--env "KEY=VAL ..."]
15
+ # ./launch-bugfix-daemon.sh restart [.prizmkit/plans/bug-fix-list.json] [--env "KEY=VAL ..."]
16
16
  #
17
17
  # NOTE:
18
18
  # In AI skill sessions, always use this daemon wrapper.
19
19
  # Do NOT call `run-bugfix.sh run ...` directly, because foreground sessions may be killed by CLI timeout.
20
20
  #
21
21
  # Files managed:
22
- # bugfix-state/.pipeline.pid - PID of the background run-bugfix.sh process
23
- # bugfix-state/pipeline-daemon.log - Consolidated stdout+stderr
22
+ # .prizmkit/state/bugfix/.pipeline.pid - PID of the background run-bugfix.sh process
23
+ # .prizmkit/state/bugfix/pipeline-daemon.log - Consolidated stdout+stderr
24
24
  # ============================================================
25
25
 
26
26
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- STATE_DIR="$SCRIPT_DIR/bugfix-state"
27
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
28
+ STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/bugfix"
28
29
  PID_FILE="$STATE_DIR/.pipeline.pid"
29
30
  LOG_FILE="$STATE_DIR/pipeline-daemon.log"
30
31
  RUN_SCRIPT="$SCRIPT_DIR/run-bugfix.sh"
@@ -97,7 +98,7 @@ cmd_start() {
97
98
  done
98
99
 
99
100
  if [[ -z "$bug_list" ]]; then
100
- bug_list="bug-fix-list.json"
101
+ bug_list=".prizmkit/plans/bug-fix-list.json"
101
102
  fi
102
103
  if [[ ! "$bug_list" = /* ]]; then
103
104
  bug_list="$(cd "$(dirname "$bug_list")" 2>/dev/null && pwd)/$(basename "$bug_list")"
@@ -105,7 +106,7 @@ cmd_start() {
105
106
 
106
107
  if [[ ! -f "$bug_list" ]]; then
107
108
  log_error "Bug fix list not found: $bug_list"
108
- log_error "Run the bug-planner skill first to generate bug-fix-list.json"
109
+ log_error "Run the bug-planner skill first to generate .prizmkit/plans/bug-fix-list.json"
109
110
  exit 2
110
111
  fi
111
112
 
@@ -415,15 +416,15 @@ show_help() {
415
416
  Usage: launch-bugfix-daemon.sh <command> [options]
416
417
 
417
418
  Commands:
418
- start [bug-fix-list.json] [--env "K=V ..."] Start bugfix pipeline in background
419
+ start [.prizmkit/plans/bug-fix-list.json] [--env "K=V ..."] Start bugfix pipeline in background
419
420
  stop Gracefully stop pipeline
420
421
  status Check if pipeline is running
421
422
  logs [--lines N] [--follow] View pipeline logs
422
- restart [bug-fix-list.json] [--env "K=V ..."] Stop + start pipeline
423
+ restart [.prizmkit/plans/bug-fix-list.json] [--env "K=V ..."] Stop + start pipeline
423
424
  help Show this help
424
425
 
425
426
  Examples:
426
- ./launch-bugfix-daemon.sh start # Start with default bug-fix-list.json
427
+ ./launch-bugfix-daemon.sh start # Start with default .prizmkit/plans/bug-fix-list.json
427
428
  ./launch-bugfix-daemon.sh start my-bugs.json # Start with custom bug list
428
429
  ./launch-bugfix-daemon.sh start --env "MAX_RETRIES=5"
429
430
  ./launch-bugfix-daemon.sh status # Check if running (JSON on stdout)
@@ -8,23 +8,24 @@ set -euo pipefail
8
8
  # log consolidation, and lifecycle commands.
9
9
  #
10
10
  # Usage:
11
- # ./launch-feature-daemon.sh start [feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
11
+ # ./launch-feature-daemon.sh start [.prizmkit/plans/feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
12
12
  # ./launch-feature-daemon.sh stop
13
13
  # ./launch-feature-daemon.sh status
14
14
  # ./launch-feature-daemon.sh logs [--lines N] [--follow]
15
- # ./launch-feature-daemon.sh restart [feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
15
+ # ./launch-feature-daemon.sh restart [.prizmkit/plans/feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
16
16
  #
17
17
  # NOTE:
18
18
  # In AI skill sessions, always use this daemon wrapper.
19
19
  # Do NOT call `run-feature.sh run ...` directly, because foreground sessions may be killed by CLI timeout.
20
20
  #
21
21
  # Files managed:
22
- # state/.pipeline.pid - PID of the background run-feature.sh process
23
- # state/pipeline-daemon.log - Consolidated stdout+stderr from run-feature.sh
22
+ # .prizmkit/state/features/.pipeline.pid - PID of the background run-feature.sh process
23
+ # .prizmkit/state/features/pipeline-daemon.log - Consolidated stdout+stderr from run-feature.sh
24
24
  # ============================================================
25
25
 
26
26
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- STATE_DIR="$SCRIPT_DIR/state"
27
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
28
+ STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/features"
28
29
  PID_FILE="$STATE_DIR/.pipeline.pid"
29
30
  LOG_FILE="$STATE_DIR/pipeline-daemon.log"
30
31
  RUN_SCRIPT="$SCRIPT_DIR/run-feature.sh"
@@ -151,7 +152,7 @@ cmd_start() {
151
152
 
152
153
  # Default feature list
153
154
  if [[ -z "$feature_list" ]]; then
154
- feature_list="feature-list.json"
155
+ feature_list=".prizmkit/plans/feature-list.json"
155
156
  fi
156
157
 
157
158
  # Resolve to absolute path
@@ -162,7 +163,7 @@ cmd_start() {
162
163
  # Validate feature list
163
164
  if [[ ! -f "$feature_list" ]]; then
164
165
  log_error "Feature list not found: $feature_list"
165
- log_error "Run the feature-planner skill first to generate feature-list.json"
166
+ log_error "Run the feature-planner skill first to generate .prizmkit/plans/feature-list.json"
166
167
  exit 2
167
168
  fi
168
169
 
@@ -582,11 +583,11 @@ show_help() {
582
583
  Usage: launch-feature-daemon.sh <command> [options]
583
584
 
584
585
  Commands:
585
- start [feature-list.json] [--mode <mode>] [--features <filter>] [--env "K=V ..."] Start pipeline in background
586
+ start [.prizmkit/plans/feature-list.json] [--mode <mode>] [--features <filter>] [--env "K=V ..."] Start pipeline in background
586
587
  stop Gracefully stop pipeline
587
588
  status Check if pipeline is running
588
589
  logs [--lines N] [--follow] View pipeline logs
589
- restart [feature-list.json] [--mode <mode>] [--features <filter>] [--env "K=V ..."] Stop + start pipeline
590
+ restart [.prizmkit/plans/feature-list.json] [--mode <mode>] [--features <filter>] [--env "K=V ..."] Stop + start pipeline
590
591
  help Show this help
591
592
 
592
593
  Options:
@@ -597,14 +598,14 @@ Options:
597
598
  --env "KEY=VAL ..." Set environment variables
598
599
 
599
600
  Examples:
600
- ./launch-feature-daemon.sh start # Start with default feature-list.json
601
+ ./launch-feature-daemon.sh start # Start with default .prizmkit/plans/feature-list.json
601
602
  ./launch-feature-daemon.sh start my-features.json # Start with custom feature list
602
603
  ./launch-feature-daemon.sh start --features F-001:F-005 # Run only features F-001 through F-005
603
604
  ./launch-feature-daemon.sh start --features F-001,F-003,F-007 # Run specific features
604
605
  ./launch-feature-daemon.sh start --mode full # Full mode for complex features
605
606
  ./launch-feature-daemon.sh start --critic # Enable adversarial critic review
606
607
  ./launch-feature-daemon.sh start --env "MAX_RETRIES=5 SESSION_TIMEOUT=7200"
607
- ./launch-feature-daemon.sh start feature-list.json --mode full --critic --env "VERBOSE=1"
608
+ ./launch-feature-daemon.sh start .prizmkit/plans/feature-list.json --mode full --critic --env "VERBOSE=1"
608
609
  ./launch-feature-daemon.sh status # Check if running (JSON on stdout)
609
610
  ./launch-feature-daemon.sh logs --follow # Live log tailing
610
611
  ./launch-feature-daemon.sh logs --lines 100 # Last 100 lines
@@ -8,23 +8,24 @@ set -euo pipefail
8
8
  # log consolidation, and lifecycle commands.
9
9
  #
10
10
  # Usage:
11
- # ./launch-refactor-daemon.sh start [refactor-list.json] [--env "KEY=VAL ..."]
11
+ # ./launch-refactor-daemon.sh start [.prizmkit/plans/refactor-list.json] [--env "KEY=VAL ..."]
12
12
  # ./launch-refactor-daemon.sh stop
13
13
  # ./launch-refactor-daemon.sh status
14
14
  # ./launch-refactor-daemon.sh logs [--lines N] [--follow]
15
- # ./launch-refactor-daemon.sh restart [refactor-list.json] [--env "KEY=VAL ..."]
15
+ # ./launch-refactor-daemon.sh restart [.prizmkit/plans/refactor-list.json] [--env "KEY=VAL ..."]
16
16
  #
17
17
  # NOTE:
18
18
  # In AI skill sessions, always use this daemon wrapper.
19
19
  # Do NOT call `run-refactor.sh run ...` directly, because foreground sessions may be killed by CLI timeout.
20
20
  #
21
21
  # Files managed:
22
- # refactor-state/.pipeline.pid - PID of the background run-refactor.sh process
23
- # refactor-state/pipeline-daemon.log - Consolidated stdout+stderr
22
+ # .prizmkit/state/refactor/.pipeline.pid - PID of the background run-refactor.sh process
23
+ # .prizmkit/state/refactor/pipeline-daemon.log - Consolidated stdout+stderr
24
24
  # ============================================================
25
25
 
26
26
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- STATE_DIR="$SCRIPT_DIR/refactor-state"
27
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
28
+ STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/refactor"
28
29
  PID_FILE="$STATE_DIR/.pipeline.pid"
29
30
  LOG_FILE="$STATE_DIR/pipeline-daemon.log"
30
31
  RUN_SCRIPT="$SCRIPT_DIR/run-refactor.sh"
@@ -97,7 +98,7 @@ cmd_start() {
97
98
  done
98
99
 
99
100
  if [[ -z "$refactor_list" ]]; then
100
- refactor_list="refactor-list.json"
101
+ refactor_list=".prizmkit/plans/refactor-list.json"
101
102
  fi
102
103
  if [[ ! "$refactor_list" = /* ]]; then
103
104
  refactor_list="$(cd "$(dirname "$refactor_list")" 2>/dev/null && pwd)/$(basename "$refactor_list")"
@@ -105,7 +106,7 @@ cmd_start() {
105
106
 
106
107
  if [[ ! -f "$refactor_list" ]]; then
107
108
  log_error "Refactor list not found: $refactor_list"
108
- log_error "Run the refactor-planner skill first to generate refactor-list.json"
109
+ log_error "Run the refactor-planner skill first to generate .prizmkit/plans/refactor-list.json"
109
110
  exit 2
110
111
  fi
111
112
 
@@ -415,15 +416,15 @@ show_help() {
415
416
  Usage: launch-refactor-daemon.sh <command> [options]
416
417
 
417
418
  Commands:
418
- start [refactor-list.json] [--env "K=V ..."] Start refactor pipeline in background
419
+ start [.prizmkit/plans/refactor-list.json] [--env "K=V ..."] Start refactor pipeline in background
419
420
  stop Gracefully stop pipeline
420
421
  status Check if pipeline is running
421
422
  logs [--lines N] [--follow] View pipeline logs
422
- restart [refactor-list.json] [--env "K=V ..."] Stop + start pipeline
423
+ restart [.prizmkit/plans/refactor-list.json] [--env "K=V ..."] Stop + start pipeline
423
424
  help Show this help
424
425
 
425
426
  Examples:
426
- ./launch-refactor-daemon.sh start # Start with default refactor-list.json
427
+ ./launch-refactor-daemon.sh start # Start with default .prizmkit/plans/refactor-list.json
427
428
  ./launch-refactor-daemon.sh start my-refactors.json # Start with custom refactor list
428
429
  ./launch-refactor-daemon.sh start --env "MAX_RETRIES=5"
429
430
  ./launch-refactor-daemon.sh start --env "STRICT_BEHAVIOR_CHECK=0"