prizmkit 1.0.95 → 1.0.97
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-dev.md +1 -2
- package/bundled/agents/prizm-dev-team-reviewer.md +1 -2
- package/bundled/dev-pipeline/README.md +0 -33
- package/bundled/dev-pipeline/retry-bug.sh +0 -3
- package/bundled/dev-pipeline/retry-feature.sh +0 -3
- package/bundled/dev-pipeline/run-bugfix.sh +0 -21
- package/bundled/dev-pipeline/run.sh +0 -26
- package/bundled/dev-pipeline/scripts/detect-stuck.py +4 -14
- package/bundled/dev-pipeline/scripts/parse-stream-progress.py +1 -1
- package/bundled/dev-pipeline/scripts/update-bug-status.py +2 -14
- package/bundled/dev-pipeline/scripts/update-feature-status.py +2 -13
- package/bundled/dev-pipeline/templates/bootstrap-tier1.md +3 -4
- package/bundled/dev-pipeline/templates/bootstrap-tier2.md +3 -4
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +3 -4
- package/bundled/dev-pipeline/templates/feature-list-schema.json +1 -1
- package/bundled/rules/prizm/prizm-commit-workflow.md +1 -1
- package/bundled/skills/_metadata.json +3 -3
- package/bundled/skills/app-planner/SKILL.md +0 -13
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +2 -2
- package/bundled/skills/dev-pipeline-launcher/SKILL.md +3 -3
- package/bundled/skills/prizm-kit/SKILL.md +4 -6
- package/bundled/skills/prizm-kit/assets/project-memory-template.md +1 -1
- package/bundled/skills/prizmkit-code-review/SKILL.md +1 -1
- package/bundled/skills/prizmkit-committer/SKILL.md +3 -3
- package/bundled/skills/prizmkit-implement/SKILL.md +2 -3
- package/bundled/skills/prizmkit-init/SKILL.md +3 -12
- package/bundled/skills/prizmkit-prizm-docs/SKILL.md +5 -6
- package/bundled/skills/prizmkit-prizm-docs/assets/PRIZM-SPEC.md +27 -69
- package/bundled/skills/prizmkit-retrospective/SKILL.md +20 -102
- package/bundled/skills/prizmkit-tool-adr-manager/SKILL.md +2 -2
- package/package.json +1 -1
- package/src/scaffold.js +1 -43
- package/src/upgrade.js +0 -2
- package/bundled/dev-pipeline/scripts/detect-models.sh +0 -150
- package/bundled/dev-pipeline/scripts/validate-feature-models.py +0 -56
- package/bundled/templates/hooks/prizm-post-merge.sh +0 -6
package/bundled/VERSION.json
CHANGED
|
@@ -31,8 +31,7 @@ If the snapshot does not exist:
|
|
|
31
31
|
|
|
32
32
|
| Path | Purpose |
|
|
33
33
|
|------|---------|
|
|
34
|
-
| `.prizm-docs/` | Architecture index — module structure, interfaces, dependencies, known traps (TRAPS) |
|
|
35
|
-
| `CLAUDE.md` / `CODEBUDDY.md` + `memory/MEMORY.md` | Project memory — development decisions (DECISIONS), interface conventions, project-level rules |
|
|
34
|
+
| `.prizm-docs/` | Architecture index — module structure, interfaces, dependencies, known traps (TRAPS), design decisions (DECISIONS) |
|
|
36
35
|
| `.prizmkit/specs/###-feature-name/` | Feature artifacts — spec.md / plan.md (with Tasks section) |
|
|
37
36
|
|
|
38
37
|
### Must Do (MUST)
|
|
@@ -24,8 +24,7 @@ Project documentation is in `.prizm-docs/`. Before review, read `context-snapsho
|
|
|
24
24
|
|
|
25
25
|
| Path | Purpose |
|
|
26
26
|
|------|---------|
|
|
27
|
-
| `.prizm-docs/` | Architecture index — module structure, interfaces, dependencies, known traps (TRAPS) |
|
|
28
|
-
| `CLAUDE.md` / `CODEBUDDY.md` + `memory/MEMORY.md` | Project memory — development decisions (DECISIONS), interface conventions, project-level rules |
|
|
27
|
+
| `.prizm-docs/` | Architecture index — module structure, interfaces, dependencies, known traps (TRAPS), design decisions (DECISIONS) |
|
|
29
28
|
| `.prizmkit/specs/###-feature-name/` | Feature artifacts — spec.md / plan.md (with Tasks section) |
|
|
30
29
|
|
|
31
30
|
### Must Do (MUST)
|
|
@@ -667,37 +667,6 @@ Use `--dry-run` to verify which model will be used without spawning a session:
|
|
|
667
667
|
|
|
668
668
|
> **Note**: `--model` support depends on the CLI. `claude` and `cbc` fully support it. If the CLI doesn't support it, the flag is silently ignored.
|
|
669
669
|
|
|
670
|
-
### Auto-Detection of Available Models
|
|
671
|
-
|
|
672
|
-
The pipeline automatically detects which AI models are available for your CLI:
|
|
673
|
-
|
|
674
|
-
```bash
|
|
675
|
-
# Manual detection
|
|
676
|
-
./dev-pipeline/scripts/detect-models.sh
|
|
677
|
-
|
|
678
|
-
# Results saved to
|
|
679
|
-
cat .prizmkit/available-models.json
|
|
680
|
-
```
|
|
681
|
-
|
|
682
|
-
Detection methods vary by platform:
|
|
683
|
-
|
|
684
|
-
- **CodeBuddy (cbc)**: Probes the CLI backend for the full list of supported models
|
|
685
|
-
- **Claude Code**: Self-reports the default model (model switching not available)
|
|
686
|
-
|
|
687
|
-
The pipeline runs detection automatically on:
|
|
688
|
-
|
|
689
|
-
- `./run.sh run` — before processing features
|
|
690
|
-
- `./retry-feature.sh` — before retrying
|
|
691
|
-
- `git pull` — via post-merge hook (background, non-blocking)
|
|
692
|
-
|
|
693
|
-
### Model Validation
|
|
694
|
-
|
|
695
|
-
When `available-models.json` exists, the pipeline validates feature model fields:
|
|
696
|
-
|
|
697
|
-
- Warns if a specified model is not in the available list
|
|
698
|
-
- Warns if the CLI doesn't support `--model` switching
|
|
699
|
-
- **Never blocks** — validation is advisory only
|
|
700
|
-
|
|
701
670
|
---
|
|
702
671
|
|
|
703
672
|
## AI CLI Configuration
|
|
@@ -894,7 +863,6 @@ run-bugfix.sh main loop
|
|
|
894
863
|
```
|
|
895
864
|
dev-pipeline/bugfix-state/ # Runtime state (gitignored)
|
|
896
865
|
+-- pipeline.json
|
|
897
|
-
+-- current-session.json
|
|
898
866
|
+-- bugs/B-XXX/
|
|
899
867
|
+-- status.json
|
|
900
868
|
+-- sessions/B-XXX-YYYYMMDDHHMMSS/
|
|
@@ -971,7 +939,6 @@ dev-pipeline/
|
|
|
971
939
|
|
|
|
972
940
|
+-- state/ # Feature pipeline runtime state (gitignored)
|
|
973
941
|
| +-- pipeline.json
|
|
974
|
-
| +-- current-session.json
|
|
975
942
|
| +-- .pipeline.pid # Daemon PID file
|
|
976
943
|
| +-- .pipeline-meta.json # Daemon metadata
|
|
977
944
|
| +-- pipeline-daemon.log # Daemon log (50MB rotation)
|
|
@@ -175,9 +175,6 @@ python3 "$SCRIPTS_DIR/update-bug-status.py" \
|
|
|
175
175
|
log_warn "Failed to clean bug artifacts (continuing with fresh session only)"
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
-
# Auto-detect available models (must run before any git commit operations)
|
|
179
|
-
bash "$SCRIPT_DIR/scripts/detect-models.sh" --quiet 2>/dev/null || true
|
|
180
|
-
|
|
181
178
|
# ============================================================
|
|
182
179
|
# Generate bootstrap prompt
|
|
183
180
|
# ============================================================
|
|
@@ -170,9 +170,6 @@ python3 "$SCRIPTS_DIR/update-feature-status.py" \
|
|
|
170
170
|
log_warn "Failed to clean feature artifacts (continuing with fresh session only)"
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
# Auto-detect available models (quiet, non-blocking)
|
|
174
|
-
bash "$SCRIPT_DIR/scripts/detect-models.sh" --quiet 2>/dev/null || true
|
|
175
|
-
|
|
176
173
|
# ============================================================
|
|
177
174
|
# Generate bootstrap prompt
|
|
178
175
|
# ============================================================
|
|
@@ -534,9 +534,6 @@ main() {
|
|
|
534
534
|
log_info "Resuming existing bugfix pipeline..."
|
|
535
535
|
fi
|
|
536
536
|
|
|
537
|
-
# Auto-detect available models (must run before any git commit operations)
|
|
538
|
-
bash "$SCRIPT_DIR/scripts/detect-models.sh" --quiet 2>/dev/null || true
|
|
539
|
-
|
|
540
537
|
# Print header
|
|
541
538
|
echo ""
|
|
542
539
|
echo -e "${BOLD}════════════════════════════════════════════════════${NC}"
|
|
@@ -590,7 +587,6 @@ main() {
|
|
|
590
587
|
log_success " All bugs processed! Bug fix pipeline finished."
|
|
591
588
|
log_success " Total sessions: $session_count"
|
|
592
589
|
log_success "════════════════════════════════════════════════════"
|
|
593
|
-
rm -f "$STATE_DIR/current-session.json"
|
|
594
590
|
|
|
595
591
|
# Merge dev branch back to original
|
|
596
592
|
if [[ -n "$_DEV_BRANCH_NAME" ]]; then
|
|
@@ -648,23 +644,6 @@ main() {
|
|
|
648
644
|
--state-dir "$STATE_DIR" \
|
|
649
645
|
--output "$bootstrap_prompt" >/dev/null 2>&1
|
|
650
646
|
|
|
651
|
-
# Track current session (atomic write via temp file)
|
|
652
|
-
python3 -c "
|
|
653
|
-
import json, sys, os
|
|
654
|
-
from datetime import datetime, timezone
|
|
655
|
-
bug_id, session_id, state_dir = sys.argv[1], sys.argv[2], sys.argv[3]
|
|
656
|
-
data = {
|
|
657
|
-
'bug_id': bug_id,
|
|
658
|
-
'session_id': session_id,
|
|
659
|
-
'started_at': datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
660
|
-
}
|
|
661
|
-
target = os.path.join(state_dir, 'current-session.json')
|
|
662
|
-
tmp = target + '.tmp'
|
|
663
|
-
with open(tmp, 'w') as f:
|
|
664
|
-
json.dump(data, f, indent=2)
|
|
665
|
-
os.replace(tmp, target)
|
|
666
|
-
" "$bug_id" "$session_id" "$STATE_DIR"
|
|
667
|
-
|
|
668
647
|
# Spawn session
|
|
669
648
|
log_info "Spawning AI CLI session: $session_id"
|
|
670
649
|
_SPAWN_RESULT=""
|
|
@@ -836,14 +836,6 @@ main() {
|
|
|
836
836
|
log_info "Resuming existing pipeline..."
|
|
837
837
|
fi
|
|
838
838
|
|
|
839
|
-
# Auto-detect available models + validate feature model fields
|
|
840
|
-
bash "$SCRIPT_DIR/scripts/detect-models.sh" --quiet 2>/dev/null || true
|
|
841
|
-
if [[ -f ".prizmkit/available-models.json" ]]; then
|
|
842
|
-
python3 "$SCRIPTS_DIR/validate-feature-models.py" \
|
|
843
|
-
--feature-list "$feature_list" \
|
|
844
|
-
--models-file ".prizmkit/available-models.json" 2>&1 | head -5 || true
|
|
845
|
-
fi
|
|
846
|
-
|
|
847
839
|
# Print header
|
|
848
840
|
echo ""
|
|
849
841
|
echo -e "${BOLD}════════════════════════════════════════════════════${NC}"
|
|
@@ -909,7 +901,6 @@ for f in data.get('stuck_features', []):
|
|
|
909
901
|
log_success " All features completed! Pipeline finished."
|
|
910
902
|
log_success " Total sessions: $session_count"
|
|
911
903
|
log_success "════════════════════════════════════════════════════"
|
|
912
|
-
rm -f "$STATE_DIR/current-session.json"
|
|
913
904
|
break
|
|
914
905
|
fi
|
|
915
906
|
|
|
@@ -993,23 +984,6 @@ for f in data.get('stuck_features', []):
|
|
|
993
984
|
local feature_model
|
|
994
985
|
feature_model=$(echo "$gen_output" | python3 -c "import json,sys; print(json.load(sys.stdin).get('model',''))" 2>/dev/null || echo "")
|
|
995
986
|
|
|
996
|
-
# Update current session tracking (atomic write via temp file)
|
|
997
|
-
python3 -c "
|
|
998
|
-
import json, sys, os
|
|
999
|
-
from datetime import datetime, timezone
|
|
1000
|
-
feature_id, session_id, state_dir = sys.argv[1], sys.argv[2], sys.argv[3]
|
|
1001
|
-
data = {
|
|
1002
|
-
'feature_id': feature_id,
|
|
1003
|
-
'session_id': session_id,
|
|
1004
|
-
'started_at': datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
1005
|
-
}
|
|
1006
|
-
target = os.path.join(state_dir, 'current-session.json')
|
|
1007
|
-
tmp = target + '.tmp'
|
|
1008
|
-
with open(tmp, 'w') as f:
|
|
1009
|
-
json.dump(data, f, indent=2)
|
|
1010
|
-
os.replace(tmp, target)
|
|
1011
|
-
" "$feature_id" "$session_id" "$STATE_DIR"
|
|
1012
|
-
|
|
1013
987
|
# Mark feature as in-progress before spawning session
|
|
1014
988
|
python3 "$SCRIPTS_DIR/update-feature-status.py" \
|
|
1015
989
|
--feature-list "$feature_list" \
|
|
@@ -188,8 +188,8 @@ def check_stuck_checkpoint(feature_dir):
|
|
|
188
188
|
def check_stale_heartbeat(feature_id, feature_status, state_dir, stale_threshold):
|
|
189
189
|
"""Check 3: Is the heartbeat stale or missing for an in_progress feature?
|
|
190
190
|
|
|
191
|
-
Only applies to features whose status is 'in_progress'
|
|
192
|
-
|
|
191
|
+
Only applies to features whose status is 'in_progress'.
|
|
192
|
+
Uses last_session_id from the feature's own status to find the active session.
|
|
193
193
|
|
|
194
194
|
Returns a stuck-report dict or None.
|
|
195
195
|
"""
|
|
@@ -197,18 +197,8 @@ def check_stale_heartbeat(feature_id, feature_status, state_dir, stale_threshold
|
|
|
197
197
|
if status != "in_progress":
|
|
198
198
|
return None
|
|
199
199
|
|
|
200
|
-
#
|
|
201
|
-
|
|
202
|
-
current_session = load_json(current_session_path)
|
|
203
|
-
if current_session is None:
|
|
204
|
-
return None
|
|
205
|
-
|
|
206
|
-
# Check if the current session is for this feature
|
|
207
|
-
session_feature = current_session.get("feature_id")
|
|
208
|
-
if session_feature != feature_id:
|
|
209
|
-
return None
|
|
210
|
-
|
|
211
|
-
session_id = current_session.get("session_id")
|
|
200
|
+
# Use last_session_id from the feature's own status
|
|
201
|
+
session_id = feature_status.get("last_session_id")
|
|
212
202
|
if not session_id:
|
|
213
203
|
return None
|
|
214
204
|
|
|
@@ -58,7 +58,7 @@ PHASE_KEYWORDS = {
|
|
|
58
58
|
},
|
|
59
59
|
"retrospective": {
|
|
60
60
|
"strong": ["prizmkit-retrospective"],
|
|
61
|
-
"weak": ["retrospective", "structural sync", "knowledge
|
|
61
|
+
"weak": ["retrospective", "structural sync", "architecture knowledge", ".prizm-docs/ sync"],
|
|
62
62
|
},
|
|
63
63
|
"commit": {
|
|
64
64
|
"strong": ["prizmkit-committer"],
|
|
@@ -365,13 +365,7 @@ def cleanup_bug_artifacts(state_dir, bug_id, project_root=None):
|
|
|
365
365
|
shutil.rmtree(dev_team_dir)
|
|
366
366
|
cleaned.append("Deleted {} ({} files)".format(dev_team_dir, file_count))
|
|
367
367
|
|
|
368
|
-
# 5)
|
|
369
|
-
current_session_path = os.path.join(state_dir, "current-session.json")
|
|
370
|
-
if os.path.isfile(current_session_path):
|
|
371
|
-
current_session, _ = load_json_file(current_session_path)
|
|
372
|
-
if current_session and current_session.get("bug_id") == bug_id:
|
|
373
|
-
os.remove(current_session_path)
|
|
374
|
-
cleaned.append("Deleted {}".format(current_session_path))
|
|
368
|
+
# 5) (removed: current-session.json no longer used)
|
|
375
369
|
|
|
376
370
|
return cleaned
|
|
377
371
|
|
|
@@ -603,13 +597,7 @@ def action_clean(args, bug_list_path, state_dir):
|
|
|
603
597
|
shutil.rmtree(dev_team_dir)
|
|
604
598
|
cleaned.append("Deleted {} ({} files)".format(dev_team_dir, file_count))
|
|
605
599
|
|
|
606
|
-
# 4.
|
|
607
|
-
current_session_path = os.path.join(state_dir, "current-session.json")
|
|
608
|
-
if os.path.isfile(current_session_path):
|
|
609
|
-
current_session, _ = load_json_file(current_session_path)
|
|
610
|
-
if current_session and current_session.get("bug_id") == bug_id:
|
|
611
|
-
os.remove(current_session_path)
|
|
612
|
-
cleaned.append("Deleted {}".format(current_session_path))
|
|
600
|
+
# 4. (removed: current-session.json no longer used)
|
|
613
601
|
|
|
614
602
|
# 5. Reset status
|
|
615
603
|
bs = load_bug_status(state_dir, bug_id)
|
|
@@ -264,12 +264,7 @@ def cleanup_feature_artifacts(feature_list_path, state_dir, feature_id, project_
|
|
|
264
264
|
cleaned.append("Deleted {} ({} files)".format(dev_team_dir, file_count))
|
|
265
265
|
|
|
266
266
|
# 5) Clear current-session pointer if it points to this feature
|
|
267
|
-
|
|
268
|
-
if os.path.isfile(current_session_path):
|
|
269
|
-
current_session, _ = load_json_file(current_session_path)
|
|
270
|
-
if current_session and current_session.get("feature_id") == feature_id:
|
|
271
|
-
os.remove(current_session_path)
|
|
272
|
-
cleaned.append("Deleted {}".format(current_session_path))
|
|
267
|
+
# (no-op: current-session.json has been removed from the pipeline)
|
|
273
268
|
|
|
274
269
|
return cleaned
|
|
275
270
|
|
|
@@ -989,13 +984,7 @@ def action_clean(args, feature_list_path, state_dir):
|
|
|
989
984
|
shutil.rmtree(dev_team_dir)
|
|
990
985
|
cleaned.append("Deleted {} ({} files)".format(dev_team_dir, file_count))
|
|
991
986
|
|
|
992
|
-
# 4.
|
|
993
|
-
current_session_path = os.path.join(state_dir, "current-session.json")
|
|
994
|
-
if os.path.isfile(current_session_path):
|
|
995
|
-
current_session, _ = load_json_file(current_session_path)
|
|
996
|
-
if current_session and current_session.get("feature_id") == feature_id:
|
|
997
|
-
os.remove(current_session_path)
|
|
998
|
-
cleaned.append("Deleted {}".format(current_session_path))
|
|
987
|
+
# 4. (removed: current-session.json no longer used)
|
|
999
988
|
|
|
1000
989
|
# 5. Reset status (reuse reset logic)
|
|
1001
990
|
fs = load_feature_status(state_dir, feature_id)
|
|
@@ -133,11 +133,10 @@ Key decisions: [list]
|
|
|
133
133
|
|
|
134
134
|
### Phase 4: Architecture Sync & Commit
|
|
135
135
|
|
|
136
|
-
**4a.** Run `/prizmkit-retrospective` — maintains `.prizm-docs/` (architecture index)
|
|
136
|
+
**4a.** Run `/prizmkit-retrospective` — maintains `.prizm-docs/` (architecture index):
|
|
137
137
|
1. **Structural sync**: Use `git diff --cached --name-status` to locate changed modules, update KEY_FILES/INTERFACES/DEPENDENCIES/file counts in affected `.prizm-docs/` files
|
|
138
|
-
2. **Architecture knowledge** (feature sessions only): Extract TRAPS/RULES from completed work into `.prizm-docs/`
|
|
139
|
-
3.
|
|
140
|
-
4. Stage all doc changes: `git add .prizm-docs/`
|
|
138
|
+
2. **Architecture knowledge** (feature sessions only): Extract TRAPS/RULES/DECISIONS from completed work into `.prizm-docs/`
|
|
139
|
+
3. Stage all doc changes: `git add .prizm-docs/`
|
|
141
140
|
|
|
142
141
|
Doc maintenance pass condition (pipeline-enforced): `.prizm-docs/` changed in the final commit.
|
|
143
142
|
|
|
@@ -180,11 +180,10 @@ If GATE:MISSING — send message to Reviewer (re-spawn if needed): "Write the '#
|
|
|
180
180
|
|
|
181
181
|
### Phase 5: Architecture Sync & Commit
|
|
182
182
|
|
|
183
|
-
**5a.** Run `/prizmkit-retrospective` — maintains `.prizm-docs/` (architecture index)
|
|
183
|
+
**5a.** Run `/prizmkit-retrospective` — maintains `.prizm-docs/` (architecture index):
|
|
184
184
|
1. **Structural sync**: Use `git diff --cached --name-status` to locate changed modules, update KEY_FILES/INTERFACES/DEPENDENCIES/file counts in affected `.prizm-docs/` files
|
|
185
|
-
2. **Architecture knowledge** (feature sessions only): Extract TRAPS/RULES from completed work into `.prizm-docs/`
|
|
186
|
-
3.
|
|
187
|
-
4. Stage all doc changes: `git add .prizm-docs/`
|
|
185
|
+
2. **Architecture knowledge** (feature sessions only): Extract TRAPS/RULES/DECISIONS from completed work into `.prizm-docs/`
|
|
186
|
+
3. Stage all doc changes: `git add .prizm-docs/`
|
|
188
187
|
|
|
189
188
|
Doc maintenance pass condition (pipeline-enforced): `.prizm-docs/` changed in the final commit.
|
|
190
189
|
|
|
@@ -354,12 +354,11 @@ git log --oneline | grep "{{FEATURE_ID}}" | head -3
|
|
|
354
354
|
- If a commit for `{{FEATURE_ID}}` already exists → **skip 6c** (do NOT run /prizmkit-committer, do NOT run git reset, do NOT stage or unstage anything). Proceed directly to Final Clean Check.
|
|
355
355
|
- If no existing commit → proceed normally with 6a–6c.
|
|
356
356
|
|
|
357
|
-
**6b.** Run `/prizmkit-retrospective` (**before commit**, maintains `.prizm-docs/` architecture index
|
|
357
|
+
**6b.** Run `/prizmkit-retrospective` (**before commit**, maintains `.prizm-docs/` architecture index):
|
|
358
358
|
- **Structural sync**: update KEY_FILES/INTERFACES/DEPENDENCIES/file counts for changed modules
|
|
359
|
-
- **Architecture knowledge** (feature sessions only): extract TRAPS, RULES from completed work into `.prizm-docs/`
|
|
360
|
-
- **Memory sedimentation** (feature sessions only): sediment DECISIONS and interface conventions to platform memory file (`CLAUDE.md` for Claude Code, BOTH `CODEBUDDY.md` AND `memory/MEMORY.md` for CodeBuddy)
|
|
359
|
+
- **Architecture knowledge** (feature sessions only): extract TRAPS, RULES, DECISIONS from completed work into `.prizm-docs/`
|
|
361
360
|
- Stage all doc changes: `git add .prizm-docs/`
|
|
362
|
-
- **For bug-fix sessions**: structural sync only, skip knowledge injection
|
|
361
|
+
- **For bug-fix sessions**: structural sync only, skip knowledge injection unless a genuinely new pitfall was discovered
|
|
363
362
|
|
|
364
363
|
**6c.** Run `/prizmkit-committer` → `feat({{FEATURE_ID}}): {{FEATURE_TITLE}}`, do NOT push
|
|
365
364
|
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
},
|
|
100
100
|
"model": {
|
|
101
101
|
"type": "string",
|
|
102
|
-
"description": "AI model ID for this feature. Overrides $MODEL env var.
|
|
102
|
+
"description": "AI model ID for this feature. Overrides $MODEL env var."
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
}
|
|
@@ -3,7 +3,7 @@ description: "PrizmKit commit workflow rules"
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Before any git commit in this project:
|
|
6
|
-
1. Run `/prizmkit-retrospective` to sync `.prizm-docs/` (architecture index
|
|
6
|
+
1. Run `/prizmkit-retrospective` to sync `.prizm-docs/` (architecture index with TRAPS/RULES/DECISIONS)
|
|
7
7
|
2. Use Conventional Commits format: type(scope): description
|
|
8
8
|
3. Bug fixes use `fix()` prefix, not `feat()`
|
|
9
9
|
4. Bug fixes run retrospective with structural sync only (Job 1)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
2
|
+
"version": "1.0.97",
|
|
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.",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"hasScripts": false
|
|
66
66
|
},
|
|
67
67
|
"prizmkit-retrospective": {
|
|
68
|
-
"description": "Sole .prizm-docs/ maintainer. Structural sync + TRAPS/RULES injection to architecture index.
|
|
68
|
+
"description": "Sole .prizm-docs/ maintainer. Structural sync + TRAPS/RULES/DECISIONS injection to architecture index. Run after code review passes, before committing.",
|
|
69
69
|
"tier": "1",
|
|
70
70
|
"category": "prizmkit-skill",
|
|
71
71
|
"hasAssets": true,
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
]
|
|
256
256
|
},
|
|
257
257
|
"minimal": {
|
|
258
|
-
"description": "Minimal closed-loop workflow: full spec-driven cycle with
|
|
258
|
+
"description": "Minimal closed-loop workflow: full spec-driven cycle with .prizm-docs/ architecture sync and code review",
|
|
259
259
|
"skills": [
|
|
260
260
|
"prizm-kit",
|
|
261
261
|
"prizmkit-init",
|
|
@@ -49,8 +49,6 @@ Before questions, check optional context files (never block if absent):
|
|
|
49
49
|
- `.prizm-docs/root.prizm` (architecture/project context)
|
|
50
50
|
- `.prizmkit/config.json` (existing stack preferences)
|
|
51
51
|
- existing `feature-list.json` (required for incremental mode)
|
|
52
|
-
- `.prizmkit/available-models.json` (detected AI models, from detect-models.sh)
|
|
53
|
-
|
|
54
52
|
Note:
|
|
55
53
|
- This skill **reads** `.prizmkit/config.json` if present.
|
|
56
54
|
- This skill does **not** create `.prizmkit/config.json` directly.
|
|
@@ -84,12 +82,6 @@ Execute the selected scenario workflow in conversation mode with mandatory check
|
|
|
84
82
|
### Interactive Phases
|
|
85
83
|
1. clarify business goal and scope
|
|
86
84
|
2. confirm constraints and tech assumptions
|
|
87
|
-
2b. (optional) if `.prizmkit/available-models.json` exists and `model_switch_supported == true`:
|
|
88
|
-
- read the file and show available models to user
|
|
89
|
-
- ask: "要为 feature 指定 AI 模型吗?" with options:
|
|
90
|
-
a) 全部使用某个模型(写入每个 feature 的 model 字段)
|
|
91
|
-
b) 不指定(使用 $MODEL 环境变量或 CLI 默认)
|
|
92
|
-
- if user chooses a model, remember it for Phase 6 JSON generation
|
|
93
85
|
3. propose feature set with dependencies
|
|
94
86
|
4. refine descriptions and acceptance criteria
|
|
95
87
|
5. verify DAG/order/priorities
|
|
@@ -158,11 +150,6 @@ AI: "Ready to proceed to dev-pipeline."
|
|
|
158
150
|
- valid dependency DAG
|
|
159
151
|
- new items default `status: "pending"`
|
|
160
152
|
- English feature titles for stable slug generation
|
|
161
|
-
- if `.prizmkit/available-models.json` exists and `model_switch_supported == true`:
|
|
162
|
-
- if user specified model preference during planning:
|
|
163
|
-
- set `model` field on every feature with user's chosen model
|
|
164
|
-
- if user said "no preference" → omit `model` field
|
|
165
|
-
- model IDs should come from `.prizmkit/available-models.json` models list
|
|
166
153
|
- `model` field is optional — omitting it means the pipeline uses $MODEL env or CLI default
|
|
167
154
|
|
|
168
155
|
## Next-Step Execution Policy (after planning)
|
|
@@ -189,8 +189,8 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
189
189
|
|
|
190
190
|
4. **For per-bug session logs** (when user asks about a specific bug):
|
|
191
191
|
```bash
|
|
192
|
-
#
|
|
193
|
-
cat dev-pipeline/bugfix-state/
|
|
192
|
+
# Check bug status for last session ID
|
|
193
|
+
cat dev-pipeline/bugfix-state/bugs/<BUG_ID>/status.json 2>/dev/null
|
|
194
194
|
# Then tail that bug's session log
|
|
195
195
|
tail -100 dev-pipeline/bugfix-state/bugs/<BUG_ID>/sessions/<SESSION_ID>/logs/session.log
|
|
196
196
|
```
|
|
@@ -225,8 +225,8 @@ Detect user intent from their message, then follow the corresponding workflow:
|
|
|
225
225
|
|
|
226
226
|
4. **For per-feature session logs** (when user asks about a specific feature):
|
|
227
227
|
```bash
|
|
228
|
-
#
|
|
229
|
-
cat dev-pipeline/state/
|
|
228
|
+
# Check feature status for last session ID
|
|
229
|
+
cat dev-pipeline/state/features/<FEATURE_ID>/status.json 2>/dev/null
|
|
230
230
|
# Then tail that feature's session log
|
|
231
231
|
tail -100 dev-pipeline/state/features/<FEATURE_ID>/sessions/<SESSION_ID>/logs/session.log
|
|
232
232
|
```
|
|
@@ -296,4 +296,4 @@ Notes:
|
|
|
296
296
|
- **Single instance**: Only one pipeline can run at a time. The PID file prevents duplicates.
|
|
297
297
|
- **Pipeline coexistence**: Feature and bugfix pipelines use separate state directories (`state/` vs `bugfix-state/`), so they can run simultaneously without conflict.
|
|
298
298
|
- **State preservation**: Stopping and restarting the pipeline resumes from where it left off -- completed features are not re-run.
|
|
299
|
-
- **HANDOFF**: After pipeline completes all features, suggest running `prizmkit-retrospective` for
|
|
299
|
+
- **HANDOFF**: After pipeline completes all features, suggest running `prizmkit-retrospective` for `.prizm-docs/` architecture sync, or ask user what's next.
|
|
@@ -74,17 +74,15 @@ All documentation records are for: features, projects, code logic, and module in
|
|
|
74
74
|
|
|
75
75
|
## Architecture
|
|
76
76
|
|
|
77
|
-
PrizmKit produces
|
|
77
|
+
PrizmKit produces two complementary knowledge layers:
|
|
78
78
|
|
|
79
79
|
```
|
|
80
|
-
.prizm-docs/ → Architecture Index (structure, interfaces, dependencies, traps, rules)
|
|
80
|
+
.prizm-docs/ → Architecture Index (structure, interfaces, dependencies, traps, rules, decisions)
|
|
81
81
|
.prizmkit/specs/ → Feature "what to do" (workflow: spec → plan → code(implement))
|
|
82
|
-
CLAUDE.md / CODEBUDDY.md → Project Memory (decisions, interface conventions, project-level rules)
|
|
83
82
|
```
|
|
84
83
|
|
|
85
84
|
**Reading guide**:
|
|
86
|
-
- Need code structure/modules/interfaces/traps? → `.prizm-docs/`
|
|
87
|
-
- Need past decisions/conventions/why? → `CLAUDE.md` (Claude Code) or `CODEBUDDY.md` + `memory/MEMORY.md` (CodeBuddy)
|
|
85
|
+
- Need code structure/modules/interfaces/traps/decisions? → `.prizm-docs/`
|
|
88
86
|
|
|
89
87
|
## Skill Inventory
|
|
90
88
|
|
|
@@ -100,7 +98,7 @@ CLAUDE.md / CODEBUDDY.md → Project Memory (decisions, interface conventions, p
|
|
|
100
98
|
- **prizmkit-analyze** — Cross-document consistency analysis (spec ↔ plan ↔ tasks)
|
|
101
99
|
- **prizmkit-implement** — Execute tasks following TDD approach
|
|
102
100
|
- **prizmkit-code-review** — Review code against spec and plan
|
|
103
|
-
- **prizmkit-retrospective** — Sole .prizm-docs/ maintainer: structural sync + TRAPS/RULES injection
|
|
101
|
+
- **prizmkit-retrospective** — Sole .prizm-docs/ maintainer: structural sync + TRAPS/RULES/DECISIONS injection
|
|
104
102
|
- **prizmkit-committer** — Pure git commit: diff analysis, safety checks, Conventional Commits
|
|
105
103
|
|
|
106
104
|
### Quality Assurance (5)
|
|
@@ -5,7 +5,7 @@ This project uses PrizmKit with the Prizm documentation system for AI-optimized
|
|
|
5
5
|
### Progressive Loading Protocol
|
|
6
6
|
- ON SESSION START: Always read `.prizm-docs/root.prizm` first (L0 — project map)
|
|
7
7
|
- ON TASK: Read L1 (`.prizm-docs/<module>.prizm`) for relevant modules referenced in MODULE_INDEX
|
|
8
|
-
- ON FILE EDIT: Read L2 (`.prizm-docs/<module>/<submodule>.prizm`) before modifying files. Pay attention to TRAPS.
|
|
8
|
+
- ON FILE EDIT: Read L2 (`.prizm-docs/<module>/<submodule>.prizm`) before modifying files. Pay attention to TRAPS and DECISIONS.
|
|
9
9
|
- NEVER load all .prizm docs at once. Load only what is needed for the current task.
|
|
10
10
|
|
|
11
11
|
### Auto-Update Protocol
|
|
@@ -26,7 +26,7 @@ Perform a comprehensive code review against the feature spec, implementation pla
|
|
|
26
26
|
- If `fix-plan.md` exists → **Bugfix mode**: read `fix-plan.md` as baseline. Review dimensions: bug is actually fixed, no regressions, reproduction test passes, minimal change scope.
|
|
27
27
|
- If none found → prompt user: "No review baseline found. Which workflow are you in? (feature/refactor/bugfix)"
|
|
28
28
|
2. Read **architecture index**: `.prizm-docs/root.prizm` RULES and PATTERNS for project conventions
|
|
29
|
-
3. Read **
|
|
29
|
+
3. Read **past decisions**: check DECISIONS sections in relevant `.prizm-docs/` L1/L2 files — helps verify implementation respects established conventions
|
|
30
30
|
4. Read '## Implementation Log' section of context-snapshot.md in the feature directory (if exists) — understand Dev's implementation decisions, trade-offs, and notable discoveries. This context helps distinguish intentional design choices from accidental patterns during review.
|
|
31
31
|
5. Scan all code files referenced in completed tasks
|
|
32
32
|
4. Review across 6 dimensions:
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "prizmkit-committer"
|
|
3
|
-
description: "Pure git commit workflow with safety checks. Stages files, analyzes diff, generates Conventional Commits message, and commits. Does NOT modify .prizm-docs/
|
|
3
|
+
description: "Pure git commit workflow with safety checks. Stages files, analyzes diff, generates Conventional Commits message, and commits. Does NOT modify .prizm-docs/ — architecture sync is handled by /prizmkit-retrospective before this skill is invoked. Trigger on: 'commit', 'submit', 'finish', 'done', 'ship it', 'save my work'. (project)"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# PrizmKit Committer
|
|
7
7
|
|
|
8
8
|
Pure git commit workflow. Analyzes changes, generates a Conventional Commits message, performs safety checks, and commits.
|
|
9
9
|
|
|
10
|
-
**This skill is a pure git commit tool. It does NOT modify any project files — no `.prizm-docs/`, no
|
|
10
|
+
**This skill is a pure git commit tool. It does NOT modify any project files — no `.prizm-docs/`, no source code.** It only reads diffs, generates a commit message, and commits. For feature/refactor workflows, run `/prizmkit-retrospective` before this skill to sync `.prizm-docs/` (architecture index with TRAPS/RULES/DECISIONS). For bug fixes, skip retrospective entirely — bug fixes do not update `.prizm-docs/`.
|
|
11
11
|
|
|
12
12
|
### When to Use
|
|
13
13
|
- User says "commit", "submit", "finish", "done with this task", "ship it"
|
|
14
|
-
- After `/prizmkit-retrospective` has finished architecture sync
|
|
14
|
+
- After `/prizmkit-retrospective` has finished architecture sync
|
|
15
15
|
- The UserPromptSubmit hook will remind to use this skill when commit intent is detected
|
|
16
16
|
|
|
17
17
|
### Workflow
|
|
@@ -30,9 +30,8 @@ Execute implementation by following the task breakdown in plan.md. Respects task
|
|
|
30
30
|
2. Load project context — use the most efficient source available:
|
|
31
31
|
- If `context-snapshot.md` exists in the feature directory → read it. Section 3 has Prizm docs + TRAPS. Section 4 has File Manifest (Tier-2/3) or full source (Tier-1). Read source files on-demand as directed by the manifest.
|
|
32
32
|
- Otherwise → **self-service context fallback**:
|
|
33
|
-
1. Read **architecture index**: `.prizm-docs/root.prizm` and relevant L1/L2 for affected modules. Pay special attention to TRAPS.
|
|
34
|
-
2.
|
|
35
|
-
3. Scan needed source files
|
|
33
|
+
1. Read **architecture index**: `.prizm-docs/root.prizm` and relevant L1/L2 for affected modules. Pay special attention to TRAPS and DECISIONS.
|
|
34
|
+
2. Scan needed source files
|
|
36
35
|
3. Check if checkpoint tasks are complete before proceeding to next phase
|
|
37
36
|
4. For each unchecked task in order:
|
|
38
37
|
a. If task has `[P]` marker, it can run in parallel with other `[P]` tasks in the same group
|
|
@@ -22,7 +22,6 @@ Project takeover and bootstrap skill. Scans any project (brownfield or greenfiel
|
|
|
22
22
|
- If `.prizm-docs/` already exists: ask user if they want to reinitialize (overwrites) or update (preserves)
|
|
23
23
|
- If no source files found in any directory: fall back to greenfield mode
|
|
24
24
|
- If platform cannot be detected: ask user explicitly which platform(s) to configure
|
|
25
|
-
- If `${SKILL_DIR}/../../../assets/project-memory-template.md` is missing: generate inline PrizmKit section instead of failing
|
|
26
25
|
|
|
27
26
|
## Execution Steps
|
|
28
27
|
|
|
@@ -74,13 +73,7 @@ Invoke prizmkit-prizm-docs (Init operation), passing the two-tier module structu
|
|
|
74
73
|
- `.claude/rules/prizm-commit-workflow.md` (commit workflow enforcement)
|
|
75
74
|
4d. Preserve any existing hooks and settings — never overwrite user's custom configuration
|
|
76
75
|
|
|
77
|
-
**Step 5:
|
|
78
|
-
|
|
79
|
-
5a. Read existing project memory file (`CODEBUDDY.md` or `CLAUDE.md`) or create if missing
|
|
80
|
-
5b. Append PrizmKit section from `${SKILL_DIR}/../../../assets/project-memory-template.md`
|
|
81
|
-
5c. Do not duplicate if PrizmKit section already present
|
|
82
|
-
|
|
83
|
-
**Step 6: Report**
|
|
76
|
+
**Step 5: Report**
|
|
84
77
|
Output summary: platform detected, tech stack detected, modules discovered, L1 docs generated, platform-specific configuration applied, next recommended steps.
|
|
85
78
|
|
|
86
79
|
Include platform-specific guidance:
|
|
@@ -90,8 +83,7 @@ Include platform-specific guidance:
|
|
|
90
83
|
GREENFIELD WORKFLOW (new project):
|
|
91
84
|
- Skip Step 1 (no code to scan)
|
|
92
85
|
- Step 2: Create minimal `.prizm-docs/` with just `root.prizm` skeleton
|
|
93
|
-
- Steps 3-5: Same as brownfield
|
|
94
|
-
- Step 6: Recommend starting with specify for first feature (platform-appropriate command format)
|
|
86
|
+
- Steps 3-5: Same as brownfield (Step 5 Report recommends starting with specify for first feature)
|
|
95
87
|
|
|
96
88
|
### Gradual Adoption Path
|
|
97
89
|
After init, PrizmKit operates in phases:
|
|
@@ -106,7 +98,7 @@ User can change mode in `.prizmkit/config.json`: `"adoption_mode": "passive" | "
|
|
|
106
98
|
| Concept | CodeBuddy | Claude Code |
|
|
107
99
|
|---------|-----------|-------------|
|
|
108
100
|
| Command invocation | `/prizmkit-xxx` | `/prizmkit-xxx` |
|
|
109
|
-
| Project
|
|
101
|
+
| Project knowledge | `.prizm-docs/` | `.prizm-docs/` |
|
|
110
102
|
| Settings | `.codebuddy/settings.json` | `.claude/settings.json` |
|
|
111
103
|
| Skills/Commands | `.codebuddy/skills/` | `.claude/commands/` |
|
|
112
104
|
| Agents | `.codebuddy/agents/` | `.claude/agents/` |
|
|
@@ -131,7 +123,6 @@ Modules discovered:
|
|
|
131
123
|
|
|
132
124
|
Generated: root.prizm + 4 L1 docs + changelog.prizm
|
|
133
125
|
Configured: .claude/rules/ (2 files), hooks in settings.json
|
|
134
|
-
Updated: CLAUDE.md with PrizmKit section
|
|
135
126
|
|
|
136
127
|
Next: Use /prizmkit-specify to start your first feature
|
|
137
128
|
```
|