prizmkit 1.0.152 → 1.1.0

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 (81) hide show
  1. package/bin/create-prizmkit.js +27 -2
  2. package/bundled/VERSION.json +3 -3
  3. package/bundled/adapters/claude/paths.js +1 -1
  4. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +482 -57
  5. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +2 -6
  6. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +48 -8
  7. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +54 -1
  8. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +47 -10
  9. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +11 -0
  10. package/bundled/dev-pipeline/templates/sections/critical-paths-agent.md +9 -0
  11. package/bundled/dev-pipeline/templates/sections/critical-paths-full.md +12 -0
  12. package/bundled/dev-pipeline/templates/sections/critical-paths-lite.md +7 -0
  13. package/bundled/dev-pipeline/templates/sections/directory-convention-agent.md +8 -0
  14. package/bundled/dev-pipeline/templates/sections/directory-convention-full.md +9 -0
  15. package/bundled/dev-pipeline/templates/sections/directory-convention-lite.md +6 -0
  16. package/bundled/dev-pipeline/templates/sections/failure-capture.md +21 -0
  17. package/bundled/dev-pipeline/templates/sections/failure-log-check.md +8 -0
  18. package/bundled/dev-pipeline/templates/sections/feature-context.md +23 -0
  19. package/bundled/dev-pipeline/templates/sections/phase-analyze-agent.md +15 -0
  20. package/bundled/dev-pipeline/templates/sections/phase-analyze-full.md +15 -0
  21. package/bundled/dev-pipeline/templates/sections/phase-browser-verification.md +31 -0
  22. package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +36 -0
  23. package/bundled/dev-pipeline/templates/sections/phase-commit.md +26 -0
  24. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +14 -0
  25. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-base.md +20 -0
  26. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-lite-suffix.md +3 -0
  27. package/bundled/dev-pipeline/templates/sections/phase-critic-code.md +24 -0
  28. package/bundled/dev-pipeline/templates/sections/phase-critic-plan-full.md +45 -0
  29. package/bundled/dev-pipeline/templates/sections/phase-critic-plan.md +24 -0
  30. package/bundled/dev-pipeline/templates/sections/phase-deploy-verification.md +36 -0
  31. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +24 -0
  32. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +41 -0
  33. package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +32 -0
  34. package/bundled/dev-pipeline/templates/sections/phase-plan-agent.md +17 -0
  35. package/bundled/dev-pipeline/templates/sections/phase-plan-lite.md +16 -0
  36. package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +28 -0
  37. package/bundled/dev-pipeline/templates/sections/phase-review-full.md +36 -0
  38. package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +82 -0
  39. package/bundled/dev-pipeline/templates/sections/phase0-init.md +4 -0
  40. package/bundled/dev-pipeline/templates/sections/phase0-test-baseline.md +12 -0
  41. package/bundled/dev-pipeline/templates/sections/resume-header.md +2 -0
  42. package/bundled/dev-pipeline/templates/sections/session-context.md +6 -0
  43. package/bundled/dev-pipeline/templates/sections/subagent-timeout-recovery.md +6 -0
  44. package/bundled/skills/_metadata.json +21 -177
  45. package/bundled/skills/app-planner/SKILL.md +22 -3
  46. package/bundled/skills/app-planner/references/project-brief-guide.md +110 -0
  47. package/bundled/skills/bug-fix-workflow/SKILL.md +4 -0
  48. package/bundled/skills/bug-planner/SKILL.md +2 -2
  49. package/bundled/skills/dev-pipeline-launcher/SKILL.md +1 -1
  50. package/bundled/skills/prizm-kit/SKILL.md +18 -47
  51. package/bundled/skills/prizm-kit/assets/project-memory-template.md +1 -1
  52. package/bundled/skills/prizmkit-analyze/SKILL.md +4 -4
  53. package/bundled/skills/prizmkit-init/SKILL.md +4 -4
  54. package/bundled/skills/prizmkit-plan/SKILL.md +126 -108
  55. package/bundled/skills/prizmkit-plan/assets/plan-template.md +1 -2
  56. package/bundled/skills/refactor-workflow/SKILL.md +142 -124
  57. package/bundled/team/prizm-dev-team.json +2 -8
  58. package/package.json +1 -1
  59. package/src/clean.js +8 -0
  60. package/src/gitignore-template.js +12 -0
  61. package/src/index.js +3 -22
  62. package/src/scaffold.js +20 -11
  63. package/src/upgrade.js +6 -31
  64. package/bundled/skills/prizmkit-clarify/SKILL.md +0 -93
  65. package/bundled/skills/prizmkit-specify/SKILL.md +0 -118
  66. package/bundled/skills/prizmkit-specify/assets/spec-template.md +0 -56
  67. package/bundled/skills/prizmkit-tool-adr-manager/SKILL.md +0 -67
  68. package/bundled/skills/prizmkit-tool-adr-manager/assets/adr-template.md +0 -26
  69. package/bundled/skills/prizmkit-tool-api-doc-generator/SKILL.md +0 -55
  70. package/bundled/skills/prizmkit-tool-bug-reproducer/SKILL.md +0 -61
  71. package/bundled/skills/prizmkit-tool-ci-cd-generator/SKILL.md +0 -53
  72. package/bundled/skills/prizmkit-tool-db-migration/SKILL.md +0 -64
  73. package/bundled/skills/prizmkit-tool-dependency-health/SKILL.md +0 -122
  74. package/bundled/skills/prizmkit-tool-deployment-strategy/SKILL.md +0 -57
  75. package/bundled/skills/prizmkit-tool-error-triage/SKILL.md +0 -54
  76. package/bundled/skills/prizmkit-tool-log-analyzer/SKILL.md +0 -54
  77. package/bundled/skills/prizmkit-tool-monitoring-setup/SKILL.md +0 -74
  78. package/bundled/skills/prizmkit-tool-onboarding-generator/SKILL.md +0 -69
  79. package/bundled/skills/prizmkit-tool-perf-profiler/SKILL.md +0 -54
  80. package/bundled/skills/prizmkit-tool-security-audit/SKILL.md +0 -129
  81. package/bundled/skills/prizmkit-tool-tech-debt-tracker/SKILL.md +0 -138
