prizmkit 1.1.111 → 1.1.112
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/agents/prizm-dev-team-reviewer.md +12 -1
- package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +1 -0
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +19 -73
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +283 -421
- package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +1 -1
- package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +259 -481
- package/bundled/dev-pipeline/scripts/init-bugfix-pipeline.py +34 -0
- package/bundled/dev-pipeline/scripts/init-pipeline.py +12 -0
- package/bundled/dev-pipeline/scripts/init-refactor-pipeline.py +24 -1
- package/bundled/dev-pipeline/scripts/prompt_framework.py +312 -0
- package/bundled/dev-pipeline/scripts/update-bug-status.py +87 -20
- package/bundled/dev-pipeline/scripts/update-feature-status.py +82 -16
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +68 -28
- package/bundled/dev-pipeline/scripts/utils.py +171 -0
- package/bundled/dev-pipeline/templates/bootstrap-prompt.md +1 -1
- package/bundled/dev-pipeline/templates/bootstrap-tier2.md +10 -18
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +14 -25
- package/bundled/dev-pipeline/templates/bug-fix-list-schema.json +9 -1
- package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +11 -8
- package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +122 -182
- package/bundled/dev-pipeline/templates/sections/bugfix-artifacts.md +16 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-critical-paths.md +12 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-mission.md +9 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-commit-report.md +31 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-critic.md +22 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-diagnose-plan.md +23 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-implement.md +20 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-init.md +9 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-manual-verification.md +15 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +29 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-reminders.md +11 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-session-context.md +7 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-session-status.md +31 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-task-contract.md +40 -0
- package/bundled/dev-pipeline/templates/sections/failure-capture.md +2 -2
- package/bundled/dev-pipeline/templates/sections/phase-browser-verification-auto.md +1 -1
- package/bundled/dev-pipeline/templates/sections/refactor-artifacts.md +17 -0
- package/bundled/dev-pipeline/templates/sections/refactor-critical-paths.md +13 -0
- package/bundled/dev-pipeline/templates/sections/refactor-mission.md +9 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-commit-report.md +37 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-critic.md +22 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-implement.md +16 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-init.md +9 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-plan.md +22 -0
- package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +19 -0
- package/bundled/dev-pipeline/templates/sections/refactor-reminders.md +11 -0
- package/bundled/dev-pipeline/templates/sections/refactor-session-context.md +7 -0
- package/bundled/dev-pipeline/templates/sections/refactor-session-status.md +28 -0
- package/bundled/dev-pipeline/templates/sections/refactor-task-contract.md +52 -0
- package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +17 -5
- package/bundled/dev-pipeline/tests/test_python_runner_parity.py +197 -0
- package/bundled/dev-pipeline/tests/test_unified_cli.py +6 -2
- package/bundled/dev-pipeline/tests/test_utils.py +66 -1
- package/bundled/skills/_metadata.json +1 -1
- package/bundled/skills/app-planner/SKILL.md +8 -7
- package/bundled/skills/app-planner/references/project-brief-guide.md +2 -2
- package/bundled/skills/app-planner/references/rules/backend/derivation-rules.md +1 -1
- package/bundled/skills/app-planner/references/rules/frontend/derivation-rules.md +1 -1
- package/bundled/skills/app-planner/references/rules-configuration.md +53 -26
- package/bundled/skills/bug-fix-workflow/SKILL.md +191 -336
- package/bundled/skills/bug-planner/SKILL.md +6 -5
- package/bundled/skills/bug-planner/references/critic-and-verification.md +3 -3
- package/bundled/skills/bug-planner/references/schema-validation.md +2 -1
- package/bundled/skills/bug-planner/scripts/validate-bug-list.py +30 -1
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +16 -16
- package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +2 -2
- package/bundled/skills/feature-pipeline-launcher/SKILL.md +19 -11
- package/bundled/skills/feature-planner/SKILL.md +9 -11
- package/bundled/skills/feature-planner/assets/planning-guide.md +1 -1
- package/bundled/skills/feature-planner/references/decomposition-patterns.md +1 -1
- package/bundled/skills/feature-planner/references/error-recovery.md +2 -1
- package/bundled/skills/feature-planner/references/incremental-feature-planning.md +2 -2
- package/bundled/skills/feature-planner/references/new-project-planning.md +35 -39
- package/bundled/skills/feature-planner/scripts/validate-and-generate.py +1 -1
- package/bundled/skills/feature-workflow/SKILL.md +169 -298
- package/bundled/skills/prizmkit/SKILL.md +103 -57
- package/bundled/skills/prizmkit-code-review/SKILL.md +97 -116
- package/bundled/skills/prizmkit-code-review/references/review-report-template.md +1 -0
- package/bundled/skills/prizmkit-code-review/references/reviewer-agent-prompt.md +12 -1
- package/bundled/skills/prizmkit-committer/SKILL.md +59 -47
- package/bundled/skills/prizmkit-deploy/SKILL.md +162 -381
- package/bundled/skills/prizmkit-deploy/references/ssh-adapter-flow.md +220 -0
- package/bundled/skills/prizmkit-implement/SKILL.md +51 -40
- package/bundled/skills/prizmkit-init/SKILL.md +4 -3
- package/bundled/skills/prizmkit-plan/SKILL.md +85 -70
- package/bundled/skills/prizmkit-prizm-docs/SKILL.md +94 -73
- package/bundled/skills/prizmkit-prizm-docs/assets/prizm-docs-format.md +20 -18
- package/bundled/skills/prizmkit-prizm-docs/references/op-update.md +18 -14
- package/bundled/skills/prizmkit-retrospective/SKILL.md +56 -48
- package/bundled/skills/prizmkit-retrospective/references/structural-sync-steps.md +79 -27
- package/bundled/skills/prizmkit-test/SKILL.md +138 -141
- package/bundled/skills/prizmkit-test/references/examples.md +10 -8
- package/bundled/skills/prizmkit-test/references/test-generation-steps.md +1 -1
- package/bundled/skills/prizmkit-test/references/test-report-template.md +2 -2
- package/bundled/skills/recovery-workflow/SKILL.md +195 -256
- package/bundled/skills/recovery-workflow/evals/evals.json +21 -13
- package/bundled/skills/recovery-workflow/references/detection.md +48 -39
- package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +258 -322
- package/bundled/skills/refactor-pipeline-launcher/SKILL.md +29 -11
- package/bundled/skills/refactor-planner/SKILL.md +2 -2
- package/bundled/skills/refactor-planner/references/behavior-preservation.md +24 -19
- package/bundled/skills/refactor-planner/references/fast-path.md +2 -4
- package/bundled/skills/refactor-planner/references/planning-phases.md +2 -2
- package/bundled/skills/refactor-workflow/SKILL.md +173 -307
- package/package.json +1 -1
- package/src/scaffold.js +5 -0
- package/bundled/dev-pipeline/templates/agent-prompts/reviewer-review.md +0 -6
- package/bundled/skills/feature-workflow/references/brainstorm-guide.md +0 -137
- package/bundled/skills/refactor-workflow/references/brainstorm-guide.md +0 -116
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "bug-planner"
|
|
3
|
-
description: "Interactive bug planning that produces .prizmkit/plans/bug-fix-list.json for the Bug Fix Pipeline. Supports
|
|
3
|
+
description: "Interactive bug planning that produces, validates, appends, and summarizes .prizmkit/plans/bug-fix-list.json for the Bug Fix Pipeline. Supports error logs, stack traces, user reports, failed tests, monitoring alerts, existing bug-list validation, and bug-list summaries. Use whenever the user has bugs to report, errors to parse, test failures to organize, or asks to validate/list bugs. Trigger on: 'plan bug fixes', 'report bugs', 'these tests are failing', 'parse errors', 'generate bug list', 'validate bug list', 'show bug list', 'append bugs'."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Bug Planner
|
|
@@ -346,7 +346,7 @@ Checkpoints catch cascading errors early — skipping one means the next phase b
|
|
|
346
346
|
|
|
347
347
|
Triggers: "parse this error log", "here's a stack trace", "parse these errors".
|
|
348
348
|
|
|
349
|
-
Batch-parse error logs
|
|
349
|
+
Batch-parse error logs with minimal interaction: parse automatically, then require final user confirmation before generating the final list:
|
|
350
350
|
|
|
351
351
|
1. Accept log file path or piped content
|
|
352
352
|
2. Parse all unique errors (deduplicate by error message pattern)
|
|
@@ -376,7 +376,8 @@ Batch-parse failed test output:
|
|
|
376
376
|
3. Auto-populate `failed_test_path`, `error_message`
|
|
377
377
|
4. Set verification_type to `automated` (test already exists)
|
|
378
378
|
5. Write draft to `.prizmkit/plans/bug-fix-list.draft.json`
|
|
379
|
-
6.
|
|
379
|
+
6. Present parsed failed-test bug entries for confirmation; allow edits, merges, or removals
|
|
380
|
+
7. After user confirms, call the generate script:
|
|
380
381
|
```bash
|
|
381
382
|
python3 ${SKILL_DIR}/scripts/validate-bug-list.py generate --input .prizmkit/plans/bug-fix-list.draft.json --output .prizmkit/plans/bug-fix-list.json
|
|
382
383
|
```
|
|
@@ -425,7 +426,7 @@ When configuring critic settings or browser verification for bugs, read `${SKILL
|
|
|
425
426
|
Key points:
|
|
426
427
|
- Critic is enabled by default for critical/high severity, disabled for medium/low
|
|
427
428
|
- Users can override critic settings per-bug during Phase 2 or Phase 3
|
|
428
|
-
-
|
|
429
|
+
- `browser_interaction` is supported for UI-reproducible bugs; `verification_type` still declares whether verification is automated, manual, or hybrid.
|
|
429
430
|
|
|
430
431
|
---
|
|
431
432
|
|
|
@@ -451,7 +452,7 @@ Common errors handled inline:
|
|
|
451
452
|
| Ambiguous severity classification | Present options, ask user to choose |
|
|
452
453
|
| Duplicate bug detected | Warn user, suggest merging or keeping separate |
|
|
453
454
|
| No bugs provided | Prompt with examples of supported input formats |
|
|
454
|
-
| Invalid
|
|
455
|
+
| Invalid dependency reference | Warn and ask user to correct or remove the dependency |
|
|
455
456
|
| Schema validation failure | Show specific errors, offer to fix interactively |
|
|
456
457
|
|
|
457
458
|
## Output
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Adversarial Critic Review (Testing Defaults)
|
|
4
4
|
|
|
5
|
-
All bug fixes support optional critic review for additional quality assurance. The
|
|
5
|
+
All bug fixes support optional critic review for additional quality assurance. The planner enables critic review by default for critical/high severity bugs and leaves it disabled for medium/low bugs; users can override per bug.
|
|
6
6
|
|
|
7
7
|
### Default Critic Behavior
|
|
8
8
|
|
|
@@ -21,13 +21,13 @@ All bug fixes support optional critic review for additional quality assurance. T
|
|
|
21
21
|
|
|
22
22
|
## Browser Verification
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Bug fixes can use `browser_interaction` when the bug is reproducible through a UI. The `verification_type` field still declares the overall verification mode:
|
|
25
25
|
|
|
26
26
|
- `verification_type: automated` — Use unit/integration tests to verify the fix
|
|
27
27
|
- `verification_type: manual` — Describe manual testing steps in acceptance criteria (including any browser verification steps)
|
|
28
28
|
- `verification_type: hybrid` — Combine automated tests with manual browser verification steps
|
|
29
29
|
|
|
30
|
-
For UI-related bugs
|
|
30
|
+
For UI-related bugs, add `browser_interaction.verify_steps` when concrete browser goals are known. Also keep acceptance criteria measurable so the bugfix session can verify the fix without asking the user.
|
|
31
31
|
|
|
32
32
|
### Example
|
|
33
33
|
|
|
@@ -17,7 +17,8 @@ Use this checklist for manual validation when `validate-bug-list.py` is not avai
|
|
|
17
17
|
- [ ] `error_source.type`: one of `stack_trace`, `user_report`, `failed_test`, `log_pattern`, `monitoring_alert`
|
|
18
18
|
- [ ] `verification_type`: one of `automated`, `manual`, `hybrid`
|
|
19
19
|
- [ ] `acceptance_criteria`: non-empty array of strings
|
|
20
|
-
- [ ] `status`:
|
|
20
|
+
- [ ] `status`: one of `pending`, `in_progress`, `completed`, `failed`, `skipped`, `needs_info`; new bugs should start as `pending`
|
|
21
|
+
- [ ] `dependencies` if present: array of existing `B-NNN` IDs; no self-dependencies
|
|
21
22
|
|
|
22
23
|
## Consistency Checks
|
|
23
24
|
|
|
@@ -29,7 +29,7 @@ from datetime import datetime, timezone
|
|
|
29
29
|
VALID_SEVERITIES = {"critical", "high", "medium", "low"}
|
|
30
30
|
VALID_SOURCE_TYPES = {"stack_trace", "user_report", "failed_test", "log_pattern", "monitoring_alert"}
|
|
31
31
|
VALID_VERIFICATION_TYPES = {"automated", "manual", "hybrid"}
|
|
32
|
-
VALID_STATUSES = {"pending", "
|
|
32
|
+
VALID_STATUSES = {"pending", "in_progress", "completed", "failed", "skipped", "needs_info"}
|
|
33
33
|
BUG_ID_PATTERN = re.compile(r"^B-\d{3}$")
|
|
34
34
|
SCHEMA_VERSION = "dev-pipeline-bug-fix-list-v1"
|
|
35
35
|
|
|
@@ -162,6 +162,35 @@ def validate(data, feature_ids=None):
|
|
|
162
162
|
errors.append("{} ({}): invalid priority '{}' — must be one of 'high', 'medium', 'low'".format(
|
|
163
163
|
prefix, bug_id, priority))
|
|
164
164
|
|
|
165
|
+
# dependencies (optional field)
|
|
166
|
+
deps = bug.get("dependencies", [])
|
|
167
|
+
if deps is None:
|
|
168
|
+
deps = []
|
|
169
|
+
if not isinstance(deps, list):
|
|
170
|
+
errors.append("{} ({}): dependencies must be an array".format(prefix, bug_id))
|
|
171
|
+
else:
|
|
172
|
+
for dep in deps:
|
|
173
|
+
if not isinstance(dep, str) or not BUG_ID_PATTERN.match(dep):
|
|
174
|
+
errors.append("{} ({}): invalid dependency '{}' — must match B-NNN".format(
|
|
175
|
+
prefix, bug_id, dep))
|
|
176
|
+
elif dep == bug_id:
|
|
177
|
+
errors.append("{} ({}): bug cannot depend on itself".format(prefix, bug_id))
|
|
178
|
+
|
|
179
|
+
known_ids = {
|
|
180
|
+
bug.get("id")
|
|
181
|
+
for bug in bugs
|
|
182
|
+
if BUG_ID_PATTERN.match(str(bug.get("id", "")))
|
|
183
|
+
}
|
|
184
|
+
for i, bug in enumerate(bugs):
|
|
185
|
+
bug_id = bug.get("id", "")
|
|
186
|
+
deps = bug.get("dependencies", []) or []
|
|
187
|
+
if not isinstance(deps, list):
|
|
188
|
+
continue
|
|
189
|
+
for dep in deps:
|
|
190
|
+
if isinstance(dep, str) and BUG_ID_PATTERN.match(dep) and dep not in known_ids:
|
|
191
|
+
errors.append("bugs[{}] ({}): dependency '{}' does not exist".format(
|
|
192
|
+
i, bug_id, dep))
|
|
193
|
+
|
|
165
194
|
return {
|
|
166
195
|
"valid": len(errors) == 0,
|
|
167
196
|
"errors": errors,
|
|
@@ -15,10 +15,7 @@ Three execution modes are available. The user chooses one before configuring oth
|
|
|
15
15
|
2. **Background daemon** — `python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json`. Runs fully detached, survives AI CLI session closure.
|
|
16
16
|
3. **Manual** — Display the assembled command(s) only. Do not execute anything. User runs them on their own.
|
|
17
17
|
|
|
18
|
-
**Background mode
|
|
19
|
-
```
|
|
20
|
-
[2026-03-26T10:30:00] MODE=daemon PID=12345 BUG_LIST=.prizmkit/plans/bug-fix-list.json BUGS=3
|
|
21
|
-
```
|
|
18
|
+
**Background mode traceability**: Daemon mode metadata and logs are written by the Python runtime (`daemon bugfix start/status/logs`). Do not append a separate skill-managed audit log.
|
|
22
19
|
|
|
23
20
|
### When to Use
|
|
24
21
|
|
|
@@ -72,7 +69,7 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
72
69
|
|
|
73
70
|
#### Intent A: Start Bugfix Pipeline
|
|
74
71
|
|
|
75
|
-
> **Execution model**: The pipeline processes bugs
|
|
72
|
+
> **Execution model**: The pipeline processes eligible bugs one at a time. The `dependencies` field is active: dependencies must complete before dependents are selected. Among unrelated eligible bugs, stable list order determines selection.
|
|
76
73
|
|
|
77
74
|
1. **Check prerequisites**:
|
|
78
75
|
```bash
|
|
@@ -125,9 +122,9 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
125
122
|
```bash
|
|
126
123
|
VERBOSE=1 python3 ./.prizmkit/dev-pipeline/cli.py bugfix run .prizmkit/plans/bug-fix-list.json
|
|
127
124
|
```
|
|
128
|
-
|
|
125
|
+
Selected-options example:
|
|
129
126
|
```bash
|
|
130
|
-
VERBOSE=1 MAX_RETRIES=5 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
|
|
127
|
+
VERBOSE=1 ENABLE_CRITIC=1 MAX_RETRIES=5 STOP_ON_FAILURE=1 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
|
|
131
128
|
python3 ./.prizmkit/dev-pipeline/cli.py bugfix run .prizmkit/plans/bug-fix-list.json
|
|
132
129
|
```
|
|
133
130
|
|
|
@@ -135,10 +132,10 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
135
132
|
```bash
|
|
136
133
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json --env "VERBOSE=1"
|
|
137
134
|
```
|
|
138
|
-
|
|
135
|
+
Selected-options example:
|
|
139
136
|
```bash
|
|
140
137
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json \
|
|
141
|
-
--env "VERBOSE=1 MAX_RETRIES=5 ENABLE_DEPLOY=1"
|
|
138
|
+
--env "VERBOSE=1 ENABLE_CRITIC=1 MAX_RETRIES=5 STOP_ON_FAILURE=1 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high"
|
|
142
139
|
```
|
|
143
140
|
|
|
144
141
|
**Manual mode**: Print the assembled command(s) and **stop here**. Do not execute anything. Do not proceed to step 7.
|
|
@@ -155,7 +152,10 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
155
152
|
|
|
156
153
|
7. **Confirm and launch** (Foreground and Background only — Manual mode ends at step 6):
|
|
157
154
|
|
|
158
|
-
|
|
155
|
+
Use a separate `AskUserQuestion` call: "Ready to launch the bugfix pipeline with the above command?"
|
|
156
|
+
Options:
|
|
157
|
+
- Launch now (Recommended)
|
|
158
|
+
- Cancel
|
|
159
159
|
|
|
160
160
|
After user confirms, execute the command from step 6.
|
|
161
161
|
|
|
@@ -200,7 +200,7 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
200
200
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix logs --lines 20
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
4. **Summarize** to user: total bugs, completed,
|
|
203
|
+
4. **Summarize** to user: total bugs, completed, in_progress, failed, pending, needs_info.
|
|
204
204
|
|
|
205
205
|
---
|
|
206
206
|
|
|
@@ -259,15 +259,15 @@ python3 ./.prizmkit/dev-pipeline/cli.py reset bugfix B-001 --clean --run .prizmk
|
|
|
259
259
|
|
|
260
260
|
### Error Handling
|
|
261
261
|
|
|
262
|
-
Read `${SKILL_DIR}/references/configuration.md` for the full error handling table
|
|
262
|
+
Read `${SKILL_DIR}/references/configuration.md` for the full error handling table.
|
|
263
263
|
|
|
264
264
|
### Integration Notes
|
|
265
265
|
|
|
266
266
|
- **After bug-planner**: This is the natural next step. When user finishes bug planning and has `.prizmkit/plans/bug-fix-list.json`, suggest launching the bugfix pipeline.
|
|
267
267
|
- **Session independence**: In daemon mode, the bugfix pipeline runs completely detached. User can close the AI CLI, open a new session later, and use this skill to check progress or stop the pipeline.
|
|
268
|
-
- **Single instance**: Only one bugfix pipeline can run at a time.
|
|
268
|
+
- **Single instance per family**: Only one bugfix pipeline can run at a time. Different pipeline families may coexist because they use separate daemon metadata and state directories.
|
|
269
269
|
- **Feature pipeline coexistence**: Bugfix and feature pipelines use separate state directories (`.prizmkit/state/bugfix/` vs `.prizmkit/state/features/`), so they can run simultaneously without conflict.
|
|
270
270
|
- **State preservation**: Stopping and restarting the bugfix pipeline resumes from where it left off -- completed bugs are not re-fixed.
|
|
271
|
-
- **Bug ordering**:
|
|
272
|
-
- **Background mode traceability**:
|
|
273
|
-
- **HANDOFF**: After pipeline completes all bugs,
|
|
271
|
+
- **Bug ordering**: Dependencies are active. Runtime selects eligible bugs in stable list order after dependencies are completed; planners should order unrelated bugs by severity/priority before launch.
|
|
272
|
+
- **Background mode traceability**: Daemon mode metadata/logging is runtime-owned; use `daemon bugfix status` and `daemon bugfix logs`.
|
|
273
|
+
- **HANDOFF**: After pipeline completes all bugs, summarize results and ask what the user wants next. Individual sessions already run retrospective according to the bug-fix documentation policy.
|
|
@@ -51,7 +51,7 @@ Present these via `AskUserQuestion` in step 5. Round 1 is one `AskUserQuestion`
|
|
|
51
51
|
- No (default) — Use defaults for failure behavior
|
|
52
52
|
- Yes — Configure stop-on-failure, deploy, and reasoning effort options
|
|
53
53
|
|
|
54
|
-
Note: Bug filter defaults to all bugs
|
|
54
|
+
Note: Bug filter defaults to all bugs. Runtime selects eligible bugs in stable list order after dependencies are completed; planners should order unrelated bugs by severity/priority before launch. Default Critic to Off unless bugs have `severity: "critical"` or `severity: "high"` (in which case default to On). If the user selects "Other" on any option, handle their custom input.
|
|
55
55
|
|
|
56
56
|
### Round 2 (only if Advanced config = Yes)
|
|
57
57
|
|
|
@@ -82,7 +82,7 @@ Note: Bug filter defaults to all bugs (by severity order). Default Critic to Off
|
|
|
82
82
|
| Bugfix pipeline already running | Show status, ask if user wants to stop and restart |
|
|
83
83
|
| PID file stale (process dead) | `python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json` auto-cleans, retry start |
|
|
84
84
|
| Launch failed (process died immediately) | Show last 20 lines of log: `python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix logs --lines 20` |
|
|
85
|
-
| All bugs blocked/failed/
|
|
85
|
+
| All bugs blocked/failed/needs_info | Show status, suggest retrying with `python3 ./.prizmkit/dev-pipeline/cli.py reset bugfix <B-XXX> --clean --run .prizmkit/plans/bug-fix-list.json` or providing more info |
|
|
86
86
|
| `playwright-cli` not installed | Browser verification skipped for playwright bugs (non-blocking). Suggest: `npm install -g @playwright/cli@latest && playwright-cli install --skills` |
|
|
87
87
|
| `opencli` not installed | Browser verification skipped for opencli bugs (non-blocking). Install opencli for Chrome session-based browser verification |
|
|
88
88
|
| Deploy session failed | Pipeline completed but deploy session exited non-zero. Check `.prizmkit/state/bugfix/deploy/<session_id>/logs/session.log`. Retry manually: `/prizmkit-deploy`. |
|
|
@@ -5,7 +5,7 @@ description: "Launch and manage the dev-pipeline from within an AI CLI session.
|
|
|
5
5
|
|
|
6
6
|
# Dev-Pipeline Launcher
|
|
7
7
|
|
|
8
|
-
Launch the autonomous development pipeline from within an AI CLI conversation.
|
|
8
|
+
Launch the autonomous development pipeline from within an AI CLI conversation. Only Background daemon mode is fully detached and survives AI CLI session closure; Foreground runs in the current session, and Manual prints commands without launching.
|
|
9
9
|
|
|
10
10
|
Three execution modes are available (Foreground / Background daemon / Manual); they are defined authoritatively in **Intent A, step 5** below.
|
|
11
11
|
|
|
@@ -63,7 +63,7 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
63
63
|
|
|
64
64
|
#### Intent A: Start Pipeline
|
|
65
65
|
|
|
66
|
-
> **Execution model**: The pipeline processes features
|
|
66
|
+
> **Execution model**: The pipeline processes eligible features one at a time. The `dependencies` field is active: dependencies must complete before dependents are selected, and unrelated eligible items preserve stable list order.
|
|
67
67
|
|
|
68
68
|
1. **Check prerequisites**:
|
|
69
69
|
```bash
|
|
@@ -97,9 +97,11 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
97
97
|
|
|
98
98
|
Run the preflight script to auto-detect the database type, verify env vars, test connectivity, and check migration status:
|
|
99
99
|
```bash
|
|
100
|
-
python3
|
|
100
|
+
python3 <feature-pipeline-launcher-skill-dir>/scripts/preflight-check.py .prizmkit/plans/feature-list.json
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
+
Replace `<feature-pipeline-launcher-skill-dir>` with the resolved skill directory path before running. Do not execute a literal unresolved `${SKILL_DIR}` shell variable.
|
|
104
|
+
|
|
103
105
|
The script:
|
|
104
106
|
- Reads `global_context.database` from `.prizmkit/plans/feature-list.json` and `.prizmkit/config.json`
|
|
105
107
|
- Scans `.env.local` / `.env` for connection variables (supports Supabase, PostgreSQL, MySQL, MongoDB, Firebase, and generic `DATABASE_URL`)
|
|
@@ -154,7 +156,7 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
154
156
|
|
|
155
157
|
**If user chose "Yes" to Advanced config**, ask a second round of `AskUserQuestion` — see the advanced config questions (stop-on-failure, deploy-after-completion, reasoning effort) in `${SKILL_DIR}/references/configuration.md`.
|
|
156
158
|
|
|
157
|
-
|
|
159
|
+
Read `${SKILL_DIR}/references/configuration.md` for the current environment-variable mapping and advanced environment-variable tables.
|
|
158
160
|
|
|
159
161
|
|
|
160
162
|
7. **Show final command**: After user confirms configuration in step 6, assemble the complete command from execution mode + user-confirmed configuration, and present it to the user.
|
|
@@ -163,9 +165,9 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
163
165
|
```bash
|
|
164
166
|
VERBOSE=1 python3 ./.prizmkit/dev-pipeline/cli.py feature run .prizmkit/plans/feature-list.json
|
|
165
167
|
```
|
|
166
|
-
|
|
168
|
+
Selected-options example:
|
|
167
169
|
```bash
|
|
168
|
-
VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
|
|
170
|
+
VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 STOP_ON_FAILURE=1 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
|
|
169
171
|
python3 ./.prizmkit/dev-pipeline/cli.py feature run .prizmkit/plans/feature-list.json --features F-001:F-005
|
|
170
172
|
```
|
|
171
173
|
|
|
@@ -173,10 +175,10 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
173
175
|
```bash
|
|
174
176
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/feature-list.json --env "VERBOSE=1"
|
|
175
177
|
```
|
|
176
|
-
|
|
178
|
+
Selected-options example:
|
|
177
179
|
```bash
|
|
178
180
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/feature-list.json --features F-001:F-005 \
|
|
179
|
-
--env "VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high"
|
|
181
|
+
--env "VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 STOP_ON_FAILURE=1 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high"
|
|
180
182
|
```
|
|
181
183
|
|
|
182
184
|
**Manual mode**: Print the assembled command(s) and **stop here**. Do not execute anything. Do not proceed to step 8.
|
|
@@ -193,7 +195,10 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
193
195
|
|
|
194
196
|
8. **Confirm and launch** (Foreground and Background only — Manual mode ends at step 7):
|
|
195
197
|
|
|
196
|
-
|
|
198
|
+
Use a separate `AskUserQuestion` call: "Ready to launch the pipeline with the above command?"
|
|
199
|
+
Options:
|
|
200
|
+
- Launch now (Recommended)
|
|
201
|
+
- Cancel
|
|
197
202
|
|
|
198
203
|
After user confirms, execute the command from step 7.
|
|
199
204
|
|
|
@@ -304,6 +309,9 @@ Notes:
|
|
|
304
309
|
|
|
305
310
|
After pipeline completion, if features have `browser_interaction` fields and the corresponding browser tool (`playwright-cli` or `opencli`) is installed:
|
|
306
311
|
|
|
312
|
+
If list status may be stale, prefer the runtime status command before deciding which completed features qualify:
|
|
313
|
+
`python3 ./.prizmkit/dev-pipeline/cli.py feature status .prizmkit/plans/feature-list.json`.
|
|
314
|
+
|
|
307
315
|
1. **Check which features qualify**:
|
|
308
316
|
```bash
|
|
309
317
|
python3 -c "
|
|
@@ -339,13 +347,13 @@ After pipeline completion, if features have `browser_interaction` fields and the
|
|
|
339
347
|
|
|
340
348
|
### Error Handling
|
|
341
349
|
|
|
342
|
-
Read `${SKILL_DIR}/references/configuration.md` for the full error handling table
|
|
350
|
+
Read `${SKILL_DIR}/references/configuration.md` for the full error handling table covering feature-list, dependency checks, pipeline state, browser tooling, permission, and deploy failures.
|
|
343
351
|
|
|
344
352
|
### Integration Notes
|
|
345
353
|
|
|
346
354
|
- **After feature-planner**: This is the natural next step. When user finishes planning and has `.prizmkit/plans/feature-list.json`, suggest launching the pipeline.
|
|
347
355
|
- **Session independence**: The pipeline runs completely detached. User can close the AI CLI session, open a new session later, and use this skill to check progress or stop the pipeline.
|
|
348
|
-
- **Single instance**: Only one pipeline can run at a time.
|
|
356
|
+
- **Single instance per family**: Only one feature pipeline can run at a time. Different pipeline families may coexist because they use separate daemon metadata and state directories.
|
|
349
357
|
- **Pipeline coexistence**: Feature and bugfix pipelines use separate state directories (`.prizmkit/state/features/` vs `.prizmkit/state/bugfix/`), so they can run simultaneously without conflict.
|
|
350
358
|
- **State preservation**: Stopping and restarting the pipeline resumes from where it left off -- completed features are not re-run.
|
|
351
359
|
- **HANDOFF**: After pipeline completes all features, each session has already run `prizmkit-retrospective` internally. Ask user what's next.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "feature-planner"
|
|
3
|
-
description: "Plan and manage features for an existing project — add
|
|
3
|
+
description: "Plan, validate, and manage features for an existing project — add or append features, reprioritize, split, summarize, and generate validated .prizmkit/plans/feature-list.json for dev-pipeline execution. Use this skill for feature scoping, incremental planning, continuing a feature plan, checking feature-list.json, or preparing pipeline input. For planning a new app from scratch, use app-planner instead."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# feature planner
|
|
@@ -103,7 +103,7 @@ Trigger conditions are covered by the frontmatter `description`. Do NOT use this
|
|
|
103
103
|
5. **Priority enums**: All priority values are exactly "critical", "high", "medium", or "low" (case-sensitive)
|
|
104
104
|
6. **Status enum**: All status values are one of: pending, in_progress, completed, failed, skipped, split, auto_skipped
|
|
105
105
|
7. **Acceptance criteria**: At least 1 criterion per feature, each is a concrete, measurable statement
|
|
106
|
-
8. **Browser interaction**: If present,
|
|
106
|
+
8. **Browser interaction**: If present, may include `tool` and `verify_steps`; planner should add concrete `verify_steps` when known, but the schema permits an empty object for AI runtime exploration.
|
|
107
107
|
9. **Complexity enum**: If present, is one of: low, medium, high, critical
|
|
108
108
|
10. **Model field**: If present, is a non-empty string
|
|
109
109
|
11. **Critic field**: If present, is boolean; if true, critic_count should be 1 or 3
|
|
@@ -206,8 +206,8 @@ Anti-pattern rule: do not assign every generated item `Priority: high` and `Comp
|
|
|
206
206
|
|
|
207
207
|
Classify user intent first:
|
|
208
208
|
|
|
209
|
-
### Route A:
|
|
210
|
-
Use when
|
|
209
|
+
### Route A: Initial Feature Set for Existing/App-Planned Project
|
|
210
|
+
Use when source code or app-level context already exists but no `.prizmkit/plans/feature-list.json` exists yet. If the user is still defining vision, stack, or product brief from scratch, switch to `app-planner` only after confirmation.
|
|
211
211
|
|
|
212
212
|
Actions:
|
|
213
213
|
1. Understand the existing codebase and what's already implemented
|
|
@@ -307,13 +307,11 @@ For simple incremental planning, skip detailed Phase 2-3 analysis:
|
|
|
307
307
|
description: "Skip detailed Phase 2-3 analysis, draft features directly and add to feature-list.json"
|
|
308
308
|
- label: "Full workflow"
|
|
309
309
|
description: "Use the complete planning workflow with detailed analysis"
|
|
310
|
-
- label: "Implement directly"
|
|
311
|
-
description: "Skip the task list entirely and implement the feature(s) right now using /prizmkit-plan + /prizmkit-implement"
|
|
312
310
|
```
|
|
313
311
|
|
|
314
312
|
- **Fast-path** → Continue with fast-path workflow below
|
|
315
313
|
- **Full workflow** → Exit fast path, use full workflow from Phase 2
|
|
316
|
-
-
|
|
314
|
+
- If the user wants direct implementation instead of planning, exit the planner flow after explicit confirmation and recommend `/prizmkit-plan`; do not invoke implementation from inside `feature-planner`.
|
|
317
315
|
|
|
318
316
|
**NEVER proceed without explicit user selection via `AskUserQuestion`. Do NOT render options as plain text — the user must be able to click/select.**
|
|
319
317
|
3. Generate next sequential feature IDs
|
|
@@ -440,10 +438,10 @@ Activate when ALL true:
|
|
|
440
438
|
### Gate Behavior
|
|
441
439
|
When the session appears to be ending:
|
|
442
440
|
1. **Remind**: "You set out to produce `.prizmkit/plans/feature-list.json` but we haven't completed it yet."
|
|
443
|
-
2.
|
|
444
|
-
- **
|
|
445
|
-
- **
|
|
446
|
-
- **
|
|
441
|
+
2. Use `AskUserQuestion` with one question:
|
|
442
|
+
- **Continue to completion (Recommended)** — resume from current phase
|
|
443
|
+
- **Save draft & exit** — write current progress as `.prizmkit/plans/feature-list.draft.json`
|
|
444
|
+
- **Abandon** — exit without saving
|
|
447
445
|
|
|
448
446
|
## Handoff Message Template
|
|
449
447
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This guide provides structured templates and patterns for writing high-quality feature descriptions, acceptance criteria, complexity estimates, dependency graphs, and session granularity decisions. Use during feature-planner sessions.
|
|
4
4
|
|
|
5
|
-
For app-level design references (vision templates, tech stack matrix), see `app-planner/
|
|
5
|
+
For app-level design references (vision templates, tech stack matrix), see `app-planner/references/app-design-guide.md`. For feature decomposition patterns (CRUD, SaaS, Social, E-commerce), see `${SKILL_DIR}/references/decomposition-patterns.md`.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use these patterns as starting points when breaking an app into features. Adapt them to the specific project.
|
|
4
4
|
|
|
5
|
-
For app-level design references (vision templates, tech stack decision matrix), see `app-planner/
|
|
5
|
+
For app-level design references (vision templates, tech stack decision matrix), see `app-planner/references/app-design-guide.md`.
|
|
6
6
|
|
|
7
7
|
## Pattern A: CRUD-Based App
|
|
8
8
|
|
|
@@ -25,7 +25,8 @@ Group errors by type and apply targeted fixes:
|
|
|
25
25
|
| **Feature ID issues** | Invalid format (not `F-NNN`), duplicate IDs, undefined refs | "Suggest corrected IDs, show duplicates" | Yes |
|
|
26
26
|
| **Dependency errors** | Circular dependency, undefined target features | "Show cycle chain (e.g., `F-003 → F-005 → F-003`), suggest break point" | No |
|
|
27
27
|
| **Missing fields** | Feature missing required keys (title, description, AC) | "List each feature + missing keys, guide patch" | Partial |
|
|
28
|
-
| **Insufficient AC** | Feature has
|
|
28
|
+
| **Insufficient AC** | Feature has 0 acceptance criteria | "Show feature, require at least one measurable criterion" | No |
|
|
29
|
+
| **Thin AC quality** | Feature has 1-2 acceptance criteria | "Warn that planner quality is weak; suggest additional criteria" | No |
|
|
29
30
|
| **Invalid values** | complexity not in [low/medium/high/critical], status not pending | "Show field, valid values" | Yes |
|
|
30
31
|
|
|
31
32
|
### Execution
|
|
@@ -81,9 +81,9 @@ Allow priority updates for both old and new features if user requests reprioriti
|
|
|
81
81
|
Keep dependency correctness as first constraint.
|
|
82
82
|
|
|
83
83
|
### Step 5: Validate
|
|
84
|
-
|
|
84
|
+
Write a draft and generate the final list:
|
|
85
85
|
```bash
|
|
86
|
-
python3 ${SKILL_DIR}/scripts/validate-and-generate.py
|
|
86
|
+
python3 ${SKILL_DIR}/scripts/validate-and-generate.py generate --input .prizmkit/plans/feature-list.draft.json --output .prizmkit/plans/feature-list.json
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
Fix and re-run until pass.
|
|
@@ -1,31 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Initial Feature Set Planning Reference
|
|
2
2
|
|
|
3
|
-
Use this reference when
|
|
3
|
+
Use this reference when an existing or already app-planned project needs its first `.prizmkit/plans/feature-list.json`.
|
|
4
|
+
|
|
5
|
+
Do not use this reference to define app vision, tech stack, or architecture from scratch. That belongs to `app-planner`.
|
|
4
6
|
|
|
5
7
|
## Phase Guide
|
|
6
8
|
|
|
7
|
-
### Phase 1:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
### Phase 1: Existing Context
|
|
10
|
+
|
|
11
|
+
Capture or infer:
|
|
12
|
+
- project brief and current product goals
|
|
13
|
+
- already implemented capabilities
|
|
14
|
+
- target users and primary workflows from existing docs or code
|
|
15
|
+
- explicit non-goals already documented for the project
|
|
13
16
|
|
|
14
|
-
### Phase 2: Stack
|
|
15
|
-
If user has no preference, propose defaults aligned with project conventions:
|
|
16
|
-
- Frontend: Next.js + TypeScript
|
|
17
|
-
- Backend: Express/Nest (choose one and stay consistent)
|
|
18
|
-
- DB: PostgreSQL
|
|
19
|
-
- ORM: Prisma
|
|
20
|
-
- Test: unit + e2e baseline
|
|
17
|
+
### Phase 2: Existing Stack and Architecture
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
Read `.prizmkit/config.json`, `.prizmkit/plans/project-brief.md`, `.prizmkit/prizm-docs/root.prizm`, and platform instruction files when present. If app-level context is missing and the user is asking for product/stack decisions, recommend `app-planner`.
|
|
23
20
|
|
|
24
21
|
### Phase 3: MVP Features
|
|
22
|
+
|
|
25
23
|
Rules:
|
|
26
|
-
- Include foundational setup feature first
|
|
27
|
-
- Aim 5-12 features for
|
|
28
|
-
- Keep each feature implementable in one pipeline unit unless clearly too large
|
|
24
|
+
- Include foundational setup feature first only when the existing project still needs setup work.
|
|
25
|
+
- Aim 5-12 features for an initial executable plan unless the user explicitly scopes smaller.
|
|
26
|
+
- Keep each feature implementable in one pipeline unit unless clearly too large.
|
|
29
27
|
|
|
30
28
|
For each feature define:
|
|
31
29
|
- `id`
|
|
@@ -36,9 +34,10 @@ For each feature define:
|
|
|
36
34
|
- `dependencies`
|
|
37
35
|
- `acceptance_criteria`
|
|
38
36
|
- `status: "pending"`
|
|
39
|
-
- `browser_interaction`
|
|
37
|
+
- `browser_interaction` when UI verification is useful (see §Browser Interaction Planning in SKILL.md)
|
|
40
38
|
|
|
41
39
|
### Phase 4: Dependency & Priority
|
|
40
|
+
|
|
42
41
|
Check:
|
|
43
42
|
- no cycles
|
|
44
43
|
- all dependency targets exist
|
|
@@ -46,39 +45,36 @@ Check:
|
|
|
46
45
|
- priorities align with delivery value and risk
|
|
47
46
|
|
|
48
47
|
### Phase 5: Granularity
|
|
48
|
+
|
|
49
49
|
Split into `sub_features` when:
|
|
50
50
|
- scope crosses too many modules
|
|
51
51
|
- acceptance criteria are excessive
|
|
52
52
|
- complexity is high and uncertainty is high
|
|
53
53
|
|
|
54
54
|
### Phase 6: Generate + Validate
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
|
|
56
|
+
1. Write `.prizmkit/plans/feature-list.draft.json`.
|
|
57
|
+
2. Generate the final file:
|
|
57
58
|
```bash
|
|
58
|
-
python3 ${SKILL_DIR}/scripts/validate-and-generate.py
|
|
59
|
+
python3 ${SKILL_DIR}/scripts/validate-and-generate.py generate --input .prizmkit/plans/feature-list.draft.json --output .prizmkit/plans/feature-list.json
|
|
59
60
|
```
|
|
60
|
-
3. Fix
|
|
61
|
+
3. Fix draft errors, then re-run generate.
|
|
61
62
|
|
|
62
63
|
## Quality Rules
|
|
63
64
|
|
|
64
|
-
- Keep titles concise and English
|
|
65
|
-
- Make descriptions implementation-oriented
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
3. **Key behaviors**: business rules, validation rules, state transitions
|
|
74
|
-
4. **Data model**: entities, relationships, key fields (when applicable)
|
|
75
|
-
5. **Error/edge cases**: what happens on failure, empty states, limits
|
|
76
|
-
- Write testable acceptance criteria (at least 3; prefer 5+ for medium/high)
|
|
77
|
-
- Keep dependency graph simple and explicit
|
|
65
|
+
- Keep titles concise and English.
|
|
66
|
+
- Make descriptions implementation-oriented: clear boundaries, interfaces, behavior.
|
|
67
|
+
- Description depth by complexity:
|
|
68
|
+
- Low complexity: ≥30 words — what to build, key behavior, which files/modules are affected
|
|
69
|
+
- Medium complexity: ≥50 words — add integration points, data model overview, error handling approach
|
|
70
|
+
- High complexity: ≥80 words — add architecture decisions, performance considerations, security implications, migration strategy if applicable
|
|
71
|
+
- Description must cover what, integration points, key behaviors, data model when applicable, and error/edge cases.
|
|
72
|
+
- Write at least 1 testable acceptance criterion to satisfy schema validation. Fewer than 3 criteria is a planner quality warning; medium/high features should usually target 5+.
|
|
73
|
+
- Keep dependency graph simple and explicit.
|
|
78
74
|
|
|
79
75
|
## Final Delivery Checklist
|
|
80
76
|
|
|
81
|
-
- [ ] User confirmed
|
|
77
|
+
- [ ] User confirmed initial feature scope
|
|
82
78
|
- [ ] IDs are sequential
|
|
83
79
|
- [ ] `status` initialized to `pending`
|
|
84
80
|
- [ ] Validation passes
|
|
@@ -268,7 +268,7 @@ def validate_feature_list(data, is_new_plan=True):
|
|
|
268
268
|
if isinstance(priority, str) and priority in VALID_PRIORITIES:
|
|
269
269
|
priorities.append(priority)
|
|
270
270
|
else:
|
|
271
|
-
errors.append("{}: priority must be one of 'high', 'medium', 'low', got {}".format(
|
|
271
|
+
errors.append("{}: priority must be one of 'critical', 'high', 'medium', 'low', got {}".format(
|
|
272
272
|
label, repr(priority)
|
|
273
273
|
))
|
|
274
274
|
|