prizmkit 1.1.153 → 1.1.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/VERSION.json +3 -3
- package/bundled/dev-pipeline/README.md +100 -87
- package/bundled/dev-pipeline/assets/skill-subagent-integration.md +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/checkpoint_state.py +14 -0
- package/bundled/dev-pipeline/prizmkit_runtime/cli.py +192 -110
- package/bundled/dev-pipeline/prizmkit_runtime/commands.py +146 -111
- package/bundled/dev-pipeline/prizmkit_runtime/daemon.py +3 -5
- package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +0 -1
- package/bundled/dev-pipeline/prizmkit_runtime/paths.py +0 -3
- package/bundled/dev-pipeline/prizmkit_runtime/reset.py +122 -15
- package/bundled/dev-pipeline/prizmkit_runtime/reset_preserve.py +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/runners.py +19 -52
- package/bundled/dev-pipeline/prizmkit_runtime/status.py +106 -1
- package/bundled/dev-pipeline/scripts/init-bugfix-pipeline.py +2 -2
- package/bundled/dev-pipeline/scripts/update-bug-status.py +196 -67
- package/bundled/dev-pipeline/scripts/update-checkpoint.py +16 -3
- package/bundled/dev-pipeline/scripts/update-feature-status.py +45 -117
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +45 -119
- package/bundled/dev-pipeline/scripts/utils.py +119 -0
- package/bundled/dev-pipeline/templates/bug-fix-list-schema.json +3 -2
- package/bundled/dev-pipeline/tests/test_auto_skip.py +111 -32
- package/bundled/dev-pipeline/tests/test_checkpoint_state.py +148 -12
- package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +0 -19
- package/bundled/dev-pipeline/tests/test_python_runner_parity.py +113 -188
- package/bundled/dev-pipeline/tests/test_recovery_workflow.py +211 -0
- package/bundled/dev-pipeline/tests/test_reset_modes.py +935 -0
- package/bundled/dev-pipeline/tests/test_reset_preserve.py +5 -5
- package/bundled/dev-pipeline/tests/test_unified_cli.py +468 -181
- package/bundled/skills/_metadata.json +1 -1
- package/bundled/skills/bug-planner/references/schema-validation.md +1 -1
- package/bundled/skills/bug-planner/scripts/validate-bug-list.py +1 -1
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +21 -13
- package/bundled/skills/feature-pipeline-launcher/SKILL.md +22 -14
- package/bundled/skills/recovery-workflow/SKILL.md +7 -5
- package/bundled/skills/recovery-workflow/evals/evals.json +2 -2
- package/bundled/skills/recovery-workflow/references/detection.md +3 -3
- package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +1 -1
- package/bundled/skills/refactor-pipeline-launcher/SKILL.md +21 -13
- package/bundled/templates/project-memory-template.md +19 -11
- package/package.json +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/runner_recovery.py +0 -228
- package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +0 -767
package/bundled/VERSION.json
CHANGED
|
@@ -14,21 +14,20 @@ Autonomous development pipeline that drives iterative AI CLI sessions through Pr
|
|
|
14
14
|
|
|
15
15
|
### Unified Python CLI prerequisites
|
|
16
16
|
|
|
17
|
-
- Python 3.10+ for the
|
|
18
|
-
- No third-party Python runtime packages are required
|
|
19
|
-
- The
|
|
17
|
+
- Python 3.10+ for the canonical Python CLI under `dev-pipeline/cli.py`
|
|
18
|
+
- No third-party Python runtime packages are required
|
|
19
|
+
- The Python runtime is the sole behavior source; retired shell and PowerShell wrappers are not compatibility entrypoints
|
|
20
20
|
|
|
21
|
-
Inspect the
|
|
21
|
+
Inspect the operation-first command surface without dispatching runtime behavior:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
python3 dev-pipeline/cli.py --help
|
|
25
|
-
python3 dev-pipeline/cli.py
|
|
26
|
-
python3 dev-pipeline/cli.py
|
|
27
|
-
python3 dev-pipeline/cli.py
|
|
28
|
-
python3 dev-pipeline/cli.py daemon feature describe
|
|
25
|
+
python3 dev-pipeline/cli.py run --help
|
|
26
|
+
python3 dev-pipeline/cli.py status --help
|
|
27
|
+
python3 dev-pipeline/cli.py diagnostics ai-cli
|
|
29
28
|
```
|
|
30
29
|
|
|
31
|
-
The
|
|
30
|
+
The public namespaces are `run`, `status`, `reset`, `daemon`, `diagnostics`, and `helper`. Standard `--help` is the only command-description interface; family names are targets, not top-level namespaces.
|
|
32
31
|
|
|
33
32
|
## Quick Start
|
|
34
33
|
|
|
@@ -42,10 +41,10 @@ python3 .prizmkit/dev-pipeline/scripts/init-pipeline.py \
|
|
|
42
41
|
--state-dir .prizmkit/state/features
|
|
43
42
|
|
|
44
43
|
# 3. Run the pipeline (foreground, Ctrl+C to pause, re-run to resume)
|
|
45
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
44
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json
|
|
46
45
|
|
|
47
46
|
# 4. Check progress at any time (from another terminal)
|
|
48
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
47
|
+
python3 ./.prizmkit/dev-pipeline/cli.py status feature .prizmkit/plans/feature-list.json
|
|
49
48
|
|
|
50
49
|
# 5. Or run as a background daemon
|
|
51
50
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/feature-list.json
|
|
@@ -55,17 +54,17 @@ python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/fea
|
|
|
55
54
|
|
|
56
55
|
## Python Runtime CLI Reference
|
|
57
56
|
|
|
58
|
-
### `cli.py feature` — Feature Pipeline Runner
|
|
57
|
+
### `cli.py run feature` — Feature Pipeline Runner
|
|
59
58
|
|
|
60
|
-
Main entry point
|
|
59
|
+
Main foreground entry point for the feature pipeline.
|
|
61
60
|
|
|
62
61
|
```bash
|
|
63
|
-
python3 ./cli.py feature
|
|
64
|
-
python3 ./cli.py feature
|
|
65
|
-
python3 ./cli.py feature
|
|
66
|
-
python3 ./cli.py reset feature
|
|
67
|
-
python3 ./cli.py
|
|
68
|
-
python3 ./cli.py feature help
|
|
62
|
+
python3 ./cli.py run feature [.prizmkit/plans/feature-list.json] # Run all features
|
|
63
|
+
python3 ./cli.py run feature <feature-id> [options] # Run a single feature (F-NNN)
|
|
64
|
+
python3 ./cli.py status feature [.prizmkit/plans/feature-list.json] # Show feature status
|
|
65
|
+
python3 ./cli.py reset feature <feature-id> --state-only # Recover causal state without Git/artifact cleanup
|
|
66
|
+
python3 ./cli.py diagnostics ai-cli # Inspect AI CLI resolution
|
|
67
|
+
python3 ./cli.py run feature --help # Show parser-owned usage help
|
|
69
68
|
```
|
|
70
69
|
|
|
71
70
|
**Single-feature options:**
|
|
@@ -80,59 +79,74 @@ python3 ./cli.py feature help # Show usage hel
|
|
|
80
79
|
|
|
81
80
|
```bash
|
|
82
81
|
# Run all features
|
|
83
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
82
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json
|
|
84
83
|
|
|
85
84
|
# Run a single feature
|
|
86
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
85
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature F-007
|
|
87
86
|
|
|
88
87
|
# Dry run — inspect the generated prompt without spawning a session
|
|
89
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
88
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature F-007 --dry-run
|
|
90
89
|
|
|
91
90
|
# Resume from Phase 6 (implementation)
|
|
92
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
91
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json --resume-phase 6
|
|
93
92
|
```
|
|
94
93
|
|
|
95
94
|
If `.prizmkit/plans/feature-list.json` path is omitted, defaults to `.prizmkit/plans/feature-list.json` in the project root.
|
|
96
95
|
|
|
97
96
|
---
|
|
98
97
|
|
|
99
|
-
### `cli.py reset
|
|
98
|
+
### `cli.py reset <family>` — Explicit Recovery and Cleanup Modes
|
|
100
99
|
|
|
101
|
-
Reset
|
|
100
|
+
Reset never starts execution and rejects `--run`; invoke the matching `run <family>` command separately. Every invocation must select exactly one mode before the runtime will inspect mutable pipeline state or Git resources.
|
|
102
101
|
|
|
103
102
|
```bash
|
|
104
|
-
python3 ./cli.py reset
|
|
105
|
-
python3 ./cli.py reset
|
|
103
|
+
python3 ./cli.py reset <family> <item-id> --state-only [list-path]
|
|
104
|
+
python3 ./cli.py reset <family> --state-only --all [list-path]
|
|
105
|
+
python3 ./cli.py reset <family> <item-id-or-range> --fresh-checkout [list-path]
|
|
106
|
+
python3 ./cli.py reset <family> <--auto-skipped|--failed|--stalled> --fresh-checkout [list-path]
|
|
107
|
+
python3 ./cli.py reset <family> <item-id-or-range> --clean [list-path]
|
|
108
|
+
python3 ./cli.py reset <family> <--auto-skipped|--failed|--stalled> --clean [list-path]
|
|
109
|
+
python3 ./cli.py reset <family> --failed --preserve-runtime [list-path]
|
|
106
110
|
```
|
|
107
111
|
|
|
108
|
-
|
|
|
109
|
-
|
|
110
|
-
| `--
|
|
111
|
-
| `--
|
|
112
|
+
| Mode | Selector and effect |
|
|
113
|
+
|------|---------------------|
|
|
114
|
+
| `--state-only` | Requires one ID or explicit `--all`. Resets supported blocking roots and only causal `auto_skipped` descendants whose full blocker set is recovered; preserves checkout identity, branches/worktrees, source changes, checkpoints, and artifact/session files. Feature/Refactor roots are `failed` or `skipped`; Bugfix additionally supports `needs_info`. |
|
|
115
|
+
| `--fresh-checkout` | Requires one ID, range, or supported status filter. Performs the former standard reset, may discard active-checkout WIP, and publishes a new checkout boundary without deleting the task branch. |
|
|
116
|
+
| `--clean` | Accepts the fresh-checkout selectors and additionally deletes task branches, session history, continuation summaries, and task artifacts. |
|
|
117
|
+
| `--failed --preserve-runtime` | Whole-list failed-only recovery. Retains runtime history, valid checkout identity, branches/worktrees, checkpoints, artifacts, and WIP; a missing recorded branch is replaced from its local base and implementation-and-later checkpoints are rewound. |
|
|
112
118
|
|
|
113
|
-
|
|
119
|
+
State-only rejects ranges and status filters. Preserve-runtime rejects IDs, ranges, `--all`, clean, other modes, and other filters. Missing modes, conflicting modes, unsupported selectors, and malformed causal dependency state fail before mutation.
|
|
114
120
|
|
|
115
121
|
**Examples:**
|
|
116
122
|
|
|
117
123
|
```bash
|
|
118
|
-
#
|
|
119
|
-
python3 ./.prizmkit/dev-pipeline/cli.py reset feature
|
|
120
|
-
python3 ./.prizmkit/dev-pipeline/cli.py
|
|
124
|
+
# Recover one causal state chain without changing Git/checkpoints/artifact files
|
|
125
|
+
python3 ./.prizmkit/dev-pipeline/cli.py reset feature F-007 --state-only
|
|
126
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature F-007
|
|
121
127
|
|
|
122
|
-
#
|
|
123
|
-
python3 ./.prizmkit/dev-pipeline/cli.py reset
|
|
124
|
-
python3 ./.prizmkit/dev-pipeline/cli.py
|
|
128
|
+
# Recover all causal state chains
|
|
129
|
+
python3 ./.prizmkit/dev-pipeline/cli.py reset bugfix --state-only --all
|
|
130
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run bugfix .prizmkit/plans/bug-fix-list.json
|
|
125
131
|
|
|
126
|
-
#
|
|
132
|
+
# Preserve all failed runtime chains
|
|
133
|
+
python3 ./.prizmkit/dev-pipeline/cli.py reset refactor --failed --preserve-runtime
|
|
134
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run refactor .prizmkit/plans/refactor-list.json
|
|
135
|
+
|
|
136
|
+
# Publish a fresh checkout boundary
|
|
137
|
+
python3 ./.prizmkit/dev-pipeline/cli.py reset feature F-007 --fresh-checkout
|
|
138
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature F-007
|
|
139
|
+
|
|
140
|
+
# Destructive clean reset
|
|
127
141
|
python3 ./.prizmkit/dev-pipeline/cli.py reset feature F-007 --clean my-features.json
|
|
128
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
142
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature F-007 my-features.json
|
|
129
143
|
```
|
|
130
144
|
|
|
131
145
|
---
|
|
132
146
|
|
|
133
147
|
### `cli.py daemon feature` — Feature Pipeline Daemon
|
|
134
148
|
|
|
135
|
-
Manages `cli.py feature` as a background daemon process with PID tracking and log consolidation. Designed for invocation from AI skill sessions.
|
|
149
|
+
Manages `cli.py run feature` as a background daemon process with PID tracking and log consolidation. Designed for invocation from AI skill sessions.
|
|
136
150
|
|
|
137
151
|
```bash
|
|
138
152
|
python3 ./cli.py daemon feature start [.prizmkit/plans/feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
|
|
@@ -140,7 +154,7 @@ python3 ./cli.py daemon feature stop
|
|
|
140
154
|
python3 ./cli.py daemon feature status
|
|
141
155
|
python3 ./cli.py daemon feature logs [--lines N] [--follow]
|
|
142
156
|
python3 ./cli.py daemon feature restart [.prizmkit/plans/feature-list.json] [--mode <mode>] [--env "KEY=VAL ..."]
|
|
143
|
-
python3 ./cli.py daemon feature help
|
|
157
|
+
python3 ./cli.py daemon feature --help
|
|
144
158
|
```
|
|
145
159
|
|
|
146
160
|
| Subcommand | Description |
|
|
@@ -183,19 +197,19 @@ python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/fea
|
|
|
183
197
|
|
|
184
198
|
---
|
|
185
199
|
|
|
186
|
-
### `cli.py bugfix` — Bug-Fix Pipeline Runner
|
|
200
|
+
### `cli.py run bugfix` — Bug-Fix Pipeline Runner
|
|
187
201
|
|
|
188
|
-
|
|
202
|
+
Uses the same operation-first foreground contract as `cli.py run feature`.
|
|
189
203
|
|
|
190
204
|
```bash
|
|
191
|
-
python3 ./cli.py bugfix
|
|
192
|
-
python3 ./cli.py bugfix
|
|
193
|
-
python3 ./cli.py bugfix
|
|
194
|
-
python3 ./cli.py reset bugfix
|
|
195
|
-
python3 ./cli.py bugfix help
|
|
205
|
+
python3 ./cli.py run bugfix [.prizmkit/plans/bug-fix-list.json] # Run all bugs
|
|
206
|
+
python3 ./cli.py run bugfix <bug-id> [options] # Run single bug (B-NNN)
|
|
207
|
+
python3 ./cli.py status bugfix [.prizmkit/plans/bug-fix-list.json] # Show status
|
|
208
|
+
python3 ./cli.py reset bugfix <bug-id> --state-only # Recover causal Bugfix state
|
|
209
|
+
python3 ./cli.py run bugfix --help
|
|
196
210
|
```
|
|
197
211
|
|
|
198
|
-
**Single-bug options:** `--dry-run` (same as `cli.py feature`)
|
|
212
|
+
**Single-bug options:** `--dry-run` (same as `cli.py run feature`)
|
|
199
213
|
|
|
200
214
|
Processes bugs by: **severity** (critical > high > medium > low) then **priority** (high > medium > low).
|
|
201
215
|
|
|
@@ -203,7 +217,7 @@ Processes bugs by: **severity** (critical > high > medium > low) then **priority
|
|
|
203
217
|
|
|
204
218
|
### `cli.py daemon bugfix` — Bug-Fix Pipeline Daemon
|
|
205
219
|
|
|
206
|
-
Identical interface to `cli.py daemon feature` but manages `cli.py bugfix` in background.
|
|
220
|
+
Identical interface to `cli.py daemon feature` but manages `cli.py run bugfix` in background.
|
|
207
221
|
|
|
208
222
|
```bash
|
|
209
223
|
python3 ./cli.py daemon bugfix start [.prizmkit/plans/bug-fix-list.json] [--env "KEY=VAL ..."]
|
|
@@ -309,7 +323,7 @@ python3 scripts/generate-bootstrap-prompt.py \
|
|
|
309
323
|
{ "success": true, "output_path": "/absolute/path/prompt.md", "model": "claude-sonnet-4.6" }
|
|
310
324
|
```
|
|
311
325
|
|
|
312
|
-
The `model` field is extracted from the feature's `"model"` field in .prizmkit/plans/feature-list.json (empty string if not specified). Used by `cli.py feature` to set `--model` on the AI CLI.
|
|
326
|
+
The `model` field is extracted from the feature's `"model"` field in .prizmkit/plans/feature-list.json (empty string if not specified). Used by `cli.py run feature` to set `--model` on the AI CLI.
|
|
313
327
|
|
|
314
328
|
**Conditional blocks resolved for explicit legacy templates:**
|
|
315
329
|
- `{{IF_RESUME}}` / `{{IF_FRESH_START}}` — Resume vs fresh start
|
|
@@ -531,10 +545,10 @@ Also exports: `log_info`, `log_warn`, `log_error`, `log_success` (with timestamp
|
|
|
531
545
|
|
|
532
546
|
| Variable | Default | Used By | Description |
|
|
533
547
|
|----------|---------|---------|-------------|
|
|
534
|
-
| `MAX_RETRIES` | `3` | cli.py feature | Max retry attempts per feature before marking as failed |
|
|
535
|
-
| `PIPELINE_MODE` | (auto) | cli.py feature, cli.py daemon feature | Override mode for all features: `lite\|standard\|full` |
|
|
536
|
-
| `DEV_BRANCH` | auto-generated | cli.py feature | Custom git branch name (default: `dev/{feature-id}-{timestamp}`) |
|
|
537
|
-
| `AUTO_PUSH` | `0` | cli.py feature | Set to `1` to auto-push branch to remote after successful session |
|
|
548
|
+
| `MAX_RETRIES` | `3` | cli.py run feature | Max retry attempts per feature before marking as failed |
|
|
549
|
+
| `PIPELINE_MODE` | (auto) | cli.py run feature, cli.py daemon feature | Override mode for all features: `lite\|standard\|full` |
|
|
550
|
+
| `DEV_BRANCH` | auto-generated | cli.py run feature | Custom git branch name (default: `dev/{feature-id}-{timestamp}`) |
|
|
551
|
+
| `AUTO_PUSH` | `0` | cli.py run feature | Set to `1` to auto-push branch to remote after successful session |
|
|
538
552
|
|
|
539
553
|
### AI CLI Configuration
|
|
540
554
|
|
|
@@ -542,23 +556,23 @@ Also exports: `log_info`, `log_warn`, `log_error`, `log_success` (with timestamp
|
|
|
542
556
|
|----------|---------|---------|-------------|
|
|
543
557
|
| `AI_CLI` | auto-detect | Python runtime | AI CLI command name. Auto-detects `cbc`, `claude`, or `codex` |
|
|
544
558
|
| `PRIZMKIT_PLATFORM` | auto-detect | Python runtime | Platform hint for custom/wrapped AI CLI commands: `codebuddy`, `claude`, or `codex` |
|
|
545
|
-
| `MODEL` | (none) | cli.py feature, cli.py bugfix | AI model fallback. Overridden by per-feature `model` field. See [Model Selection](#model-selection) |
|
|
559
|
+
| `MODEL` | (none) | cli.py run feature, cli.py run bugfix | AI model fallback. Overridden by per-feature `model` field. See [Model Selection](#model-selection) |
|
|
546
560
|
| `CODEBUDDY_CLI` | (deprecated) | Python runtime | Legacy alias for `AI_CLI`. Prefer `AI_CLI` |
|
|
547
|
-
| `VERBOSE` | `0` | cli.py feature | Set to `1` to enable `--verbose` on AI CLI |
|
|
561
|
+
| `VERBOSE` | `0` | cli.py run feature | Set to `1` to enable `--verbose` on AI CLI |
|
|
548
562
|
|
|
549
563
|
### Monitoring & Logging
|
|
550
564
|
|
|
551
565
|
| Variable | Default | Used By | Description |
|
|
552
566
|
|----------|---------|---------|-------------|
|
|
553
|
-
| `HEARTBEAT_INTERVAL` | `30` | cli.py feature | Seconds between heartbeat log output |
|
|
554
|
-
| `HEARTBEAT_STALE_THRESHOLD` | `600` | cli.py feature | Seconds before a session is considered stale/stuck |
|
|
567
|
+
| `HEARTBEAT_INTERVAL` | `30` | cli.py run feature | Seconds between heartbeat log output |
|
|
568
|
+
| `HEARTBEAT_STALE_THRESHOLD` | `600` | cli.py run feature | Seconds before a session is considered stale/stuck |
|
|
555
569
|
|
|
556
570
|
**Examples:**
|
|
557
571
|
|
|
558
572
|
```bash
|
|
559
573
|
# All env vars in one invocation
|
|
560
574
|
MAX_RETRIES=5 MODEL=claude-sonnet-4.6 VERBOSE=1 \
|
|
561
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
575
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json
|
|
562
576
|
|
|
563
577
|
# Via daemon with --env
|
|
564
578
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/feature-list.json \
|
|
@@ -598,14 +612,14 @@ Specify a model for individual features in `.prizmkit/plans/feature-list.json`:
|
|
|
598
612
|
|
|
599
613
|
```bash
|
|
600
614
|
# All features without a per-feature model use Sonnet
|
|
601
|
-
MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
615
|
+
MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json
|
|
602
616
|
|
|
603
617
|
# Destructively reset, then retry with Opus as a separate run
|
|
604
618
|
python3 ./.prizmkit/dev-pipeline/cli.py reset feature F-007 --clean
|
|
605
|
-
MODEL=claude-opus-4.6 python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
619
|
+
MODEL=claude-opus-4.6 python3 ./.prizmkit/dev-pipeline/cli.py run feature F-007
|
|
606
620
|
|
|
607
|
-
#
|
|
608
|
-
MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py
|
|
621
|
+
# Inspect the resolved global AI CLI and model
|
|
622
|
+
MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py diagnostics ai-cli
|
|
609
623
|
```
|
|
610
624
|
|
|
611
625
|
### Dry-Run Model Verification
|
|
@@ -613,7 +627,7 @@ MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py feature test-cli
|
|
|
613
627
|
Use `--dry-run` to verify which model will be used without spawning a session:
|
|
614
628
|
|
|
615
629
|
```bash
|
|
616
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
630
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature F-017 --dry-run
|
|
617
631
|
# Output includes: "Feature Model: claude-opus-4.6"
|
|
618
632
|
```
|
|
619
633
|
|
|
@@ -652,15 +666,15 @@ To permanently configure, create `.prizmkit/config.json`:
|
|
|
652
666
|
Or override per-invocation:
|
|
653
667
|
|
|
654
668
|
```bash
|
|
655
|
-
AI_CLI=claude python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
669
|
+
AI_CLI=claude python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json
|
|
656
670
|
```
|
|
657
671
|
|
|
658
|
-
###
|
|
672
|
+
### AI CLI Diagnostics
|
|
659
673
|
|
|
660
674
|
```bash
|
|
661
|
-
python3 ./.prizmkit/dev-pipeline/cli.py
|
|
662
|
-
MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py
|
|
663
|
-
AI_CLI=cbc python3 ./.prizmkit/dev-pipeline/cli.py
|
|
675
|
+
python3 ./.prizmkit/dev-pipeline/cli.py diagnostics ai-cli
|
|
676
|
+
MODEL=claude-sonnet-4.6 python3 ./.prizmkit/dev-pipeline/cli.py diagnostics ai-cli
|
|
677
|
+
AI_CLI=cbc python3 ./.prizmkit/dev-pipeline/cli.py diagnostics ai-cli
|
|
664
678
|
```
|
|
665
679
|
|
|
666
680
|
---
|
|
@@ -670,7 +684,7 @@ AI_CLI=cbc python3 ./.prizmkit/dev-pipeline/cli.py feature test-cli
|
|
|
670
684
|
### Feature Pipeline Execution Flow
|
|
671
685
|
|
|
672
686
|
```
|
|
673
|
-
cli.py feature
|
|
687
|
+
cli.py run feature command
|
|
674
688
|
|
|
|
675
689
|
+- detect-stuck.py # Check for stale/stuck sessions
|
|
676
690
|
+- update-feature-status.py # get_next: find next runnable feature
|
|
@@ -749,14 +763,14 @@ cat .prizmkit/state/features/F-003/sessions/F-003-*/logs/session.log | less
|
|
|
749
763
|
### Pause & Resume
|
|
750
764
|
|
|
751
765
|
- **Ctrl+C** triggers graceful shutdown — current state is saved
|
|
752
|
-
- **Re-running** `python3 ./cli.py feature
|
|
753
|
-
- Force resume from a phase: `python3 ./cli.py feature
|
|
766
|
+
- **Re-running** `python3 ./cli.py run feature` resumes from where it left off (completed features skipped)
|
|
767
|
+
- Force resume from a phase: `python3 ./cli.py run feature .prizmkit/plans/feature-list.json --resume-phase 6`
|
|
754
768
|
|
|
755
769
|
### Manual Intervention
|
|
756
770
|
|
|
757
771
|
```bash
|
|
758
772
|
# Check what failed
|
|
759
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
773
|
+
python3 ./.prizmkit/dev-pipeline/cli.py status feature .prizmkit/plans/feature-list.json
|
|
760
774
|
|
|
761
775
|
# Review session logs
|
|
762
776
|
cat .prizmkit/state/features/F-XXX/sessions/*/logs/session.log
|
|
@@ -774,7 +788,7 @@ python3 .prizmkit/dev-pipeline/scripts/update-feature-status.py \
|
|
|
774
788
|
--feature-id F-XXX --action reset
|
|
775
789
|
|
|
776
790
|
# Resume
|
|
777
|
-
python3 ./.prizmkit/dev-pipeline/cli.py feature
|
|
791
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run feature .prizmkit/plans/feature-list.json
|
|
778
792
|
```
|
|
779
793
|
|
|
780
794
|
---
|
|
@@ -788,17 +802,17 @@ The bug fix pipeline provides the same autonomous outer-loop as the feature pipe
|
|
|
788
802
|
```bash
|
|
789
803
|
# 1. Generate bug fix list (via bug-planner skill)
|
|
790
804
|
# 2. Run foreground
|
|
791
|
-
python3 ./.prizmkit/dev-pipeline/cli.py bugfix
|
|
805
|
+
python3 ./.prizmkit/dev-pipeline/cli.py run bugfix .prizmkit/plans/bug-fix-list.json
|
|
792
806
|
# 3. Or as daemon
|
|
793
807
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json
|
|
794
808
|
# 4. Check progress
|
|
795
|
-
python3 ./.prizmkit/dev-pipeline/cli.py bugfix
|
|
809
|
+
python3 ./.prizmkit/dev-pipeline/cli.py status bugfix .prizmkit/plans/bug-fix-list.json
|
|
796
810
|
```
|
|
797
811
|
|
|
798
812
|
### Bug Fix Execution Flow
|
|
799
813
|
|
|
800
814
|
```
|
|
801
|
-
cli.py bugfix
|
|
815
|
+
cli.py run bugfix command
|
|
802
816
|
|
|
|
803
817
|
+- update-bug-status.py # get_next (severity -> priority order)
|
|
804
818
|
+- generate-bugfix-prompt.py # Build prompt from template
|
|
@@ -851,13 +865,12 @@ cli.py bugfix run command
|
|
|
851
865
|
|
|
852
866
|
```
|
|
853
867
|
.prizmkit/dev-pipeline/
|
|
854
|
-
+-- cli.py
|
|
855
|
-
+-- cli.py
|
|
856
|
-
+-- cli.py reset
|
|
857
|
-
+-- cli.py daemon
|
|
858
|
-
+-- cli.py
|
|
859
|
-
+-- cli.py
|
|
860
|
-
+-- cli.py daemon bugfix # Background daemon for bugfix pipeline
|
|
868
|
+
+-- cli.py run <family> # Foreground feature/bugfix/refactor runners
|
|
869
|
+
+-- cli.py status <family|all> # Read-only family or aggregate status
|
|
870
|
+
+-- cli.py reset <family> # Explicit state-only/fresh/clean/preserve reset modes
|
|
871
|
+
+-- cli.py daemon <family> # Background daemon lifecycle
|
|
872
|
+
+-- cli.py diagnostics <action> # Paths, entrypoints, version, and AI CLI resolution
|
|
873
|
+
+-- cli.py helper # Low-level cross-platform helper commands
|
|
861
874
|
+-- README.md # This file
|
|
862
875
|
+-- .gitignore # Ignores .prizmkit/state/, __pycache__/
|
|
863
876
|
|
|
|
@@ -945,7 +958,7 @@ Check `set -e` interactions. All python invocations in the main loop should have
|
|
|
945
958
|
Verify CLI is functional: `claude -p "test" --dangerously-skip-permissions`, `echo "test" | cbc --print -y`, or `echo "test" | codex --ask-for-approval never --sandbox danger-full-access exec --skip-git-repo-check -`
|
|
946
959
|
|
|
947
960
|
### "PIPELINE_BLOCKED" loops
|
|
948
|
-
All remaining features have unmet dependencies. Use `python3 ./cli.py feature
|
|
961
|
+
All remaining features have unmet dependencies. Use `python3 ./cli.py status feature` to find the blocking feature, then reset or manually complete it.
|
|
949
962
|
|
|
950
963
|
### Feature marked as "crashed"
|
|
951
964
|
Session exited without `session-status.json`. Pipeline retries up to `MAX_RETRIES` times automatically.
|
|
@@ -15,7 +15,7 @@ Skill behavior is owned by canonical skills:
|
|
|
15
15
|
```text
|
|
16
16
|
dev-pipeline (outer loop)
|
|
17
17
|
|
|
|
18
|
-
+-- cli.py
|
|
18
|
+
+-- cli.py run <family> Python runtime CLI — picks next item, starts CLI
|
|
19
19
|
+-- scripts/ Python state and prompt management scripts
|
|
20
20
|
+-- templates/ Session prompt templates and sections
|
|
21
21
|
|
|
|
@@ -634,6 +634,20 @@ def _derive_semantic_state(
|
|
|
634
634
|
return _semantic_error(workflow_type, current_step, "invalid_blocked_reason", "blocked_reason must be a non-empty string")
|
|
635
635
|
if terminal_status == "WORKFLOW_BLOCKED" and not blocked_reason:
|
|
636
636
|
return _semantic_error(workflow_type, current_step, "missing_blocked_reason", "WORKFLOW_BLOCKED requires blocked_reason")
|
|
637
|
+
if blocked_reason and terminal_status == "WORKFLOW_COMPLETED":
|
|
638
|
+
return _semantic_error(
|
|
639
|
+
workflow_type,
|
|
640
|
+
current_step,
|
|
641
|
+
"completed_workflow_has_blocked_reason",
|
|
642
|
+
"WORKFLOW_COMPLETED cannot retain blocked_reason",
|
|
643
|
+
)
|
|
644
|
+
if blocked_reason and terminal_status != "WORKFLOW_BLOCKED":
|
|
645
|
+
return _semantic_error(
|
|
646
|
+
workflow_type,
|
|
647
|
+
current_step,
|
|
648
|
+
"blocked_reason_without_blocked_terminal",
|
|
649
|
+
"blocked_reason requires terminal_status=WORKFLOW_BLOCKED",
|
|
650
|
+
)
|
|
637
651
|
|
|
638
652
|
review_step = _single_step(steps, "prizmkit-code-review")
|
|
639
653
|
test_step = _single_step(steps, "prizmkit-test")
|