package/src/scaffold.js CHANGED
@@ -57,7 +57,7 @@ async function loadSharedFrontmatter() {
57
57
  /**
58
58
  * 根据套件名称解析 Skill 列表
59
59
  */
60
- async function resolveSkillList(suite) {
60
+ export async function resolveSkillList(suite) {
61
61
  const metadata = await loadMetadata();
62
62
 
63
63
  // 处理 recommended:<type> 格式
@@ -74,7 +74,7 @@ async function resolveSkillList(suite) {
74
74
  }
75
75
  }
76
76
 
77
- const suiteDef = metadata.suites[suite] || metadata.suites.full;
77
+ const suiteDef = metadata.suites[suite] || metadata.suites.core;
78
78
  if (suiteDef.skills === '*') {
79
79
  return Object.keys(metadata.skills);
80
80
  }
@@ -92,11 +92,13 @@ export async function installSkills(platform, skills, projectRoot, dryRun) {
92
92
  const skillsDir = getSkillsDir();
93
93
  const { parseFrontmatter, buildMarkdown } = await loadSharedFrontmatter();
94
94
 
95
- // Load metadata to get skill -> category mapping
95
+ // Load metadata to get skill -> category + subcategory mapping
96
96
  const metadata = await loadMetadata();
97
97
  const skillCategories = {};
98
+ const skillSubcategories = {};
98
99
  for (const [skillName, skillDef] of Object.entries(metadata.skills)) {
99
100
  skillCategories[skillName] = skillDef.category;
101
+ skillSubcategories[skillName] = skillDef.subcategory;
100
102
  }
101
103
 
102
104
  // Load Claude command adapter for skill conversion
@@ -107,22 +109,30 @@ export async function installSkills(platform, skills, projectRoot, dryRun) {
107
109
  }
108
110
 
109
111
  for (const skillName of skills) {
110
- // Determine the category subdirectory (prizmkit-skill, prizmkit-tool-skill, Custom-skill)
112
+ // Determine the category subdirectory (prizmkit-skill, prizmkit-tool-skill, orchestration-skill)
111
113
  const category = skillCategories[skillName];
112
114
  if (!category) {
113
115
  console.warn(` ⚠ Skill ${skillName} has no category mapping in metadata, skipping`);
114
116
  continue;
115
117
  }
116
118
 
117
- // Security: validate category and skillName contain no path traversal sequences.
119
+ const subcategory = skillSubcategories[skillName];
120
+
121
+ // Security: validate category, subcategory, and skillName contain no path traversal sequences.
118
122
  if (category.includes('..') || category.includes('/') || skillName.includes('..') || skillName.includes('/')) {
119
123
  console.warn(` ⚠ Skill ${skillName} has invalid category or name, skipping`);
120
124
  continue;
121
125
  }
126
+ if (subcategory && (subcategory.includes('..') || subcategory.includes('/'))) {
127
+ console.warn(` ⚠ Skill ${skillName} has invalid subcategory, skipping`);
128
+ continue;
129
+ }
122
130
 
123
- // Build path: prefer hierarchical layout (<skillsDir>/<category>/<skillName>),
131
+ // Build path: prefer hierarchical layout (<skillsDir>/<category>/[<subcategory>/]/<skillName>),
124
132
  // fallback to flat bundled layout (<skillsDir>/<skillName>) for npm package compatibility.
125
- let corePath = path.resolve(skillsDir, category, skillName);
133
+ let corePath = subcategory
134
+ ? path.resolve(skillsDir, category, subcategory, skillName)
135
+ : path.resolve(skillsDir, category, skillName);
126
136
  // Ensure resolved path stays within skillsDir
127
137
  if (!corePath.startsWith(path.resolve(skillsDir))) {
128
138
  console.warn(` ⚠ Skill ${skillName} path escapes skills directory, skipping`);
@@ -244,7 +254,7 @@ export async function installAgents(platform, projectRoot, dryRun) {
244
254
  /**
245
255
  * 安装 Team 配置
246
256
  */
247
- async function installTeamConfig(platform, projectRoot, dryRun) {
257
+ export async function installTeamConfig(platform, projectRoot, dryRun) {
248
258
  const teamDir = getTeamDir();
249
259
  const teamDefPath = path.join(teamDir, 'prizm-dev-team.json');
250
260
 
@@ -766,7 +776,7 @@ export const EXTRAS_REGISTRY = {
766
776
  * 执行纯净安装
767
777
  * @param {Object} config
768
778
  * @param {string} config.platform - 'codebuddy' | 'claude' | 'both'
769
- * @param {string} config.skills - 'full' | 'core' | 'minimal' | 'recommended:<type>'
779
+ * @param {string} config.skills - 'core' | 'minimal' | 'recommended:<type>'
770
780
  * @param {boolean} config.team - 是否启用团队模式
771
781
  * @param {boolean} config.pipeline - 是否安装 dev-pipeline
772
782
  * @param {string} [config.rules] - Rules preset: 'recommended' | 'minimal' | 'none'
@@ -958,8 +968,7 @@ export async function scaffold(config) {
958
968
  console.log('');
959
969
 
960
970
  // 安装统计
961
- const suiteLabel = skills === 'full' ? `全部 ${skillList.length} 个`
962
- : skills === 'core' ? `核心 ${skillList.length} 个`
971
+ const suiteLabel = skills === 'core' ? `核心 ${skillList.length} 个`
963
972
  : skills === 'minimal' ? `最小 ${skillList.length} 个`
964
973
  : `推荐 ${skillList.length} 个`;
965
974
 
package/src/upgrade.js CHANGED
@@ -30,42 +30,17 @@ import {
30
30
  installGitignore,
31
31
  installProjectMemory,
32
32
  resolvePipelineFileList,
33
+ resolveSkillList,
33
34
  EXTRAS_REGISTRY,
34
35
  } from './scaffold.js';
35
36
 
36
37
  const __dirname = dirname(fileURLToPath(import.meta.url));
37
38
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
38
39
 
39
- /**
40
- * Resolve skill list from suite name (same logic as scaffold.js).
41
- */
42
- async function resolveSkillList(suite) {
43
- const metadata = await loadMetadata();
44
-
45
- if (suite && suite.startsWith('recommended:')) {
46
- const projectType = suite.split(':')[1];
47
- const rec = metadata.recommendations?.[projectType];
48
- if (rec) {
49
- const baseSkills = rec.base === '*'
50
- ? Object.keys(metadata.skills)
51
- : [...(metadata.suites[rec.base]?.skills || [])];
52
- const includeSkills = rec.include || [];
53
- const excludeSkills = new Set(rec.exclude || []);
54
- return [...new Set([...baseSkills, ...includeSkills])].filter(s => !excludeSkills.has(s));
55
- }
56
- }
57
-
58
- const suiteDef = metadata.suites[suite] || metadata.suites.full;
59
- if (suiteDef.skills === '*') {
60
- return Object.keys(metadata.skills);
61
- }
62
- return suiteDef.skills;
63
- }
64
-
65
40
  /**
66
41
  * Remove skill files for a specific platform.
67
42
  */
68
- async function removeSkillFiles(platform, projectRoot, skillNames, dryRun) {
43
+ export async function removeSkillFiles(platform, projectRoot, skillNames, dryRun) {
69
44
  for (const skillName of skillNames) {
70
45
  if (platform === 'claude') {
71
46
  const commandFile = path.join(projectRoot, '.claude', 'commands', `${skillName}.md`);
@@ -103,7 +78,7 @@ async function removeSkillFiles(platform, projectRoot, skillNames, dryRun) {
103
78
  /**
104
79
  * Remove agent files for a specific platform.
105
80
  */
106
- async function removeAgentFiles(platform, projectRoot, agentFileNames, dryRun) {
81
+ export async function removeAgentFiles(platform, projectRoot, agentFileNames, dryRun) {
107
82
  for (const fileName of agentFileNames) {
108
83
  const dir = platform === 'claude'
109
84
  ? path.join(projectRoot, '.claude', 'agents')
@@ -123,7 +98,7 @@ async function removeAgentFiles(platform, projectRoot, agentFileNames, dryRun) {
123
98
  /**
124
99
  * Remove rule files for a specific platform.
125
100
  */
126
- async function removeRuleFiles(platform, projectRoot, ruleFileNames, dryRun) {
101
+ export async function removeRuleFiles(platform, projectRoot, ruleFileNames, dryRun) {
127
102
  for (const fileName of ruleFileNames) {
128
103
  const ext = platform === 'claude' ? '' : '';
129
104
  const dir = platform === 'claude'
@@ -148,7 +123,7 @@ async function removeRuleFiles(platform, projectRoot, ruleFileNames, dryRun) {
148
123
  /**
149
124
  * Remove pipeline files that are no longer in the new manifest.
150
125
  */
151
- async function removePipelineFiles(projectRoot, fileList, dryRun) {
126
+ export async function removePipelineFiles(projectRoot, fileList, dryRun) {
152
127
  for (const relPath of fileList) {
153
128
  const filePath = path.join(projectRoot, 'dev-pipeline', relPath);
154
129
  if (await fs.pathExists(filePath)) {
@@ -217,7 +192,7 @@ export async function runUpgrade(directory, options = {}) {
217
192
 
218
193
  // 3. Resolve new skill list using old manifest's suite + platform (or defaults)
219
194
  const oldManifestPlatform = oldManifest?.platform || 'claude';
220
- const suite = oldManifest?.suite || 'full';
195
+ const suite = oldManifest?.suite || 'core';
221
196
  const team = oldManifest?.options?.team ?? true;
222
197
  const pipeline = oldManifest?.options?.pipeline ?? true;
223
198
  const rulesPreset = oldManifest?.options?.rules || 'recommended';
@@ -1,93 +0,0 @@
1
- ---
2
- name: "prizmkit-clarify"
3
- description: "Interactive requirement clarification. Resolves ALL ambiguities in feature specs through unlimited rounds of questions until full understanding is reached. Use when spec has unclear parts, you're unsure about requirements, or before planning to ensure nothing is ambiguous. Trigger on: 'clarify', 'refine spec', 'resolve ambiguities', 'spec has questions', 'unsure about requirements', 'spec is unclear'. (project)"
4
- ---
5
-
6
- # PrizmKit Clarify
7
-
8
- Exhaustive interactive requirement clarification. Resolves **every** ambiguity in a feature specification by asking questions one at a time — no limit on rounds or number of questions. The goal is **complete understanding**: do not stop until every unclear aspect is resolved and you are fully confident about the requirements.
9
-
10
- ### When to Use
11
- - After `/prizmkit-specify` when spec has `[NEEDS CLARIFICATION]` markers
12
- - User says "clarify", "resolve ambiguities", "refine spec"
13
- - Before `/prizmkit-plan` to ensure spec is unambiguous
14
- - Whenever you encounter any uncertainty about what the user wants — proactively ask rather than assume
15
-
16
- **PRECONDITION:**
17
-
18
- | Required Artifact | Directory | Check | If Missing |
19
- |---|---|---|---|
20
- | `spec.md` | `.prizmkit/specs/###-feature-name/` | File exists with `[NEEDS CLARIFICATION]` markers or underspecified areas | Run `/prizmkit-specify` first |
21
-
22
- ## Execution Steps
23
-
24
- 1. Read `spec.md` from `.prizmkit/specs/###-feature-name/`
25
- 2. Scan for ALL ambiguities — not just `[NEEDS CLARIFICATION]` markers but also:
26
- - Vague terms without measurable criteria (e.g., "fast", "user-friendly", "secure")
27
- - Missing edge cases that would affect implementation
28
- - Implicit assumptions not stated explicitly
29
- - Scope boundaries that could be interpreted multiple ways
30
- - Data model gaps (entities, relationships, constraints undefined)
31
- 3. Categorize ambiguities by dimension and prioritize — address the ones that would most affect architecture and data model first, since those are hardest to change later:
32
- - Data model (what entities, relationships, constraints?) — **highest priority when DB changes are involved**: field types, nullability, naming conventions, relationships, and constraint patterns must all be resolved before plan finalization. Unresolved DB design decisions during implementation lead to expensive rework.
33
- - Functional scope (what does it do?)
34
- - UX flow (what does the user see?)
35
- - Error handling (what happens when things fail?)
36
- - Non-functional requirements (performance, security)
37
- - Edge cases, integration points, accessibility
38
- 4. Ask questions **one at a time** — batch questions overwhelm users and produce lower-quality answers because they rush through without thinking deeply about each one
39
- 5. For each question: provide a recommended answer with rationale. The recommendation gives users a concrete starting point to accept, modify, or reject — this is much faster than open-ended questions
40
- 6. After each answer: immediately update `spec.md` (not batched at the end). Atomic updates mean the spec is always in a consistent state, even if the session is interrupted
41
- 7. Remove resolved `[NEEDS CLARIFICATION]` markers as they are addressed
42
- 8. **Continue asking** — after each answer, re-evaluate the spec for remaining ambiguities. Each user answer may reveal new questions. Keep going until:
43
- - All `[NEEDS CLARIFICATION]` markers are removed, AND
44
- - No vague or underspecified areas remain, AND
45
- - You are fully confident about the requirements
46
- 9. Support early termination: user says "done", "stop", or "enough" — end immediately and summarize what was resolved vs what remains unclear
47
- 10. After all questions resolved or user terminates: output summary of all changes made
48
-
49
- ## No Limits Policy
50
-
51
- **There is NO cap on the number of questions or rounds.** Ask as many questions as needed to achieve complete understanding. A half-understood spec leads to wrong implementations, which cost far more than thorough clarification upfront.
52
-
53
- - If you've asked 10 questions and there are still ambiguities — keep asking
54
- - If the user's answer raises new questions — ask those too
55
- - If you realize a previously-resolved item needs revisiting because of new context — go back and ask again
56
- - Only stop when you genuinely have no more uncertainties, or the user explicitly terminates
57
-
58
- ## Example Session
59
-
60
- **Question 1:**
61
- > spec.md §3.2 says "User can upload files" but doesn't specify which file types or size limits.
62
- >
63
- > **Recommended answer:** Accept JPEG, PNG, and PDF up to 10MB. These are the most common user upload types, and 10MB covers high-res photos without straining storage.
64
- >
65
- > Do you agree, or would you like different constraints?
66
-
67
- **User:** "Also allow SVG, and make it 25MB"
68
-
69
- **Action:** Update spec.md §3.2:
70
- ```
71
- File upload: accepts JPEG, PNG, PDF, SVG. Max size: 25MB per file.
72
- ```
73
- Remove `[NEEDS CLARIFICATION]` marker from §3.2.
74
-
75
- **Question 2** (new question triggered by user's answer):
76
- > You mentioned SVG files. SVGs can contain embedded scripts which pose XSS risks. Should uploaded SVGs be sanitized (strip `<script>` tags and event handlers), or should SVG upload be restricted to trusted users only?
77
- >
78
- > **Recommended answer:** Sanitize all SVG uploads by stripping scripts and event handlers. This allows all users to upload SVGs safely.
79
-
80
- *(Continue until all ambiguities are resolved...)*
81
-
82
- ## Guidelines
83
-
84
- - Keep questions at the WHAT/WHY level — do not introduce implementation details (HOW). The spec describes the problem space; implementation choices belong in plan.md
85
- - If the user's answer contradicts an existing requirement, point out the conflict and ask which one should change
86
- - Group related follow-up questions naturally — if a user's answer opens 3 related sub-questions, ask the most impactful one first, then proceed to the others
87
- - If the user seems fatigued, acknowledge it: "I have N more questions. Want to continue now or come back later?" — but never silently stop with unresolved ambiguities
88
-
89
- **HANDOFF:** `/prizmkit-plan`
90
-
91
- ## Output
92
-
93
- Updates are made directly to `.prizmkit/specs/###-feature-name/spec.md`. No new files are created.
@@ -1,118 +0,0 @@
1
- ---
2
- name: "prizmkit-specify"
3
- description: "Create structured feature specifications from natural language. Use this skill whenever the user wants to define a new feature, describe what to build, or write requirements. Trigger on: 'specify', 'define feature', 'write requirements', 'new feature', 'what should we build', 'I want to add...', 'I want to build...', 'let's add', 'let's build', 'feature idea', or when the user describes a feature they want. This is the first step in the full dev workflow — always use before /prizmkit-plan. Skip for bug fixes, config tweaks, or simple refactors (use fast path). (project)"
4
- ---
5
-
6
- # PrizmKit Specify
7
-
8
- Create structured feature specifications from natural language descriptions. This skill transforms a feature idea into a well-structured spec with user stories, acceptance criteria, and scope boundaries.
9
-
10
- ### When to Use
11
- - Starting a new feature — user says "specify", "define feature", "new feature", "I want to add..."
12
- - Before `/prizmkit-plan` — to define WHAT will be built before deciding HOW
13
- - When a feature idea needs to be formalized before implementation
14
- - When multiple stakeholders need to agree on scope before coding starts
15
-
16
- ### When NOT to Use
17
- - Bug fixes with clear root cause → use fast path (`/prizmkit-plan` simplified → `/prizmkit-implement` → `/prizmkit-committer`)
18
- - Config tweaks, typo fixes, simple refactors → edit directly
19
- - Documentation-only changes → no spec needed
20
- - User already has a detailed spec → skip to /prizmkit-plan
21
-
22
- ## Execution Steps
23
-
24
- 1. Ask user for feature description (natural language)
25
- 2. Auto-generate 2-4 word feature slug from description
26
- 3. Determine next feature number by scanning `.prizmkit/specs/`:
27
- - List existing `###-*` directories and find the highest numeric prefix
28
- - Next number = highest + 1 (zero-padded to 3 digits)
29
- - Append a short timestamp suffix (`-MMDD`) to prevent collisions in concurrent sessions. Example: `004-user-avatar-0319/`
30
- - If `.prizmkit/specs/` is empty or doesn't exist, start at `001`
31
- 4. Create directory: `.prizmkit/specs/###-feature-name-MMDD/`
32
- 5. Load project context (use first available source):
33
- - If `.prizmkit/specs/###-feature-name/context-snapshot.md` exists → read Section 3 'Prizm Context' from it (do NOT re-read `.prizm-docs/` files)
34
- - Otherwise → read `.prizm-docs/root.prizm`
35
- 6. Generate `spec.md` from template (`${SKILL_DIR}/assets/spec-template.md`) focusing on:
36
- - Feature title and description
37
- - User stories (As a... I want... So that...)
38
- - Acceptance criteria (Given/When/Then)
39
- - Scope boundaries (In scope / Out of scope)
40
- - Dependencies and constraints
41
- - `[NEEDS CLARIFICATION]` markers for all ambiguous items
42
- 7. **Database design detection**: If the feature involves data persistence (new entities, new fields, schema changes), add a `## Data Model` section to spec.md (see template):
43
- - Scan for existing database schema files to understand current conventions:
44
- ```bash
45
- find . -maxdepth 4 -type f \( -name "*.prisma" -o -name "*.sql" -o -path "*/migrations/*" -o -path "*/models/*" -o -name "schema.*" -o -name "*.entity.*" \) -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/__pycache__/*' | head -20
46
- ```
47
- - Read existing schema/model files to extract conventions: naming style (snake_case vs camelCase), ID strategy (UUID vs auto-increment), timestamp patterns, soft-delete approach, constraint patterns, relationship patterns
48
- - Document in spec.md Data Model section: existing schema reference, new entities needed, relationships to existing tables
49
- - Mark uncertain fields or relationships with `[NEEDS CLARIFICATION]` — these MUST be resolved before planning
50
- - **RULE**: Never design new tables in isolation — always reference existing schema to maintain style consistency
51
- 8. Run internal quality validation loop (max 3 iterations):
52
- - Check: All user stories have acceptance criteria?
53
- - Check: Scope boundaries clearly defined?
54
- - Check: All `[NEEDS CLARIFICATION]` markers have recommended defaults?
55
- - Check: If Data Model section exists, are existing schema conventions documented?
56
- 9. Output: `spec.md` path and summary
57
-
58
- ## Writing Principles
59
-
60
- - **Focus on WHAT and WHY, never HOW** — the spec describes the problem space; implementation choices belong in plan.md. Mixing in tech stack details couples the spec to a specific solution and makes it harder to explore alternatives during planning.
61
- - **Every user story needs acceptance criteria** in Given/When/Then format — without them, the implementer has no way to verify the feature works correctly, and the code reviewer has no baseline to check against.
62
- - **Scope boundaries must be explicit** — without "Out of scope" boundaries, implementers tend to gold-plate features with capabilities nobody asked for, wasting time and adding complexity.
63
- - **Mark all unclear areas with `[NEEDS CLARIFICATION]`** — do not limit the number of markers. Every genuine ambiguity should be surfaced. After spec generation, suggest running `/prizmkit-clarify` to resolve them all interactively.
64
- - **Feature numbers are zero-padded to 3 digits** (e.g., `001`, `012`) with a `-MMDD` timestamp suffix — ensures consistent sorting and prevents collisions when multiple sessions run concurrently.
65
-
66
- ## Handling Vague Inputs
67
-
68
- When the user's feature description is vague:
69
- 1. Extract what IS clear and write that into the spec
70
- 2. Mark genuinely ambiguous parts with `[NEEDS CLARIFICATION]` and include a recommended default
71
- 3. Suggest running `/prizmkit-clarify` to resolve ambiguities interactively before proceeding to plan
72
-
73
- The goal is to never block progress — always produce a usable spec, even if it has open questions.
74
-
75
- ## Example
76
-
77
- **Input:** "I want users to upload avatars"
78
-
79
- **Output:** `.prizmkit/specs/003-user-avatar/spec.md`
80
- ```markdown
81
- # Feature: User Avatar Upload
82
-
83
- ## Overview
84
- Allow users to upload and manage profile avatar images.
85
-
86
- ## User Stories
87
-
88
- ### US-1: Upload Avatar
89
- As a registered user, I want to upload a profile picture,
90
- so that other users can visually identify me.
91
-
92
- **Acceptance Criteria:**
93
- - Given I am on my profile page
94
- - When I select an image file and click upload
95
- - Then my avatar is updated and visible across the platform
96
-
97
- ### US-2: Remove Avatar
98
- As a registered user, I want to remove my avatar,
99
- so that I can revert to a default placeholder.
100
-
101
- ## Scope
102
- - **In scope:** Upload, display, remove avatar; image format validation
103
- - **Out of scope:** Image cropping/editing, avatar history
104
-
105
- ## Open Questions
106
- - [NEEDS CLARIFICATION] Maximum file size limit? Recommended: 10MB
107
- ```
108
-
109
- **HANDOFF:** `/prizmkit-plan` or `/prizmkit-clarify`
110
-
111
- ## Template
112
-
113
- The spec template is located at `${SKILL_DIR}/assets/spec-template.md`.
114
-
115
- ## Output
116
-
117
- All outputs are written to `.prizmkit/specs/###-feature-name/`:
118
- - `spec.md` — The feature specification
@@ -1,56 +0,0 @@
1
- # Feature: [FEATURE_TITLE]
2
-
3
- ## Overview
4
- [One paragraph describing the feature purpose and business value]
5
-
6
- ## User Stories
7
-
8
- ### US1: [Story Title]
9
- **As a** [role]
10
- **I want** [capability]
11
- **So that** [benefit]
12
-
13
- **Acceptance Criteria:**
14
- - [ ] Given [context], When [action], Then [expected result]
15
-
16
- ## Scope
17
-
18
- ### In Scope
19
- - [Item 1]
20
-
21
- ### Out of Scope
22
- - [Item 1]
23
-
24
- ## Dependencies
25
- - [Dependency 1]: [Why needed]
26
-
27
- ## Data Model (if feature involves database changes)
28
-
29
- ### Existing Schema Reference
30
- <!-- Read existing schema/model files BEFORE designing new tables. Document observed conventions here. -->
31
- - Tables reviewed: [list existing tables related to this feature]
32
- - Naming convention: [snake_case/camelCase — match existing]
33
- - ID strategy: [UUID/auto-increment — match existing]
34
- - Timestamp pattern: [created_at/updated_at — match existing]
35
- - Soft delete: [yes/no, field name — match existing]
36
-
37
- ### New/Modified Entities
38
- | Entity | Type (new/modify) | Key Fields | Relationships | Constraints |
39
- |--------|-------------------|------------|---------------|-------------|
40
- | [entity_name] | new | [field: type] | [FK to existing_table] | [NOT NULL, UNIQUE, etc.] |
41
-
42
- ### Open Data Model Questions
43
- <!-- All questions here MUST be resolved before /prizmkit-plan generates Tasks -->
44
- - [NEEDS CLARIFICATION] [Any uncertain data model decisions — field types, nullability, relationships]
45
-
46
- ## Constraints
47
- - [Constraint 1]
48
-
49
- ## Clarifications
50
- [NEEDS CLARIFICATION]: [Ambiguous item]
51
-
52
- ## Review Checklist
53
- - [ ] All user stories have acceptance criteria
54
- - [ ] Scope boundaries are clearly defined
55
- - [ ] Dependencies are identified
56
- - [ ] No implementation details (WHAT not HOW)
@@ -1,67 +0,0 @@
1
- ---
2
- name: "prizmkit-tool-adr-manager"
3
- description: [Tier 1] Manage Architecture Decision Records. Create, list, and supersede ADRs with full context. AI excels at documentation tasks. (project)
4
- ---
5
-
6
- # PrizmKit ADR Manager
7
-
8
- Manage Architecture Decision Records (ADRs) to document and track architectural decisions with full context, alternatives, and consequences.
9
-
10
- ## Commands
11
-
12
- ### `/prizmkit-adr`.new \<title\>
13
-
14
- Create a new Architecture Decision Record.
15
-
16
- **STEPS:**
17
-
18
- 1. Determine next ADR number from `docs/adr/` directory (scan existing files, increment highest number)
19
- 2. Generate ADR from template (`${SKILL_DIR}/assets/adr-template.md`):
20
- - **Title**: Provided by user
21
- - **Date**: Current date
22
- - **Status**: Proposed
23
- - **Context**: Ask user what issue is motivating this decision
24
- - **Decision**: Ask user what change is being proposed
25
- - **Consequences**: Identify positive and negative consequences
26
- - **Alternatives considered**: Ask user about alternatives and why they were rejected
27
- 3. Write to `docs/adr/NNNN-title.md` (zero-padded number, kebab-case title)
28
- 4. Record as a DECISION entry in the relevant `.prizm-docs/` L1/L2 file for the affected module
29
-
30
- ### `/prizmkit-adr`.list
31
-
32
- Show all ADRs with their current status.
33
-
34
- **STEPS:**
35
-
36
- 1. Scan `docs/adr/` directory for ADR files
37
- 2. Parse each file for number, title, and status
38
- 3. Display table:
39
- - Number | Title | Status | Date
40
- - Status values: Proposed, Accepted, Deprecated, Superseded
41
- 4. Highlight any ADRs in Proposed status that may need review
42
-
43
- ### `/prizmkit-adr`.supersede \<number\> \<new-title\>
44
-
45
- Mark an existing ADR as superseded and create a replacement.
46
-
47
- **STEPS:**
48
-
49
- 1. Read the existing ADR with the given number from `docs/adr/`
50
- 2. Update its status to "Superseded by [ADR-NNNN]" (the new ADR number)
51
- 3. Create a new ADR using the ``/prizmkit-adr`.new` flow:
52
- - Pre-populate context with reference to the superseded ADR
53
- - Include "Supersedes [ADR-NNNN]" in the new ADR
54
- 4. Write both updated files
55
-
56
- ## Template
57
-
58
- The ADR template is located at `${SKILL_DIR}/assets/adr-template.md` and follows the standard ADR format with Context, Decision, Consequences, and Alternatives sections.
59
-
60
- ## Path References
61
-
62
- All internal asset paths MUST use `${SKILL_DIR}` placeholder for cross-IDE compatibility.
63
-
64
- ## Output
65
-
66
- - ADR files in `docs/adr/` directory
67
- - Updated DECISIONS in relevant `.prizm-docs/` L1/L2 files
@@ -1,26 +0,0 @@
1
- # [NUMBER]. [TITLE]
2
-
3
- **Date**: YYYY-MM-DD
4
- **Status**: Proposed | Accepted | Deprecated | Superseded by [ADR-NNNN]
5
-
6
- ## Context
7
-
8
- [What is the issue that we're seeing that is motivating this decision or change?]
9
-
10
- ## Decision
11
-
12
- [What is the change that we're proposing and/or doing?]
13
-
14
- ## Consequences
15
-
16
- ### Positive
17
- - [Consequence 1]
18
-
19
- ### Negative
20
- - [Consequence 1]
21
-
22
- ## Alternatives Considered
23
-
24
- ### [Alternative 1]
25
- - **Description**: [What it is]
26
- - **Reason rejected**: [Why not chosen]
@@ -1,55 +0,0 @@
1
- ---
2
- name: "prizmkit-tool-api-doc-generator"
3
- description: [Tier 2] Extract API documentation from source code into OpenAPI/Markdown. May miss undocumented or dynamically generated endpoints. (project)
4
- ---
5
-
6
- # PrizmKit API Doc Generator
7
-
8
- Generate API documentation from source code by scanning routes, controllers, and handlers. Produces OpenAPI 3.0 specs or Markdown reference docs.
9
-
10
- ## Commands
11
-
12
- ### `/prizmkit-api`-docs [api-directory]
13
-
14
- Generate API documentation from source code.
15
-
16
- **STEPS:**
17
-
18
- 1. Read `.prizm-docs/` for project tech stack (framework, language, API style: REST / GraphQL / gRPC)
19
- 2. Scan API source files (routes, controllers, handlers):
20
- - Detect routing patterns based on framework:
21
- - Express/Fastify: `app.get()`, `router.post()`, etc.
22
- - Django/Flask: `@app.route()`, `urlpatterns`
23
- - Spring: `@GetMapping`, `@PostMapping`, etc.
24
- - Go: `http.HandleFunc`, gorilla/mux, chi routes
25
- - If `api-directory` is specified, limit scan to that directory
26
- 3. Extract for each endpoint:
27
- - **HTTP method and path**: GET /api/users/:id
28
- - **Request parameters**:
29
- - Path parameters (with types)
30
- - Query parameters (with types and defaults)
31
- - Request body schema (from types, validation decorators, or inline definitions)
32
- - **Response body schemas**: Success and error response structures
33
- - **Authentication requirements**: Which auth mechanism is required (JWT, API key, session, none)
34
- - **Error responses**: Common error codes and their meanings (400, 401, 403, 404, 500)
35
- - **Description**: From JSDoc comments, docstrings, or function/handler names
36
- 4. Generate documentation in requested format:
37
- - **OpenAPI 3.0 YAML** (default): Full spec with schemas, security definitions, and server info
38
- - **Markdown API reference**: Human-readable endpoint documentation
39
- - **Both**: Generate both formats
40
- 5. Include examples for each endpoint:
41
- - Sample request (curl command)
42
- - Sample success response (JSON)
43
- - Sample error response (JSON)
44
- 6. Write to `docs/api/` directory:
45
- - `docs/api/openapi.yaml` for OpenAPI spec
46
- - `docs/api/API_REFERENCE.md` for Markdown docs
47
-
48
- ## Path References
49
-
50
- All internal asset paths MUST use `.claude/commands/prizmkit-api-doc-generator` placeholder for cross-IDE compatibility.
51
-
52
- ## Output
53
-
54
- - `docs/api/openapi.yaml`: OpenAPI 3.0 specification
55
- - `docs/api/API_REFERENCE.md`: Markdown API reference
@@ -1,61 +0,0 @@
1
- ---
2
- name: "prizmkit-tool-bug-reproducer"
3
- description: [Tier 1] Generate minimal reproduction scripts and test cases from bug descriptions. AI strength in test/script generation. (project)
4
- ---
5
-
6
- # PrizmKit Bug Reproducer
7
-
8
- Generate minimal reproduction scripts and test cases from bug descriptions to isolate, confirm, and verify fixes.
9
-
10
- ## Commands
11
-
12
- ### `/prizmkit-bug`-reproduce \<bug-description\>
13
-
14
- Generate a minimal reproduction for a reported bug.
15
-
16
- **STEPS:**
17
-
18
- 1. Parse bug description: extract expected vs actual behavior, steps to reproduce (if given), environment details
19
- 2. Read `.prizm-docs/` for relevant module context, paying special attention to TRAPS sections that may document known pitfalls
20
- 3. Identify affected code path from description:
21
- - Map user-facing behavior to source code modules
22
- - Identify entry points and data flow
23
- 4. Generate minimal reproduction based on bug type:
24
- a. **For API bugs**: Generate curl/HTTP request sequence
25
- - Include headers, authentication, request body
26
- - Show expected vs actual response
27
- - Add assertions on status code and response body
28
- b. **For UI bugs**: Generate step-by-step user interaction guide
29
- - Numbered steps with specific UI elements to interact with
30
- - Screenshot annotation points (where to look)
31
- - Browser/device requirements if relevant
32
- c. **For logic bugs**: Generate unit test that demonstrates the failure
33
- - Minimal test case with clear arrange/act/assert
34
- - Test name describes the expected behavior
35
- - Comments explaining why this should pass
36
- d. **For data bugs**: Generate seed data + query sequence
37
- - Minimal dataset that triggers the issue
38
- - Query or operation sequence to reproduce
39
- - Expected vs actual result comparison
40
- 5. Write reproduction script/test to a temporary file:
41
- - Use project's existing test framework and conventions
42
- - Include setup and teardown
43
- - Make it self-contained and runnable
44
- 6. Include assertions that:
45
- - FAIL with current (buggy) behavior
46
- - PASS with expected (correct) behavior
47
- - Serve as regression test after fix is applied
48
- 7. Output:
49
- - Reproduction file path
50
- - Minimal steps document describing how to run
51
- - Suggested fix investigation starting points
52
-
53
- ## Path References
54
-
55
- All internal asset paths MUST use `.claude/commands/prizmkit-bug-reproducer` placeholder for cross-IDE compatibility.
56
-
57
- ## Output
58
-
59
- - Reproduction script or test file written to project's test directory
60
- - Minimal steps document printed to console
61
- - Investigation pointers for the fix