prizmkit 1.0.94 → 1.0.96

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 (36) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/agents/prizm-dev-team-dev.md +1 -2
  3. package/bundled/agents/prizm-dev-team-reviewer.md +1 -2
  4. package/bundled/dev-pipeline/README.md +0 -33
  5. package/bundled/dev-pipeline/retry-bug.sh +0 -3
  6. package/bundled/dev-pipeline/retry-feature.sh +0 -3
  7. package/bundled/dev-pipeline/run-bugfix.sh +0 -21
  8. package/bundled/dev-pipeline/run.sh +26 -27
  9. package/bundled/dev-pipeline/scripts/detect-stuck.py +4 -14
  10. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +1 -1
  11. package/bundled/dev-pipeline/scripts/update-bug-status.py +2 -14
  12. package/bundled/dev-pipeline/scripts/update-feature-status.py +2 -13
  13. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +3 -4
  14. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +3 -4
  15. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +3 -4
  16. package/bundled/dev-pipeline/templates/feature-list-schema.json +1 -1
  17. package/bundled/rules/prizm/prizm-commit-workflow.md +1 -1
  18. package/bundled/skills/_metadata.json +3 -3
  19. package/bundled/skills/app-planner/SKILL.md +0 -13
  20. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +2 -2
  21. package/bundled/skills/dev-pipeline-launcher/SKILL.md +3 -3
  22. package/bundled/skills/prizm-kit/SKILL.md +4 -6
  23. package/bundled/skills/prizm-kit/assets/project-memory-template.md +1 -1
  24. package/bundled/skills/prizmkit-code-review/SKILL.md +1 -1
  25. package/bundled/skills/prizmkit-committer/SKILL.md +3 -3
  26. package/bundled/skills/prizmkit-implement/SKILL.md +2 -3
  27. package/bundled/skills/prizmkit-init/SKILL.md +3 -12
  28. package/bundled/skills/prizmkit-prizm-docs/SKILL.md +5 -6
  29. package/bundled/skills/prizmkit-prizm-docs/assets/PRIZM-SPEC.md +27 -69
  30. package/bundled/skills/prizmkit-retrospective/SKILL.md +20 -70
  31. package/bundled/skills/prizmkit-tool-adr-manager/SKILL.md +2 -2
  32. package/package.json +1 -1
  33. package/src/scaffold.js +1 -43
  34. package/bundled/dev-pipeline/scripts/detect-models.sh +0 -150
  35. package/bundled/dev-pipeline/scripts/validate-feature-models.py +0 -56
  36. package/bundled/templates/hooks/prizm-post-merge.sh +0 -6
@@ -1,5 +1,5 @@
1
1
  {
2
- "frameworkVersion": "1.0.94",
3
- "bundledAt": "2026-03-23T00:08:19.504Z",
4
- "bundledFrom": "b1e871c"
2
+ "frameworkVersion": "1.0.96",
3
+ "bundledAt": "2026-03-23T12:42:15.546Z",
4
+ "bundledFrom": "e29472c"
5
5
  }
@@ -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" \
@@ -1036,11 +1010,36 @@ os.replace(tmp, target)
1036
1010
  else
1037
1011
  log_warn "Auto-merge failed — dev branch preserved: $_DEV_BRANCH_NAME"
1038
1012
  log_warn "Merge manually: git checkout $_ORIGINAL_BRANCH && git rebase $_DEV_BRANCH_NAME"
1013
+ # branch_merge failed and left us on dev branch — checkout original and commit pipeline artifacts
1014
+ if git -C "$_proj_root" checkout "$_ORIGINAL_BRANCH" 2>/dev/null; then
1015
+ local _merge_failed_current _merge_failed_dirty
1016
+ _merge_failed_current=$(git -C "$_proj_root" rev-parse --abbrev-ref HEAD 2>/dev/null || true)
1017
+ if [[ "$_merge_failed_current" == "$_ORIGINAL_BRANCH" ]]; then
1018
+ _merge_failed_dirty=$(git -C "$_proj_root" status --porcelain 2>/dev/null || true)
1019
+ if [[ -n "$_merge_failed_dirty" ]]; then
1020
+ git -C "$_proj_root" add -A 2>/dev/null || true
1021
+ git -C "$_proj_root" commit --no-verify -m "chore: include pipeline state artifacts" 2>/dev/null || true
1022
+ fi
1023
+ fi
1024
+ fi
1039
1025
  _DEV_BRANCH_NAME=""
