prizmkit 1.1.47 → 1.1.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/dev-pipeline/scripts/update-checkpoint.py +173 -0
  3. package/bundled/dev-pipeline/templates/sections/checkpoint-system.md +39 -9
  4. package/bundled/dev-pipeline/templates/sections/phase-browser-verification-auto.md +7 -1
  5. package/bundled/dev-pipeline/templates/sections/phase-browser-verification-opencli.md +7 -1
  6. package/bundled/dev-pipeline/templates/sections/phase-browser-verification.md +7 -1
  7. package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +14 -1
  8. package/bundled/dev-pipeline/templates/sections/phase-commit.md +14 -1
  9. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +7 -1
  10. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-lite-suffix.md +7 -1
  11. package/bundled/dev-pipeline/templates/sections/phase-critic-plan-full.md +7 -1
  12. package/bundled/dev-pipeline/templates/sections/phase-critic-plan.md +7 -1
  13. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +7 -1
  14. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +7 -1
  15. package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +7 -1
  16. package/bundled/dev-pipeline/templates/sections/phase-plan-agent.md +7 -1
  17. package/bundled/dev-pipeline/templates/sections/phase-plan-lite.md +7 -1
  18. package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +7 -1
  19. package/bundled/dev-pipeline/templates/sections/phase-review-full.md +7 -1
  20. package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +7 -1
  21. package/bundled/dev-pipeline/templates/sections/phase0-init.md +7 -1
  22. package/bundled/dev-pipeline/templates/sections/phase0-test-baseline.md +7 -1
  23. package/bundled/skills/_metadata.json +1 -1
  24. package/bundled/skills/bug-planner/SKILL.md +17 -5
  25. package/bundled/skills/bug-planner/scripts/validate-bug-list.py +234 -64
  26. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +16 -9
  27. package/bundled/skills/feature-pipeline-launcher/SKILL.md +16 -11
  28. package/bundled/skills/feature-planner/SKILL.md +16 -9
  29. package/bundled/skills/feature-planner/references/browser-interaction.md +13 -1
  30. package/bundled/skills/feature-planner/scripts/validate-and-generate.py +82 -0
  31. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +16 -9
  32. package/bundled/skills/refactor-planner/SKILL.md +11 -6
  33. package/bundled/skills/refactor-planner/scripts/validate-and-generate-refactor.py +72 -0
  34. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "frameworkVersion": "1.1.47",
