prizmkit 1.1.111 → 1.1.113
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/adapters/codex/skill-adapter.js +4 -0
- package/bundled/agents/prizm-dev-team-reviewer.md +12 -1
- package/bundled/dev-pipeline/SCHEMA_ANALYSIS.md +10 -10
- package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +1 -0
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +20 -73
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +290 -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-tier1.md +7 -1
- package/bundled/dev-pipeline/templates/bootstrap-tier2.md +17 -19
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +21 -26
- 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 +8 -2
- package/bundled/dev-pipeline/templates/sections/phase-browser-verification-opencli.md +7 -1
- package/bundled/dev-pipeline/templates/sections/phase-browser-verification.md +7 -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 +104 -26
- package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +14 -0
- package/bundled/dev-pipeline/tests/test_python_runner_parity.py +239 -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 +70 -1
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +21 -21
- package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +2 -2
- package/bundled/skills/feature-pipeline-launcher/SKILL.md +25 -26
- 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 +170 -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 +14 -3
- package/bundled/skills/prizmkit-committer/SKILL.md +59 -47
- package/bundled/skills/prizmkit-deploy/SKILL.md +162 -381
- package/bundled/skills/prizmkit-deploy/references/database-setup.md +12 -3
- 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-init.md +11 -13
- 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/boundary-coverage-protocol.md +1 -1
- package/bundled/skills/prizmkit-test/references/examples.md +11 -9
- 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 +32 -13
- 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 +174 -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,11 +29,43 @@ 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
|
|
|
36
36
|
|
|
37
|
+
def _find_dependency_cycle(dep_map, item_ids):
|
|
38
|
+
"""Return one dependency cycle as a list of bug IDs, or an empty list."""
|
|
39
|
+
visiting = set()
|
|
40
|
+
visited = set()
|
|
41
|
+
stack = []
|
|
42
|
+
|
|
43
|
+
def visit(node):
|
|
44
|
+
visiting.add(node)
|
|
45
|
+
stack.append(node)
|
|
46
|
+
for dep in dep_map.get(node, []):
|
|
47
|
+
if dep not in item_ids:
|
|
48
|
+
continue
|
|
49
|
+
if dep in visiting:
|
|
50
|
+
start = stack.index(dep)
|
|
51
|
+
return stack[start:] + [dep]
|
|
52
|
+
if dep not in visited:
|
|
53
|
+
cycle = visit(dep)
|
|
54
|
+
if cycle:
|
|
55
|
+
return cycle
|
|
56
|
+
stack.pop()
|
|
57
|
+
visiting.remove(node)
|
|
58
|
+
visited.add(node)
|
|
59
|
+
return []
|
|
60
|
+
|
|
61
|
+
for bug_id in sorted(item_ids):
|
|
62
|
+
if bug_id not in visited:
|
|
63
|
+
cycle = visit(bug_id)
|
|
64
|
+
if cycle:
|
|
65
|
+
return cycle
|
|
66
|
+
return []
|
|
67
|
+
|
|
68
|
+
|
|
37
69
|
def _err(msg):
|
|
38
70
|
"""Print an error message to stderr."""
|
|
39
71
|
print("ERROR: {}".format(msg), file=sys.stderr)
|
|
@@ -162,6 +194,43 @@ def validate(data, feature_ids=None):
|
|
|
162
194
|
errors.append("{} ({}): invalid priority '{}' — must be one of 'high', 'medium', 'low'".format(
|
|
163
195
|
prefix, bug_id, priority))
|
|
164
196
|
|
|
197
|
+
# dependencies (optional field)
|
|
198
|
+
deps = bug.get("dependencies", [])
|
|
199
|
+
if deps is None:
|
|
200
|
+
deps = []
|
|
201
|
+
if not isinstance(deps, list):
|
|
202
|
+
errors.append("{} ({}): dependencies must be an array".format(prefix, bug_id))
|
|
203
|
+
else:
|
|
204
|
+
for dep in deps:
|
|
205
|
+
if not isinstance(dep, str) or not BUG_ID_PATTERN.match(dep):
|
|
206
|
+
errors.append("{} ({}): invalid dependency '{}' — must match B-NNN".format(
|
|
207
|
+
prefix, bug_id, dep))
|
|
208
|
+
elif dep == bug_id:
|
|
209
|
+
errors.append("{} ({}): bug cannot depend on itself".format(prefix, bug_id))
|
|
210
|
+
|
|
211
|
+
known_ids = {
|
|
212
|
+
bug.get("id")
|
|
213
|
+
for bug in bugs
|
|
214
|
+
if BUG_ID_PATTERN.match(str(bug.get("id", "")))
|
|
215
|
+
}
|
|
216
|
+
dep_map = {bug_id: [] for bug_id in known_ids}
|
|
217
|
+
for i, bug in enumerate(bugs):
|
|
218
|
+
bug_id = bug.get("id", "")
|
|
219
|
+
deps = bug.get("dependencies", []) or []
|
|
220
|
+
if not isinstance(deps, list):
|
|
221
|
+
continue
|
|
222
|
+
for dep in deps:
|
|
223
|
+
if isinstance(dep, str) and BUG_ID_PATTERN.match(dep):
|
|
224
|
+
if dep not in known_ids:
|
|
225
|
+
errors.append("bugs[{}] ({}): dependency '{}' does not exist".format(
|
|
226
|
+
i, bug_id, dep))
|
|
227
|
+
elif BUG_ID_PATTERN.match(str(bug_id)):
|
|
228
|
+
dep_map.setdefault(bug_id, []).append(dep)
|
|
229
|
+
|
|
230
|
+
cycle = _find_dependency_cycle(dep_map, known_ids)
|
|
231
|
+
if cycle:
|
|
232
|
+
errors.append("Dependency cycle detected: {}".format(" -> ".join(cycle)))
|
|
233
|
+
|
|
165
234
|
return {
|
|
166
235
|
"valid": len(errors) == 0,
|
|
167
236
|
"errors": errors,
|
|
@@ -5,7 +5,7 @@ description: "Launch and manage the bugfix pipeline from within an AI CLI sessio
|
|
|
5
5
|
|
|
6
6
|
# Bugfix-Pipeline Launcher
|
|
7
7
|
|
|
8
|
-
Launch the autonomous bug fix pipeline from within an AI CLI conversation.
|
|
8
|
+
Launch the autonomous bug fix 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
|
### Execution Mode
|
|
11
11
|
|
|
@@ -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 create any extra launcher-managed audit file.
|
|
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
|
|
@@ -93,7 +90,6 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
93
90
|
data = json.load(f)
|
|
94
91
|
bugs = data.get('bugs', [])
|
|
95
92
|
severity_order = {'critical': 0, 'high': 1, 'medium': 2, 'low': 3}
|
|
96
|
-
bugs_sorted = sorted(bugs, key=lambda b: (severity_order.get(b.get('severity', 'medium'), 2), b.get('priority', 99)))
|
|
97
93
|
print(f'Total bugs: {len(bugs)}')
|
|
98
94
|
sev_counts = {}
|
|
99
95
|
for b in bugs:
|
|
@@ -101,7 +97,7 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
101
97
|
sev_counts[s] = sev_counts.get(s, 0) + 1
|
|
102
98
|
print(f'By severity: {dict(sorted(sev_counts.items(), key=lambda x: severity_order.get(x[0], 2)))}')
|
|
103
99
|
print()
|
|
104
|
-
for b in
|
|
100
|
+
for b in bugs:
|
|
105
101
|
print(f\" {b['id']}: [{b.get('severity','?').upper()}] {b.get('title', 'untitled')}\")
|
|
106
102
|
"
|
|
107
103
|
```
|
|
@@ -125,9 +121,9 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
125
121
|
```bash
|
|
126
122
|
VERBOSE=1 python3 ./.prizmkit/dev-pipeline/cli.py bugfix run .prizmkit/plans/bug-fix-list.json
|
|
127
123
|
```
|
|
128
|
-
|
|
124
|
+
Selected-options example:
|
|
129
125
|
```bash
|
|
130
|
-
VERBOSE=1 MAX_RETRIES=5 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
|
|
126
|
+
VERBOSE=1 ENABLE_CRITIC=1 MAX_RETRIES=5 STOP_ON_FAILURE=1 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
|
|
131
127
|
python3 ./.prizmkit/dev-pipeline/cli.py bugfix run .prizmkit/plans/bug-fix-list.json
|
|
132
128
|
```
|
|
133
129
|
|
|
@@ -135,10 +131,10 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
135
131
|
```bash
|
|
136
132
|
python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json --env "VERBOSE=1"
|
|
137
133
|
```
|
|
138
|
-
|
|
134
|
+
Selected-options example:
|
|
139
135
|
```bash
|
|
140
136
|
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"
|
|
137
|
+
--env "VERBOSE=1 ENABLE_CRITIC=1 MAX_RETRIES=5 STOP_ON_FAILURE=1 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high"
|
|
142
138
|
```
|
|
143
139
|
|
|
144
140
|
**Manual mode**: Print the assembled command(s) and **stop here**. Do not execute anything. Do not proceed to step 7.
|
|
@@ -155,7 +151,10 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
155
151
|
|
|
156
152
|
7. **Confirm and launch** (Foreground and Background only — Manual mode ends at step 6):
|
|
157
153
|
|
|
158
|
-
|
|
154
|
+
Use a separate `AskUserQuestion` call: "Ready to launch the bugfix pipeline with the above command?"
|
|
155
|
+
Options:
|
|
156
|
+
- Launch now (Recommended)
|
|
157
|
+
- Cancel
|
|
159
158
|
|
|
160
159
|
After user confirms, execute the command from step 6.
|
|
161
160
|
|
|
@@ -165,6 +164,7 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
165
164
|
- Summarize results: total bugs, fixed, failed, skipped
|
|
166
165
|
- If all fixed: each bug session has already run `prizmkit-retrospective` internally (structural sync by default; full retrospective when the fix changed interfaces, dependencies, or observable behavior). Ask user what's next.
|
|
167
166
|
- If some failed: show failed bug IDs and suggest `python3 ./.prizmkit/dev-pipeline/cli.py reset bugfix <B-XXX> --clean --run` for a fresh retry
|
|
167
|
+
- **Browser verification**: Bug sessions with `browser_interaction` perform their own verification attempts during execution. After completion, use `python3 ./.prizmkit/dev-pipeline/cli.py bugfix status .prizmkit/plans/bug-fix-list.json` and per-bug session logs as the source of truth before summarizing browser verification results.
|
|
168
168
|
|
|
169
169
|
**If background daemon**:
|
|
170
170
|
1. Verify launch:
|
|
@@ -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
|
-
- **Session independence**:
|
|
268
|
-
- **Single instance**: Only one bugfix pipeline can run at a time.
|
|
269
|
-
- **
|
|
267
|
+
- **Session independence**: Only Background daemon mode runs detached. Foreground runs in the current AI CLI session, and Manual mode prints commands without launching.
|
|
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
|
+
- **Pipeline coexistence**: Bugfix, feature, and refactor pipelines use separate state directories (`.prizmkit/state/bugfix/`, `.prizmkit/state/features/`, `.prizmkit/state/refactor/`), so all three 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,19 +309,13 @@ 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
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
bi = feat.get('browser_interaction')
|
|
315
|
-
if bi and feat.get('status') == 'completed':
|
|
316
|
-
tool = bi.get('tool', 'auto') if isinstance(bi, dict) else 'auto'
|
|
317
|
-
print(f\" {feat['id']}: {feat.get('title','')} (tool: {tool})\")
|
|
318
|
-
" 2>/dev/null
|
|
319
|
-
```
|
|
312
|
+
If list status may be stale, use the runtime status command as the source of truth for completion state:
|
|
313
|
+
`python3 ./.prizmkit/dev-pipeline/cli.py feature status .prizmkit/plans/feature-list.json`.
|
|
314
|
+
|
|
315
|
+
1. **Check which completed features have browser verification configured**:
|
|
316
|
+
- Read `browser_interaction` configuration from `.prizmkit/plans/feature-list.json`.
|
|
317
|
+
- Use the runtime status command output to decide which configured features are actually completed.
|
|
318
|
+
- Do not rely on list-file `status` alone when runtime state exists, because daemon/foreground bookkeeping may be newer than the plan file.
|
|
320
319
|
|
|
321
320
|
2. **Ask user**: "N features have browser verification configured. Run browser verification now? (Y/n)"
|
|
322
321
|
|
|
@@ -339,13 +338,13 @@ After pipeline completion, if features have `browser_interaction` fields and the
|
|
|
339
338
|
|
|
340
339
|
### Error Handling
|
|
341
340
|
|
|
342
|
-
Read `${SKILL_DIR}/references/configuration.md` for the full error handling table
|
|
341
|
+
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
342
|
|
|
344
343
|
### Integration Notes
|
|
345
344
|
|
|
346
345
|
- **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
|
-
- **Session independence**:
|
|
348
|
-
- **Single instance**: Only one pipeline can run at a time.
|
|
349
|
-
- **Pipeline coexistence**: Feature and
|
|
346
|
+
- **Session independence**: Only Background daemon mode runs detached. Foreground runs in the current AI CLI session, and Manual mode prints commands without launching.
|
|
347
|
+
- **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.
|
|
348
|
+
- **Pipeline coexistence**: Feature, bugfix, and refactor pipelines use separate state directories (`.prizmkit/state/features/`, `.prizmkit/state/bugfix/`, `.prizmkit/state/refactor/`), so all three can run simultaneously without conflict.
|
|
350
349
|
- **State preservation**: Stopping and restarting the pipeline resumes from where it left off -- completed features are not re-run.
|
|
351
350
|
- **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.
|