1040
1026
  fi
1041
1027
  elif [[ -n "$_DEV_BRANCH_NAME" ]]; then
1042
1028
  # Session failed — return to original branch, preserve dev branch for inspection
1043
- git -C "$_proj_root" checkout "$_ORIGINAL_BRANCH" 2>/dev/null || true
1029
+ if git -C "$_proj_root" checkout "$_ORIGINAL_BRANCH" 2>/dev/null; then
1030
+ # Commit any dirty pipeline state files left on the original branch
1031
+ local _failed_current _failed_dirty
1032
+ _failed_current=$(git -C "$_proj_root" rev-parse --abbrev-ref HEAD 2>/dev/null || true)
1033
+ if [[ "$_failed_current" == "$_ORIGINAL_BRANCH" ]]; then
1034
+ _failed_dirty=$(git -C "$_proj_root" status --porcelain 2>/dev/null || true)
1035
+ if [[ -n "$_failed_dirty" ]]; then
1036
+ git -C "$_proj_root" add -A 2>/dev/null || true
1037
+ git -C "$_proj_root" commit --no-verify -m "chore: include pipeline state artifacts" 2>/dev/null || true
1038
+ fi
1039
+ fi
1040
+ else
1041
+ log_warn "Failed to checkout $_ORIGINAL_BRANCH after session failure — pipeline state may be uncommitted"
1042
+ fi
1044
1043
  log_warn "Session failed — dev branch preserved for inspection: $_DEV_BRANCH_NAME"
1045
1044
  _DEV_BRANCH_NAME=""
1046
1045
  fi
@@ -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' and whose session
192
- matches the current session.
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
- # Read current-session.json to find the active session
201
- current_session_path = os.path.join(state_dir, "current-session.json")
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 distillation", ".prizm-docs/ sync", "memory sedimentation"],
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) Clear current-session pointer if it points to this bug
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. Delete current-session pointer if it points to this bug
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
- current_session_path = os.path.join(state_dir, "current-session.json")
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. Delete current-session pointer if it points to this feature
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) and platform memory files:
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. **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)
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) and platform memory files:
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. **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)
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 and platform memory files):
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 and memory sedimentation unless a genuinely new pitfall was discovered
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. See .prizmkit/available-models.json for valid IDs."
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) and sediment DECISIONS to memory files
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.94",
2
+ "version": "1.0.96",
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. Sediments DECISIONS to platform memory files. Run after code review passes, before committing.",
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 project memory and code review",
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
- # Find current/recent session
193
- cat dev-pipeline/bugfix-state/current-session.json 2>/dev/null
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
- # Find current/recent session
229
- cat dev-pipeline/state/current-session.json 2>/dev/null
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 project memory update, or ask user what's next.
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 three complementary knowledge layers:
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. Also sediments DECISIONS to platform memory files
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 **project memory**: platform memory file (`CLAUDE.md` for Claude Code, `CODEBUDDY.md` + `memory/MEMORY.md` for CodeBuddy) for past DECISIONS — helps verify implementation respects established conventions
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/ or memory files — architecture sync and memory sedimentation are handled by /prizmkit-retrospective before this skill is invoked. Trigger on: 'commit', 'submit', 'finish', 'done', 'ship it', 'save my work'. (project)"
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 memory files, 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) and sediment DECISIONS to memory files. For bug fixes, skip retrospective entirely — bug fixes do not update `.prizm-docs/`.
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 and memory sedimentation
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. Read **project memory**: platform memory file for past DECISIONS and interface conventions.
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