3
- "bundledAt": "2026-05-21T00:55:32.225Z",
4
- "bundledFrom": "59d8ec1"
2
+ "frameworkVersion": "1.1.49",
3
+ "bundledAt": "2026-05-21T14:22:00.608Z",
4
+ "bundledFrom": "a8dea99"
5
5
  }
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env python3
2
+ """Safely update a workflow-checkpoint.json step status.
3
+
4
+ Instead of having the AI hand-write JSON, this script reads the checkpoint,
5
+ validates the update, and writes it back atomically.
6
+
7
+ Usage:
8
+ python3 update-checkpoint.py --checkpoint-path <path> --step <skill-or-id> --status <status>
9
+ python3 update-checkpoint.py --checkpoint-path <path> --step prizmkit-implement --status completed
10
+ python3 update-checkpoint.py --checkpoint-path <path> --step S04 --status in_progress
11
+ python3 update-checkpoint.py --checkpoint-path <path> --step prizmkit-code-review --status failed --note "max rounds exhausted"
12
+
13
+ Exit codes:
14
+ 0 = success
15
+ 1 = validation error (step not found, invalid status, etc.)
16
+ 2 = file error (not found, corrupted JSON)
17
+
18
+ Output (stdout): JSON with {ok: true, step_id, skill, old_status, new_status} or {ok: false, error}
19
+ """
20
+
21
+ import argparse
22
+ import json
23
+ import os
24
+ import sys
25
+ import tempfile
26
+
27
+ VALID_STATUSES = {"pending", "in_progress", "completed", "skipped", "failed"}
28
+
29
+
30
+ def _load_checkpoint(path):
31
+ """Load checkpoint JSON. Returns (data, error_string)."""
32
+ if not os.path.isfile(path):
33
+ return None, "File not found: {}".format(path)
34
+ try:
35
+ with open(path, "r", encoding="utf-8") as f:
36
+ data = json.load(f)
37
+ except json.JSONDecodeError as e:
38
+ return None, "Corrupted JSON: {}".format(e)
39
+ except IOError as e:
40
+ return None, "Cannot read file: {}".format(e)
41
+
42
+ if "steps" not in data or not isinstance(data["steps"], list):
43
+ return None, "Invalid checkpoint: missing 'steps' array"
44
+ return data, None
45
+
46
+
47
+ def _write_checkpoint(path, data):
48
+ """Write checkpoint JSON atomically using a temp file + rename."""
49
+ parent = os.path.dirname(os.path.abspath(path))
50
+ if parent and not os.path.isdir(parent):
51
+ os.makedirs(parent, exist_ok=True)
52
+
53
+ tmp_path = None
54
+ try:
55
+ fd, tmp_path = tempfile.mkstemp(
56
+ dir=parent, suffix=".tmp", prefix=".checkpoint-"
57
+ )
58
+ with os.fdopen(fd, "w", encoding="utf-8") as f:
59
+ json.dump(data, f, indent=2, ensure_ascii=False)
60
+ f.write("\n")
61
+ os.replace(tmp_path, os.path.abspath(path))
62
+ except (IOError, OSError) as e:
63
+ # Clean up temp file on error
64
+ if tmp_path is not None and os.path.exists(tmp_path):
65
+ os.unlink(tmp_path)
66
+ return "Cannot write file: {}".format(e)
67
+ return None
68
+
69
+
70
+ def _find_step(steps, identifier):
71
+ """Find a step by skill name or step ID.
72
+
73
+ Returns (index, step_dict) or (None, None).
74
+ """
75
+ for i, step in enumerate(steps):
76
+ if step.get("skill") == identifier or step.get("id") == identifier:
77
+ return i, step
78
+ return None, None
79
+
80
+
81
+ def update_checkpoint(checkpoint_path, step_identifier, new_status, note=None):
82
+ """Update a single step's status in the checkpoint file.
83
+
84
+ Returns a result dict: {ok, step_id, skill, old_status, new_status} or {ok, error}.
85
+ """
86
+ if new_status not in VALID_STATUSES:
87
+ return {
88
+ "ok": False,
89
+ "error": "Invalid status '{}'. Must be one of: {}".format(
90
+ new_status, ", ".join(sorted(VALID_STATUSES))
91
+ ),
92
+ }
93
+
94
+ data, err = _load_checkpoint(checkpoint_path)
95
+ if err:
96
+ return {"ok": False, "error": err}
97
+
98
+ idx, step = _find_step(data["steps"], step_identifier)
99
+ if step is None:
100
+ available = [
101
+ "{} ({})".format(s.get("id", "?"), s.get("skill", "?"))
102
+ for s in data["steps"]
103
+ ]
104
+ return {
105
+ "ok": False,
106
+ "error": "Step '{}' not found. Available: {}".format(
107
+ step_identifier, ", ".join(available)
108
+ ),
109
+ }
110
+
111
+ old_status = step.get("status", "unknown")
112
+ step["status"] = new_status
113
+
114
+ if note:
115
+ step["note"] = note
116
+
117
+ err = _write_checkpoint(checkpoint_path, data)
118
+ if err:
119
+ return {"ok": False, "error": err}
120
+
121
+ return {
122
+ "ok": True,
123
+ "step_id": step.get("id"),
124
+ "skill": step.get("skill"),
125
+ "old_status": old_status,
126
+ "new_status": new_status,
127
+ }
128
+
129
+
130
+ def main():
131
+ parser = argparse.ArgumentParser(
132
+ description="Safely update a workflow-checkpoint.json step status.",
133
+ formatter_class=argparse.RawDescriptionHelpFormatter,
134
+ epilog=(
135
+ "Examples:\n"
136
+ " %(prog)s --checkpoint-path .prizmkit/specs/my-feature/workflow-checkpoint.json "
137
+ "--step prizmkit-implement --status completed\n"
138
+ " %(prog)s --checkpoint-path .prizmkit/bugfix/B-001/workflow-checkpoint.json "
139
+ "--step S04 --status in_progress\n"
140
+ " %(prog)s --checkpoint-path .prizmkit/refactor/R-001/workflow-checkpoint.json "
141
+ "--step prizmkit-code-review --status failed --note 'max rounds exhausted'"
142
+ ),
143
+ )
144
+ parser.add_argument(
145
+ "--checkpoint-path", required=True, help="Path to workflow-checkpoint.json"
146
+ )
147
+ parser.add_argument(
148
+ "--step",
149
+ required=True,
150
+ help="Step identifier (skill name like 'prizmkit-implement' or step ID like 'S04')",
151
+ )
152
+ parser.add_argument(
153
+ "--status",
154
+ required=True,
155
+ choices=sorted(VALID_STATUSES),
156
+ help="New status for the step",
157
+ )
158
+ parser.add_argument(
159
+ "--note",
160
+ default=None,
161
+ help="Optional note to attach to the step (e.g., failure reason)",
162
+ )
163
+
164
+ args = parser.parse_args()
165
+ result = update_checkpoint(
166
+ args.checkpoint_path, args.step, args.status, args.note
167
+ )
168
+ print(json.dumps(result, indent=2, ensure_ascii=False))
169
+ return 0 if result.get("ok") else (2 if "File not found" in result.get("error", "") or "Corrupted" in result.get("error", "") else 1)
170
+
171
+
172
+ if __name__ == "__main__":
173
+ sys.exit(main())
@@ -8,23 +8,53 @@ A checkpoint file tracks your progress through this workflow:
8
8
 
9
9
  1. **Before each skill**: Read `workflow-checkpoint.json`, verify the previous step has `status: "completed"` or `status: "skipped"`. If it is still `"pending"` or `"in_progress"`, you MUST complete it first before moving on.
10
10
 
11
- 2. **Starting a skill**: Update the current step to `status: "in_progress"`.
11
+ 2. **Starting a skill**: Use the update script to set the current step to `status: "in_progress"`.
12
12
 
13
- 3. **After each skill completes**: Update the current step to `status: "completed"`. Then immediately re-read the file to verify the JSON is valid. If the read fails, re-write the file with correct JSON.
13
+ 3. **After each skill completes**: Use the update script to set the current step to `status: "completed"`.
14
14
 
15
- 4. **On failure**: Set the step to `status: "failed"` and continue to the next step if possible, or halt and write failure-log.md.
15
+ 4. **On failure**: Use the update script to set the step to `status: "failed"` and continue to the next step if possible, or halt and write failure-log.md.
16
16
 
17
17
  5. **On session exit**: The checkpoint file reflects your actual progress. Do NOT manually set future steps to "completed".
18
18
 
19
19
  ### Checkpoint Update Pattern
20
20
 
21
- After completing each skill:
21
+ **IMPORTANT: NEVER hand-write or edit `workflow-checkpoint.json` directly. Always use the update script.**
22
22
 
23
- 1. Read `{{CHECKPOINT_PATH}}`
24
- 2. Update the current step `"status": "completed"`
25
- 3. Update the next step `"status": "in_progress"`
26
- 4. Write the updated JSON back to `{{CHECKPOINT_PATH}}`
27
- 5. Verify: `python3 -c "import json; json.load(open('{{CHECKPOINT_PATH}}'))"` — if this fails, re-write
23
+ After completing each skill, run:
24
+
25
+ ```bash
26
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
27
+ --checkpoint-path {{CHECKPOINT_PATH}} \
28
+ --step <SKILL_NAME> \
29
+ --status completed
30
+ ```
31
+
32
+ For example, after completing `prizmkit-implement`:
33
+ ```bash
34
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
35
+ --checkpoint-path {{CHECKPOINT_PATH}} \
36
+ --step prizmkit-implement \
37
+ --status completed
38
+ ```
39
+
40
+ Before starting the next skill:
41
+ ```bash
42
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
43
+ --checkpoint-path {{CHECKPOINT_PATH}} \
44
+ --step <NEXT_SKILL_NAME> \
45
+ --status in_progress
46
+ ```
47
+
48
+ On failure:
49
+ ```bash
50
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
51
+ --checkpoint-path {{CHECKPOINT_PATH}} \
52
+ --step <SKILL_NAME> \
53
+ --status failed \
54
+ --note "brief failure reason"
55
+ ```
56
+
57
+ The script outputs JSON: `{"ok": true, ...}` on success, `{"ok": false, "error": "..."}` on failure.
28
58
 
29
59
  ### Resume Behavior
30
60
 
@@ -150,4 +150,10 @@ Append results to `context-snapshot.md`:
150
150
  If verification fails, log the failure details but continue to commit. Failures do NOT block the commit, but you MUST attempt verification and MUST clean up the dev server.
151
151
 
152
152
 
153
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `browser-verification` to `"completed"`.
153
+ **Checkpoint update**: Run the update script to set step `browser-verification` to `"completed"`:
154
+ ```bash
155
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
156
+ --checkpoint-path {{CHECKPOINT_PATH}} \
157
+ --step browser-verification \
158
+ --status completed
159
+ ```
@@ -121,4 +121,10 @@ Append results to `context-snapshot.md`:
121
121
  If verification fails, log the failure details but continue to commit. Failures do NOT block the commit, but you MUST attempt verification and MUST clean up the dev server.
122
122
 
123
123
 
124
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `browser-verification` to `"completed"`.
124
+ **Checkpoint update**: Run the update script to set step `browser-verification` to `"completed"`:
125
+ ```bash
126
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
127
+ --checkpoint-path {{CHECKPOINT_PATH}} \
128
+ --step browser-verification \
129
+ --status completed
130
+ ```
@@ -143,4 +143,10 @@ Browser cleanup: confirmed
143
143
  If verification fails, log the failure details but continue to commit. Failures do NOT block the commit, but you MUST attempt verification and MUST clean up the dev server.
144
144
 
145
145
 
146
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `browser-verification` to `"completed"`.
146
+ **Checkpoint update**: Run the update script to set step `browser-verification` to `"completed"`:
147
+ ```bash
148
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
149
+ --checkpoint-path {{CHECKPOINT_PATH}} \
150
+ --step browser-verification \
151
+ --status completed
152
+ ```
@@ -55,4 +55,17 @@ Rules for writing completion notes:
55
55
  - If this feature has no downstream dependents, still write the summary (it serves as documentation)
56
56
 
57
57
 
58
- **Checkpoint update**: After `/prizmkit-retrospective` completes, update `workflow-checkpoint.json` set step `prizmkit-retrospective` to `"completed"`. After `/prizmkit-committer` completes, set step `prizmkit-committer` to `"completed"`.
58
+ **Checkpoint update**: After `/prizmkit-retrospective` completes, run the update script to set step `prizmkit-retrospective` to `"completed"`:
59
+ ```bash
60
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
61
+ --checkpoint-path {{CHECKPOINT_PATH}} \
62
+ --step prizmkit-retrospective \
63
+ --status completed
64
+ ```
65
+ After `/prizmkit-committer` completes, set step `prizmkit-committer` to `"completed"`:
66
+ ```bash
67
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
68
+ --checkpoint-path {{CHECKPOINT_PATH}} \
69
+ --step prizmkit-committer \
70
+ --status completed
71
+ ```
@@ -48,4 +48,17 @@ Rules for writing completion notes:
48
48
  - If this feature has no downstream dependents, still write the summary (it serves as documentation)
49
49
 
50
50
 
51
- **Checkpoint update**: After `/prizmkit-retrospective` completes, update `workflow-checkpoint.json` set step `prizmkit-retrospective` to `"completed"`. After `/prizmkit-committer` completes, set step `prizmkit-committer` to `"completed"`.
51
+ **Checkpoint update**: After `/prizmkit-retrospective` completes, run the update script to set step `prizmkit-retrospective` to `"completed"`:
52
+ ```bash
53
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
54
+ --checkpoint-path {{CHECKPOINT_PATH}} \
55
+ --step prizmkit-retrospective \
56
+ --status completed
57
+ ```
58
+ After `/prizmkit-committer` completes, set step `prizmkit-committer` to `"completed"`:
59
+ ```bash
60
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
61
+ --checkpoint-path {{CHECKPOINT_PATH}} \
62
+ --step prizmkit-committer \
63
+ --status completed
64
+ ```
@@ -14,4 +14,10 @@
14
14
  - <trap entries extracted from L1/L2 docs>
15
15
 
16
16
 
17
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `context-snapshot` to `"completed"`.
17
+ **Checkpoint update**: Run the update script to set step `context-snapshot` to `"completed"`:
18
+ ```bash
19
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
20
+ --checkpoint-path {{CHECKPOINT_PATH}} \
21
+ --step context-snapshot \
22
+ --status completed
23
+ ```
@@ -3,4 +3,10 @@
3
3
  - **Section 5 — Existing Tests**: full content of related test files as code block
4
4
 
5
5
 
6
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `context-snapshot` to `"completed"`.
6
+ **Checkpoint update**: Run the update script to set step `context-snapshot` to `"completed"`:
7
+ ```bash
8
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
9
+ --checkpoint-path {{CHECKPOINT_PATH}} \
10
+ --step context-snapshot \
11
+ --status completed
12
+ ```
@@ -44,4 +44,10 @@ After all critics return, read all 3 reports:
44
44
  **CP-2.5**: Plan challenges reviewed and resolved.
45
45
 
46
46
 
47
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `critic-plan-review` to `"completed"`.
47
+ **Checkpoint update**: Run the update script to set step `critic-plan-review` to `"completed"`:
48
+ ```bash
49
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
50
+ --checkpoint-path {{CHECKPOINT_PATH}} \
51
+ --step critic-plan-review \
52
+ --status completed
53
+ ```
@@ -23,4 +23,10 @@ Wait for Critic to return.
23
23
  **CP-2.5**: Plan challenges reviewed and resolved.
24
24
 
25
25
 
26
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `critic-plan-review` to `"completed"`.
26
+ **Checkpoint update**: Run the update script to set step `critic-plan-review` to `"completed"`:
27
+ ```bash
28
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
29
+ --checkpoint-path {{CHECKPOINT_PATH}} \
30
+ --step critic-plan-review \
31
+ --status completed
32
+ ```
@@ -28,4 +28,10 @@ grep -q "## Implementation Log" .prizmkit/specs/{{FEATURE_SLUG}}/context-snapsho
28
28
  If GATE:MISSING — send message to Dev (re-spawn if needed): "Write the '## Implementation Log' section to context-snapshot.md before I can proceed to review. Include: files changed/created, key decisions, deviations from plan, notable discoveries."
29
29
 
30
30
 
31
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-implement` to `"completed"`.
31
+ **Checkpoint update**: Run the update script to set step `prizmkit-implement` to `"completed"`:
32
+ ```bash
33
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
34
+ --checkpoint-path {{CHECKPOINT_PATH}} \
35
+ --step prizmkit-implement \
36
+ --status completed
37
+ ```
@@ -41,4 +41,10 @@ Wait for Dev to return. **If Dev times out before all tasks are `[x]`**:
41
41
  All tasks `[x]`, tests pass.
42
42
 
43
43
 
44
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-implement` to `"completed"`.
44
+ **Checkpoint update**: Run the update script to set step `prizmkit-implement` to `"completed"`:
45
+ ```bash
46
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
47
+ --checkpoint-path {{CHECKPOINT_PATH}} \
48
+ --step prizmkit-implement \
49
+ --status completed
50
+ ```
@@ -39,4 +39,10 @@ You know this project's tech stack. Identify ALL test commands that apply (e.g.,
39
39
  **CP-2**: All acceptance criteria met, all tests pass.
40
40
 
41
41
 
42
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-implement` to `"completed"`.
42
+ **Checkpoint update**: Run the update script to set step `prizmkit-implement` to `"completed"`:
43
+ ```bash
44
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
45
+ --checkpoint-path {{CHECKPOINT_PATH}} \
46
+ --step prizmkit-implement \
47
+ --status completed
48
+ ```
@@ -18,4 +18,10 @@ Before proceeding past CP-1, verify:
18
18
  **CP-1**: plan.md exists with Tasks section.
19
19
 
20
20
 
21
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-plan` to `"completed"`.
21
+ **Checkpoint update**: Run the update script to set step `prizmkit-plan` to `"completed"`:
22
+ ```bash
23
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
24
+ --checkpoint-path {{CHECKPOINT_PATH}} \
25
+ --step prizmkit-plan \
26
+ --status completed
27
+ ```
@@ -18,4 +18,10 @@ Before proceeding past CP-1:
18
18
  **CP-1**: plan.md exists with Tasks section.
19
19
 
20
20
 
21
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-plan` to `"completed"`.
21
+ **Checkpoint update**: Run the update script to set step `prizmkit-plan` to `"completed"`:
22
+ ```bash
23
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
24
+ --checkpoint-path {{CHECKPOINT_PATH}} \
25
+ --step prizmkit-plan \
26
+ --status completed
27
+ ```
@@ -18,4 +18,10 @@ Read `review-report.md` and check the Verdict:
18
18
  **CP-3**: Review complete, report written.
19
19
 
20
20
 
21
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-code-review` to `"completed"`.
21
+ **Checkpoint update**: Run the update script to set step `prizmkit-code-review` to `"completed"`:
22
+ ```bash
23
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
24
+ --checkpoint-path {{CHECKPOINT_PATH}} \
25
+ --step prizmkit-code-review \
26
+ --status completed
27
+ ```
@@ -20,4 +20,10 @@ Run the full test suite: `({{TEST_CMD}}) 2>&1 | tee /tmp/review-test-out.txt | t
20
20
  **CP-3**: Review complete, tests pass, report written.
21
21
 
22
22
 
23
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-code-review` to `"completed"`.
23
+ **Checkpoint update**: Run the update script to set step `prizmkit-code-review` to `"completed"`:
24
+ ```bash
25
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
26
+ --checkpoint-path {{CHECKPOINT_PATH}} \
27
+ --step prizmkit-code-review \
28
+ --status completed
29
+ ```
@@ -64,4 +64,10 @@ Before proceeding past CP-1, verify:
64
64
  **CP-1**: Both spec.md and plan.md exist.
65
65
 
66
66
 
67
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `context-snapshot-and-plan` to `"completed"`.
67
+ **Checkpoint update**: Run the update script to set step `context-snapshot-and-plan` to `"completed"`:
68
+ ```bash
69
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
70
+ --checkpoint-path {{CHECKPOINT_PATH}} \
71
+ --step context-snapshot-and-plan \
72
+ --status completed
73
+ ```
@@ -4,4 +4,10 @@
4
4
  - **CP-0**: Verify `.prizmkit/prizm-docs/root.prizm`, `.prizmkit/config.json` exist
5
5
 
6
6
 
7
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `prizmkit-init` to `"completed"`.
7
+ **Checkpoint update**: Run the update script to set step `prizmkit-init` to `"completed"`:
8
+ ```bash
9
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
10
+ --checkpoint-path {{CHECKPOINT_PATH}} \
11
+ --step prizmkit-init \
12
+ --status completed
13
+ ```
@@ -12,4 +12,10 @@ Save the list of **pre-existing failing tests** (if any) as `BASELINE_FAILURES`.
12
12
  > **Test Output Rule**: Always capture test output to a temp file (`tee /tmp/test-out.txt`). Then grep the file instead of re-running the suite.
13
13
 
14
14
 
15
- **Checkpoint update**: Update `workflow-checkpoint.json` set step `test-baseline` to `"completed"`.
15
+ **Checkpoint update**: Run the update script to set step `test-baseline` to `"completed"`:
16
+ ```bash
17
+ python3 $PIPELINE_DIR/scripts/update-checkpoint.py \
18
+ --checkpoint-path {{CHECKPOINT_PATH}} \
19
+ --step test-baseline \
20
+ --status completed
21
+ ```
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.47",
2
+ "version": "1.1.49",
3
3
  "skills": {
4
4
  "prizm-kit": {
5
5
  "description": "Full-lifecycle dev toolkit. Covers spec-driven development, Prizm context docs, code quality, debugging, deployment, and knowledge management.",
@@ -223,9 +223,13 @@ Only proceed to Phase 5 after user confirms.
223
223
 
224
224
  ### Phase 5: Generate & Validate
225
225
 
226
- 1. **Generate `.prizmkit/plans/bug-fix-list.json`**: Conform to `.prizmkit/dev-pipeline/templates/bug-fix-list-schema.json`
227
- 2. **Validate against schema**: Run `python3 ${SKILL_DIR}/scripts/validate-bug-list.py .prizmkit/plans/bug-fix-list.json --feature-list .prizmkit/plans/feature-list.json`. If the script is unavailable, use the checklist in `${SKILL_DIR}/references/schema-validation.md`.
228
- 3. **Write file** to `.prizmkit/plans/` (or user-specified path)
226
+ 1. **Write draft JSON**: Write a draft `.prizmkit/plans/bug-fix-list.draft.json` with all collected bug data. Conform to `.prizmkit/dev-pipeline/templates/bug-fix-list-schema.json`.
227
+ 2. **Generate and validate**: Run the generate script to validate and produce the final file:
228
+ ```bash
229
+ python3 ${SKILL_DIR}/scripts/validate-bug-list.py generate --input .prizmkit/plans/bug-fix-list.draft.json --output .prizmkit/plans/bug-fix-list.json
230
+ ```
231
+ The script fills in defaults (`$schema`, `created_at`, `created_by`), validates all fields, and writes the final file only if validation passes.
232
+ 3. **If validation fails**: Fix the draft and retry (max 3 attempts). If the script is unavailable, use the checklist in `${SKILL_DIR}/references/schema-validation.md`.
229
233
  4. **Output**: File path, summary, and next steps
230
234
 
231
235
  **Gate → CP-BP-5**: `bug-fix-list.json` passes validation script with zero errors.
@@ -269,8 +273,12 @@ Batch-parse error logs to generate bug entries without interactive prompts:
269
273
  - error_source: populated from log content
270
274
  - verification_type: default to `automated`
271
275
  - acceptance_criteria: auto-generate "Error no longer occurs in [scenario]"
272
- 4. Output draft `.prizmkit/plans/bug-fix-list.json` for user review
276
+ 4. Write draft to `.prizmkit/plans/bug-fix-list.draft.json` for user review
273
277
  5. Ask: "Review and confirm? You can edit individual entries."
278
+ 6. After user confirms, call the generate script:
279
+ ```bash
280
+ python3 ${SKILL_DIR}/scripts/validate-bug-list.py generate --input .prizmkit/plans/bug-fix-list.draft.json --output .prizmkit/plans/bug-fix-list.json
281
+ ```
274
282
 
275
283
  ## Operation: From Tests
276
284
 
@@ -280,7 +288,11 @@ Batch-parse failed test output:
280
288
  2. Parse each failed test case as a separate bug entry
281
289
  3. Auto-populate `failed_test_path`, `error_message`
282
290
  4. Set verification_type to `automated` (test already exists)
283
- 5. Output draft `.prizmkit/plans/bug-fix-list.json`
291
+ 5. Write draft to `.prizmkit/plans/bug-fix-list.draft.json`
292
+ 6. After user confirms, call the generate script:
293
+ ```bash
294
+ python3 ${SKILL_DIR}/scripts/validate-bug-list.py generate --input .prizmkit/plans/bug-fix-list.draft.json --output .prizmkit/plans/bug-fix-list.json
295
+ ```
284
296
 
285
297
  ## Operation: Validate
286
298