Initial commit
This commit is contained in:
15
.claude-plugin/plugin.json
Normal file
15
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "sdd",
|
||||||
|
"description": "Specification-Driven Development with Process Discipline for Claude Code",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"author": {
|
||||||
|
"name": "Roland Huss",
|
||||||
|
"email": "rhuss@redhat.com"
|
||||||
|
},
|
||||||
|
"skills": [
|
||||||
|
"./skills"
|
||||||
|
],
|
||||||
|
"commands": [
|
||||||
|
"./commands"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# sdd
|
||||||
|
|
||||||
|
Specification-Driven Development with Process Discipline for Claude Code
|
||||||
6
commands/brainstorm.md
Normal file
6
commands/brainstorm.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:brainstorm
|
||||||
|
description: Refine rough ideas into executable specifications through collaborative dialogue
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:brainstorm` skill to guide the user through collaborative brainstorming, turning their rough idea into a formal, executable specification.
|
||||||
6
commands/constitution.md
Normal file
6
commands/constitution.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:constitution
|
||||||
|
description: Create and manage project constitution defining project-wide principles
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:constitution` skill to create or update the project constitution.
|
||||||
6
commands/evolve.md
Normal file
6
commands/evolve.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:evolve
|
||||||
|
description: Reconcile spec/code mismatches with AI-guided evolution and user control
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:evolve` skill to reconcile mismatches between specifications and code implementation.
|
||||||
6
commands/implement.md
Normal file
6
commands/implement.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:implement
|
||||||
|
description: Implement features from validated specifications using TDD with spec compliance checking
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:implement` skill to implement a feature from an existing, validated specification.
|
||||||
6
commands/review-code.md
Normal file
6
commands/review-code.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:review-code
|
||||||
|
description: Review code against spec compliance - checks implementation matches spec requirements, identifies deviations, reports compliance score
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:review-code` skill to review code implementation against the specification for compliance.
|
||||||
6
commands/review-spec.md
Normal file
6
commands/review-spec.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:review-spec
|
||||||
|
description: Review specifications for soundness, completeness, and implementability
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:review-spec` skill to review a specification for soundness, completeness, and implementability.
|
||||||
6
commands/spec.md
Normal file
6
commands/spec.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
name: sdd:spec
|
||||||
|
description: Create formal specifications directly from clear requirements
|
||||||
|
---
|
||||||
|
|
||||||
|
Use the `sdd:spec` skill to create a formal specification directly from the user's clear requirements.
|
||||||
117
plugin.lock.json
Normal file
117
plugin.lock.json
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:rhuss/cc-superpowers-sdd:",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "f5bf556dd2b55412d83cefdd327d45da9f9e9baa",
|
||||||
|
"treeHash": "71d8c21f24d6a6239f4172c8120ac1612292706c17824cae1b1f0717891508d7",
|
||||||
|
"generatedAt": "2025-11-28T10:27:57.354456Z",
|
||||||
|
"toolVersion": "publish_plugins.py@0.2.0"
|
||||||
|
},
|
||||||
|
"origin": {
|
||||||
|
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||||
|
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"name": "sdd",
|
||||||
|
"description": "Specification-Driven Development with Process Discipline for Claude Code",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "c59bb5c42fcfb5ba7fd49378db5d2c5fa1744d4bf716bbec18151f90a3ec6282"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "085c850a3c04a0ed6112514d5f7d3db706b9a75b8e3af07f9dd5d3bab82b56b9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/constitution.md",
|
||||||
|
"sha256": "bfc87059b5bda62143b5bf6778d99cfbbfc437d1614279a478885a90e8d13ef1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/implement.md",
|
||||||
|
"sha256": "2e3909c2d0c36d943d5e578b15455b8ff50e76d6c40d16c02e105472a9d67f23"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/review-spec.md",
|
||||||
|
"sha256": "fc3a009cd5085395b6ddb4c6481b3cbd744457ce681d8fcf29c83a5dd7207600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/review-code.md",
|
||||||
|
"sha256": "40f6716331dda768c9b3b7a8eda800342f892993e26fb5771f6061facc1c719e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/evolve.md",
|
||||||
|
"sha256": "50a2d1df0059f5601bd2b5caa641052335c33cccda1293ac743ea354bcce046d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/spec.md",
|
||||||
|
"sha256": "2182b65cbb1aa331ac42fe30567cbcc5f4c4ac7e64f4f1f831d254973eeb2a71"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/brainstorm.md",
|
||||||
|
"sha256": "f214ce202bd62df159df9ffc8a3416ed4b69442cd2ed35394be8f32e32cfc396"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/review-spec/SKILL.md",
|
||||||
|
"sha256": "4c4b0975c3ce30743ec556b259eff98015b7b9c74657cd8ee9930a4569d2ace3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/review-code/SKILL.md",
|
||||||
|
"sha256": "45869d1bd9e8af7bff02488c2bd49e2c46fec9692282fb0124255317054ac4f9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/brainstorm/SKILL.md",
|
||||||
|
"sha256": "5a2eedb69cd87c9036d9268689a886c1a58f8003bb0c474f1545d5dc0bbd716b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/using-superpowers-sdd/SKILL.md",
|
||||||
|
"sha256": "a8cb5012d28ec6ace21ead813a787bd10dfe6d7f2286a3197610a451a7d6cb33"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/spec-refactoring/SKILL.md",
|
||||||
|
"sha256": "39b6277f7a4e18048f343e58e17a96beb608d1a1f45924dc8303a17934bf54f6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/spec/SKILL.md",
|
||||||
|
"sha256": "e3b533f99474058f4bcf3a62490640a752310f27d657b8c295c8c47b25089cfc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/evolve/SKILL.md",
|
||||||
|
"sha256": "17d7072f8dfbd02c86472fd9ae9a487384226b624314d26b5b8aeaa852a494a4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/constitution/SKILL.md",
|
||||||
|
"sha256": "15313ce80a72bbc4a88a9c939223a549bdda9941e2dcaf50b422301dc6bc70d6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/spec-kit/SKILL.md",
|
||||||
|
"sha256": "467a3775eef8c11b31223511ed9b6c4773db5194c3284fc59d4f1ef541075155"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/implement/SKILL.md",
|
||||||
|
"sha256": "0007d30d70a6d1f7b0cdde7ab91ebbe915cf9112f22f08b8148f7878de4500f2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/writing-plans/SKILL.md",
|
||||||
|
"sha256": "851c271e7b2958127fcbdf5f180b757d8999c01613d7fd072b76acd5c0ed8368"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/verification-before-completion/SKILL.md",
|
||||||
|
"sha256": "5fc420b327486a6f05c7b2c854e9a08f49b5dc0a7a854fb662e73749a2c6fff5"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "71d8c21f24d6a6239f4172c8120ac1612292706c17824cae1b1f0717891508d7"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
314
skills/brainstorm/SKILL.md
Normal file
314
skills/brainstorm/SKILL.md
Normal file
@@ -0,0 +1,314 @@
|
|||||||
|
---
|
||||||
|
name: brainstorm
|
||||||
|
description: Use when starting from rough ideas - refines concepts into executable specifications through collaborative questioning, alternative exploration, and incremental validation, use this skill when called from a command
|
||||||
|
---
|
||||||
|
|
||||||
|
# Brainstorming Ideas Into Specifications
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Help turn rough ideas into formal, executable specifications through natural collaborative dialogue.
|
||||||
|
|
||||||
|
Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, create the specification using spec-kit (if available) or directly as markdown.
|
||||||
|
|
||||||
|
**Key Difference from Standard Brainstorming:**
|
||||||
|
- **Output is a SPEC**, not a design document
|
||||||
|
- Spec is the **source of truth** for implementation
|
||||||
|
- Focus on **"what" and "why"**, defer "how" to implementation phase
|
||||||
|
- Validate spec soundness before finishing
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Before starting the brainstorming workflow, ensure spec-kit is initialized:
|
||||||
|
|
||||||
|
{Skill: spec-kit}
|
||||||
|
|
||||||
|
If spec-kit prompts for restart, pause this workflow and resume after restart.
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### Understanding the idea
|
||||||
|
|
||||||
|
**Check context first:**
|
||||||
|
- Review existing specs (if any) in `specs/` directory
|
||||||
|
- Check for constitution (`specs/constitution.md`)
|
||||||
|
- Review recent commits to understand project state
|
||||||
|
- Look for related features or patterns
|
||||||
|
|
||||||
|
**Ask questions to refine:**
|
||||||
|
- Ask questions one at a time
|
||||||
|
- Prefer multiple choice when possible
|
||||||
|
- Focus on: purpose, constraints, success criteria, edge cases
|
||||||
|
- Identify dependencies and integrations
|
||||||
|
|
||||||
|
**Remember:** You're building a SPEC, so focus on WHAT needs to happen, not HOW it will be implemented.
|
||||||
|
|
||||||
|
### Exploring approaches
|
||||||
|
|
||||||
|
**Propose 2-3 different approaches:**
|
||||||
|
- Present options conversationally with trade-offs
|
||||||
|
- Lead with your recommended option
|
||||||
|
- Explain reasoning clearly
|
||||||
|
- Consider: complexity, maintainability, user impact
|
||||||
|
|
||||||
|
**Questions to explore:**
|
||||||
|
- What are the core requirements vs. nice-to-have?
|
||||||
|
- What are the error cases and edge conditions?
|
||||||
|
- How does this integrate with existing features?
|
||||||
|
- What are the success criteria?
|
||||||
|
|
||||||
|
### Creating the specification
|
||||||
|
|
||||||
|
**Once you understand what you're building:**
|
||||||
|
|
||||||
|
1. **Announce spec creation:**
|
||||||
|
"Based on our discussion, I'm creating the specification..."
|
||||||
|
|
||||||
|
2. **Create spec file:**
|
||||||
|
- Location: `specs/features/[feature-name]/spec.md`
|
||||||
|
- Use spec-kit CLI if available: `speckit specify`
|
||||||
|
- Otherwise: Create markdown directly
|
||||||
|
|
||||||
|
3. **IMPORTANT: Capture implementation insights separately**
|
||||||
|
|
||||||
|
If technical details emerged during brainstorming (technology choices, architecture decisions, trade-off discussions), **create implementation-notes.md** to capture them:
|
||||||
|
|
||||||
|
- Location: `specs/features/[feature-name]/implementation-notes.md`
|
||||||
|
- Purpose: Document the "why" behind design decisions
|
||||||
|
- Content:
|
||||||
|
- Alternative approaches considered
|
||||||
|
- Trade-offs discussed
|
||||||
|
- Technology choices and rationale
|
||||||
|
- Technical constraints discovered
|
||||||
|
- Questions answered during brainstorming
|
||||||
|
|
||||||
|
**Why separate from spec:**
|
||||||
|
- Spec = WHAT and WHY (requirements, contracts)
|
||||||
|
- Implementation notes = Technical context for HOW
|
||||||
|
- Keeps spec stable while preserving valuable context
|
||||||
|
- Helps future implementers understand decisions
|
||||||
|
|
||||||
|
**Example content:**
|
||||||
|
```markdown
|
||||||
|
# Implementation Notes: User Authentication
|
||||||
|
|
||||||
|
## Design Decisions
|
||||||
|
|
||||||
|
### Decision: OAuth vs. Magic Links
|
||||||
|
- Chose OAuth (Google + GitHub)
|
||||||
|
- Rationale: User preference for familiar login flow
|
||||||
|
- Rejected magic links: Email deliverability concerns
|
||||||
|
|
||||||
|
### Decision: JWT in httpOnly cookies
|
||||||
|
- Prevents XSS attacks
|
||||||
|
- Refresh token rotation for security
|
||||||
|
- Trade-off: Slightly more complex than localStorage
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Spec structure** (use this template):
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Feature: [Feature Name]
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
[Why this feature exists - the problem it solves]
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
### Functional Requirements
|
||||||
|
- [What the feature must do]
|
||||||
|
- [Behavior in specific scenarios]
|
||||||
|
- [Integration points]
|
||||||
|
|
||||||
|
### Non-Functional Requirements
|
||||||
|
- [Performance constraints]
|
||||||
|
- [Security requirements]
|
||||||
|
- [Accessibility needs]
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
- [How we know it works]
|
||||||
|
- [Measurable outcomes]
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
- [What can go wrong]
|
||||||
|
- [How errors should be handled]
|
||||||
|
|
||||||
|
## Edge Cases
|
||||||
|
- [Boundary conditions]
|
||||||
|
- [Unusual scenarios]
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
- [Other features/systems required]
|
||||||
|
- [External services]
|
||||||
|
|
||||||
|
## Out of Scope
|
||||||
|
- [What this feature explicitly does NOT do]
|
||||||
|
- [Future considerations]
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
- [Anything still unclear]
|
||||||
|
- [Decisions deferred to implementation]
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Validate against constitution** (if exists):
|
||||||
|
- Read `specs/constitution.md`
|
||||||
|
- Check spec aligns with project principles
|
||||||
|
- Note any violations and address them
|
||||||
|
|
||||||
|
5. **Present spec in sections:**
|
||||||
|
- Show 200-300 words at a time
|
||||||
|
- Ask: "Does this look right so far?"
|
||||||
|
- Be ready to revise based on feedback
|
||||||
|
|
||||||
|
### After spec creation
|
||||||
|
|
||||||
|
**Validate the spec:**
|
||||||
|
- Use `sdd:review-spec` to check soundness
|
||||||
|
- Ensure spec is implementable
|
||||||
|
- Confirm no ambiguities remain
|
||||||
|
|
||||||
|
**Offer next steps:**
|
||||||
|
- "Spec created and validated. Ready to implement?"
|
||||||
|
- If yes → Use `sdd:implement`
|
||||||
|
- If no → Offer to refine spec or pause
|
||||||
|
|
||||||
|
**Commit the spec:**
|
||||||
|
```bash
|
||||||
|
git add specs/features/[feature-name].md
|
||||||
|
git commit -m "Add spec for [feature name]
|
||||||
|
|
||||||
|
[Brief description of what the feature does]
|
||||||
|
|
||||||
|
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
||||||
|
|
||||||
|
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Principles
|
||||||
|
|
||||||
|
- **One question at a time** - Don't overwhelm with multiple questions
|
||||||
|
- **Multiple choice preferred** - Easier to answer than open-ended
|
||||||
|
- **YAGNI ruthlessly** - Remove unnecessary features from all specs
|
||||||
|
- **Explore alternatives** - Always propose 2-3 approaches before settling
|
||||||
|
- **Incremental validation** - Present spec in sections, validate each
|
||||||
|
- **Be flexible** - Go back and clarify when something doesn't make sense
|
||||||
|
- **Separate WHAT from HOW** - Spec focuses on requirements and contracts; implementation notes capture technical decisions
|
||||||
|
- **Capture context** - If technical details emerge, put them in implementation-notes.md, not the spec
|
||||||
|
- **Spec, not design** - Focus on WHAT, defer HOW to implementation
|
||||||
|
|
||||||
|
## Recommend Constitution (First Time Users)
|
||||||
|
|
||||||
|
If no constitution exists and this seems to be early in project:
|
||||||
|
|
||||||
|
**After first spec created:**
|
||||||
|
- "I notice you don't have a constitution yet."
|
||||||
|
- "A constitution defines project-wide principles like:"
|
||||||
|
- Coding standards
|
||||||
|
- Architectural patterns
|
||||||
|
- Quality gates
|
||||||
|
- Error handling approaches
|
||||||
|
- "Would you like to create one? It ensures consistency across features."
|
||||||
|
- If yes → Use `sdd:constitution`
|
||||||
|
|
||||||
|
**Don't be pushy:** Constitution is optional but recommended.
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Understand current project context
|
||||||
|
- [ ] Ask questions to refine idea
|
||||||
|
- [ ] Explore 2-3 approaches with trade-offs
|
||||||
|
- [ ] Create specification file
|
||||||
|
- [ ] Validate against constitution (if exists)
|
||||||
|
- [ ] Review spec for soundness
|
||||||
|
- [ ] Commit spec to git
|
||||||
|
- [ ] Offer next steps (implement or refine)
|
||||||
|
|
||||||
|
## Example Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User: I want to add a comment system to the blog
|
||||||
|
|
||||||
|
You: I'm using sdd:brainstorm to refine this idea into a spec.
|
||||||
|
|
||||||
|
Let me understand the context first...
|
||||||
|
[Reviews existing code and specs]
|
||||||
|
|
||||||
|
For the comment system, what level of features do you want?
|
||||||
|
|
||||||
|
A) Basic - Name, email, comment text only
|
||||||
|
B) Standard - Above + threading/replies
|
||||||
|
C) Advanced - Above + reactions, editing, moderation
|
||||||
|
D) Full - Above + notifications, mentions, markdown
|
||||||
|
|
||||||
|
User: B - Standard with threading
|
||||||
|
|
||||||
|
You: Great. For threading, should replies be:
|
||||||
|
|
||||||
|
A) Unlimited depth (comments on comments on comments...)
|
||||||
|
B) One level only (reply to top-level comments)
|
||||||
|
C) Two levels (reply and one nested level)
|
||||||
|
|
||||||
|
[... conversation continues ...]
|
||||||
|
|
||||||
|
You: Based on our discussion, I'm creating the specification at:
|
||||||
|
specs/features/blog-comments.md
|
||||||
|
|
||||||
|
[Creates spec with all discussed requirements]
|
||||||
|
|
||||||
|
Here's the Purpose and Requirements section:
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
Enable readers to discuss blog posts through threaded comments,
|
||||||
|
fostering community engagement and feedback.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
### Functional Requirements
|
||||||
|
- Readers can submit comments on published blog posts
|
||||||
|
- Comments require: name, email, comment text
|
||||||
|
- Comments support one level of replies (threading)
|
||||||
|
- Comments display in chronological order, newest first
|
||||||
|
- Replies display under parent comment
|
||||||
|
...
|
||||||
|
|
||||||
|
Does this look right so far?
|
||||||
|
|
||||||
|
User: Yes
|
||||||
|
|
||||||
|
[... continues through all sections ...]
|
||||||
|
|
||||||
|
You: Spec created! Let me validate it for soundness...
|
||||||
|
|
||||||
|
[Runs sdd:review-spec]
|
||||||
|
|
||||||
|
Spec is sound and implementable ✓
|
||||||
|
|
||||||
|
Committed to git ✓
|
||||||
|
|
||||||
|
Ready to implement the comment system?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Pitfalls
|
||||||
|
|
||||||
|
**Don't:**
|
||||||
|
- Create design documents instead of specs
|
||||||
|
- Include implementation details ("use Redis for caching")
|
||||||
|
- Make decisions that belong in implementation phase
|
||||||
|
- Skip exploring alternatives
|
||||||
|
- Rush to spec creation before understanding the problem
|
||||||
|
|
||||||
|
**Do:**
|
||||||
|
- Focus on requirements and behavior
|
||||||
|
- Specify WHAT, not HOW
|
||||||
|
- Explore multiple approaches
|
||||||
|
- Validate incrementally
|
||||||
|
- Check against constitution
|
||||||
|
- Ensure spec is implementable
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
The spec you create here becomes the source of truth. Implementation will flow from it. Code reviews will validate against it. Make it clear, complete, and correct.
|
||||||
|
|
||||||
|
**Good specs enable good implementation. Take the time to get it right.**
|
||||||
518
skills/constitution/SKILL.md
Normal file
518
skills/constitution/SKILL.md
Normal file
@@ -0,0 +1,518 @@
|
|||||||
|
---
|
||||||
|
name: constitution
|
||||||
|
description: Create and manage project constitution - defines project-wide principles, patterns, and standards that guide all specs and implementations
|
||||||
|
---
|
||||||
|
|
||||||
|
# Project Constitution Management
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Create and maintain a project constitution that defines project-wide principles, standards, and patterns.
|
||||||
|
|
||||||
|
A constitution provides:
|
||||||
|
- Architectural decisions
|
||||||
|
- Coding standards
|
||||||
|
- Error handling patterns
|
||||||
|
- Quality gates
|
||||||
|
- Common practices
|
||||||
|
|
||||||
|
All specs are validated against the constitution for consistency.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Ensure spec-kit is initialized:
|
||||||
|
|
||||||
|
{Skill: spec-kit}
|
||||||
|
|
||||||
|
If spec-kit prompts for restart, pause this workflow and resume after restart.
|
||||||
|
|
||||||
|
## What is a Constitution?
|
||||||
|
|
||||||
|
**Purpose:**
|
||||||
|
Document project-wide rules that ensure consistency across features.
|
||||||
|
|
||||||
|
**Contains:**
|
||||||
|
- Architectural principles
|
||||||
|
- Coding standards
|
||||||
|
- API design patterns
|
||||||
|
- Error handling approaches
|
||||||
|
- Security requirements
|
||||||
|
- Testing standards
|
||||||
|
- Performance requirements
|
||||||
|
- Accessibility standards
|
||||||
|
|
||||||
|
**Benefits:**
|
||||||
|
- Consistency across features
|
||||||
|
- Onboarding documentation
|
||||||
|
- Design decision record
|
||||||
|
- Spec validation reference
|
||||||
|
|
||||||
|
## When to Create
|
||||||
|
|
||||||
|
**Good times:**
|
||||||
|
- New project starting
|
||||||
|
- After second or third feature (patterns emerging)
|
||||||
|
- Team wants consistency
|
||||||
|
- Before major expansion
|
||||||
|
|
||||||
|
**Bad times:**
|
||||||
|
- First feature (too early, no patterns yet)
|
||||||
|
- During active implementation
|
||||||
|
- As reaction to single issue
|
||||||
|
|
||||||
|
**Rule of thumb:** Create after you see patterns repeating.
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Decide if Constitution Needed
|
||||||
|
|
||||||
|
**Ask:**
|
||||||
|
- Are there repeated patterns in specs?
|
||||||
|
- Do you want consistency enforced?
|
||||||
|
- Is this a team project?
|
||||||
|
- Is this a long-term project?
|
||||||
|
|
||||||
|
**If solo + small project:** Constitution might be overkill
|
||||||
|
|
||||||
|
**If team OR large OR long-term:** Constitution recommended
|
||||||
|
|
||||||
|
### 2. Gather Existing Patterns
|
||||||
|
|
||||||
|
**Review existing specs:**
|
||||||
|
```bash
|
||||||
|
ls specs/features/
|
||||||
|
cat specs/features/*.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Identify patterns:**
|
||||||
|
- How do we handle errors?
|
||||||
|
- What API patterns do we follow?
|
||||||
|
- What security requirements are common?
|
||||||
|
- What coding standards do we use?
|
||||||
|
|
||||||
|
**Extract commonalities:**
|
||||||
|
Make implicit standards explicit.
|
||||||
|
|
||||||
|
### 3. Use Spec-Kit or Manual Creation
|
||||||
|
|
||||||
|
**With spec-kit:**
|
||||||
|
```bash
|
||||||
|
speckit constitution
|
||||||
|
```
|
||||||
|
|
||||||
|
**Manual creation:**
|
||||||
|
Create `specs/constitution.md` with template below.
|
||||||
|
|
||||||
|
### 4. Create Constitution Content
|
||||||
|
|
||||||
|
**Template:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Project Constitution
|
||||||
|
|
||||||
|
**Project:** [Project Name]
|
||||||
|
**Created:** YYYY-MM-DD
|
||||||
|
**Last Updated:** YYYY-MM-DD
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This constitution defines project-wide principles, patterns, and standards.
|
||||||
|
All features and implementations must align with these principles.
|
||||||
|
|
||||||
|
## Architectural Principles
|
||||||
|
|
||||||
|
### [Principle Name]
|
||||||
|
**Description:** [What this principle means]
|
||||||
|
**Rationale:** [Why we follow this]
|
||||||
|
**Examples:**
|
||||||
|
- ✓ [Good example]
|
||||||
|
- ✗ [Bad example]
|
||||||
|
|
||||||
|
[Repeat for each principle]
|
||||||
|
|
||||||
|
## API Design Standards
|
||||||
|
|
||||||
|
### RESTful Conventions
|
||||||
|
- Use standard HTTP methods (GET, POST, PUT, DELETE)
|
||||||
|
- Plural resource names (/users, not /user)
|
||||||
|
- Return appropriate status codes
|
||||||
|
- Use JSON for request/response bodies
|
||||||
|
|
||||||
|
### Error Responses
|
||||||
|
**Format:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error": "Human-readable error message",
|
||||||
|
"code": "ERROR_CODE",
|
||||||
|
"details": { ... }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Status Codes:**
|
||||||
|
- 400: Bad Request (client error)
|
||||||
|
- 401: Unauthorized (auth required)
|
||||||
|
- 403: Forbidden (auth insufficient)
|
||||||
|
- 404: Not Found
|
||||||
|
- 422: Unprocessable Entity (validation failed)
|
||||||
|
- 500: Internal Server Error
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
### Approach
|
||||||
|
- All errors must be handled explicitly
|
||||||
|
- Use try-catch for I/O operations
|
||||||
|
- Log errors with context
|
||||||
|
- Return user-friendly messages
|
||||||
|
|
||||||
|
### Retry Logic
|
||||||
|
- Database operations: 3 retries with exponential backoff
|
||||||
|
- External APIs: 2 retries with fixed delay
|
||||||
|
- Timeout: 30 seconds for external calls
|
||||||
|
|
||||||
|
## Security Requirements
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
- All API endpoints require JWT authentication (except public endpoints)
|
||||||
|
- JWTs expire after 30 minutes
|
||||||
|
- Refresh tokens expire after 7 days
|
||||||
|
|
||||||
|
### Input Validation
|
||||||
|
- Validate all user input
|
||||||
|
- Sanitize before database operations
|
||||||
|
- Reject unexpected fields
|
||||||
|
|
||||||
|
### Secrets Management
|
||||||
|
- Never commit secrets to git
|
||||||
|
- Use environment variables
|
||||||
|
- Rotate secrets quarterly
|
||||||
|
|
||||||
|
## Testing Standards
|
||||||
|
|
||||||
|
### Coverage Requirements
|
||||||
|
- Minimum 80% code coverage
|
||||||
|
- 100% coverage for critical paths
|
||||||
|
|
||||||
|
### Test Types
|
||||||
|
- Unit tests for all functions
|
||||||
|
- Integration tests for API endpoints
|
||||||
|
- E2E tests for critical user flows
|
||||||
|
|
||||||
|
### Test Organization
|
||||||
|
- Tests in `tests/` directory
|
||||||
|
- Mirror source structure
|
||||||
|
- Use descriptive test names
|
||||||
|
|
||||||
|
## Performance Requirements
|
||||||
|
|
||||||
|
### Response Times
|
||||||
|
- API responses: < 200ms (p95)
|
||||||
|
- Database queries: < 50ms (p95)
|
||||||
|
- Page loads: < 2 seconds
|
||||||
|
|
||||||
|
### Scalability
|
||||||
|
- Design for 10,000 concurrent users
|
||||||
|
- Horizontal scaling preferred
|
||||||
|
- Stateless where possible
|
||||||
|
|
||||||
|
## Code Quality Standards
|
||||||
|
|
||||||
|
### Code Style
|
||||||
|
- Follow [ESLint/Prettier/etc.] configuration
|
||||||
|
- Consistent naming conventions
|
||||||
|
- Comments for complex logic only
|
||||||
|
|
||||||
|
### Code Review
|
||||||
|
- All code must be reviewed
|
||||||
|
- Spec compliance verified
|
||||||
|
- Tests required before merge
|
||||||
|
|
||||||
|
## Accessibility Standards
|
||||||
|
|
||||||
|
### WCAG Compliance
|
||||||
|
- Meet WCAG 2.1 Level AA
|
||||||
|
- Keyboard navigation required
|
||||||
|
- Screen reader compatible
|
||||||
|
|
||||||
|
## Documentation Standards
|
||||||
|
|
||||||
|
### Code Documentation
|
||||||
|
- JSDoc for public functions
|
||||||
|
- README in each module
|
||||||
|
- Architecture diagrams for complex systems
|
||||||
|
|
||||||
|
### Spec Documentation
|
||||||
|
- All features must have specs
|
||||||
|
- Specs updated with changes
|
||||||
|
- Specs validated before implementation
|
||||||
|
|
||||||
|
## Change Management
|
||||||
|
|
||||||
|
### Updating This Constitution
|
||||||
|
- Requires team discussion (if team)
|
||||||
|
- Document rationale for changes
|
||||||
|
- Update all affected specs
|
||||||
|
- Communicate changes
|
||||||
|
|
||||||
|
### Exceptions
|
||||||
|
- Exceptions must be documented in spec
|
||||||
|
- Requires justification
|
||||||
|
- Reviewed during code review
|
||||||
|
|
||||||
|
## Glossary
|
||||||
|
|
||||||
|
**[Term 1]:** [Definition]
|
||||||
|
**[Term 2]:** [Definition]
|
||||||
|
|
||||||
|
## Decision Log
|
||||||
|
|
||||||
|
### [Decision Date]: [Decision Title]
|
||||||
|
**Context:** [Why decision needed]
|
||||||
|
**Decision:** [What was decided]
|
||||||
|
**Rationale:** [Why this decision]
|
||||||
|
**Implications:** [What this affects]
|
||||||
|
|
||||||
|
[Add new decisions here]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Review and Refine
|
||||||
|
|
||||||
|
**Questions to ask:**
|
||||||
|
- Is this too restrictive?
|
||||||
|
- Is this clear enough?
|
||||||
|
- Can we realistically follow this?
|
||||||
|
- Does this reflect our actual practices?
|
||||||
|
|
||||||
|
**Adjust as needed.**
|
||||||
|
|
||||||
|
### 6. Validate Against Existing Specs
|
||||||
|
|
||||||
|
**Check existing specs:**
|
||||||
|
```bash
|
||||||
|
# For each existing spec
|
||||||
|
cat specs/features/[feature].md
|
||||||
|
|
||||||
|
# Does it align with constitution?
|
||||||
|
# Any violations?
|
||||||
|
```
|
||||||
|
|
||||||
|
**If violations found:**
|
||||||
|
- Update spec, OR
|
||||||
|
- Update constitution (if spec is right), OR
|
||||||
|
- Note as exception
|
||||||
|
|
||||||
|
### 7. Commit Constitution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add specs/constitution.md
|
||||||
|
git commit -m "Add project constitution
|
||||||
|
|
||||||
|
Defines project-wide principles and standards:
|
||||||
|
- Architectural principles
|
||||||
|
- API design standards
|
||||||
|
- Error handling patterns
|
||||||
|
- Security requirements
|
||||||
|
- Testing standards
|
||||||
|
- Code quality standards
|
||||||
|
|
||||||
|
All future specs will be validated against this constitution.
|
||||||
|
|
||||||
|
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
||||||
|
|
||||||
|
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Communicate and Adopt
|
||||||
|
|
||||||
|
**For team projects:**
|
||||||
|
- Share with team
|
||||||
|
- Get consensus
|
||||||
|
- Document exceptions
|
||||||
|
- Reference in onboarding
|
||||||
|
|
||||||
|
**For solo projects:**
|
||||||
|
- Keep visible
|
||||||
|
- Reference when creating specs
|
||||||
|
- Update as you learn
|
||||||
|
|
||||||
|
## Constitution Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Decide if constitution needed
|
||||||
|
- [ ] Gather existing patterns from specs/code
|
||||||
|
- [ ] Create constitution file (spec-kit or manual)
|
||||||
|
- [ ] Fill in all relevant sections
|
||||||
|
- [ ] Review for clarity and feasibility
|
||||||
|
- [ ] Validate against existing specs
|
||||||
|
- [ ] Handle any violations found
|
||||||
|
- [ ] Commit constitution to git
|
||||||
|
- [ ] Communicate to team (if applicable)
|
||||||
|
|
||||||
|
## Example Constitution
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Todo App Project Constitution
|
||||||
|
|
||||||
|
**Created:** 2025-11-10
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Define standards for the todo app project to ensure consistency.
|
||||||
|
|
||||||
|
## Architectural Principles
|
||||||
|
|
||||||
|
### RESTful API Design
|
||||||
|
All endpoints follow REST conventions:
|
||||||
|
- `GET /api/todos` - List todos
|
||||||
|
- `POST /api/todos` - Create todo
|
||||||
|
- `PUT /api/todos/:id` - Update todo
|
||||||
|
- `DELETE /api/todos/:id` - Delete todo
|
||||||
|
|
||||||
|
### Data Validation
|
||||||
|
- Validate on server (never trust client)
|
||||||
|
- Return 422 for validation failures
|
||||||
|
- Provide specific error messages
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
### Error Response Format
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error": "Human-readable message",
|
||||||
|
"field": "field_name", // for validation errors
|
||||||
|
"code": "ERROR_CODE"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Common Errors
|
||||||
|
- 400: Malformed request
|
||||||
|
- 401: Not authenticated
|
||||||
|
- 404: Todo not found
|
||||||
|
- 422: Validation failed (e.g., title too long)
|
||||||
|
|
||||||
|
## Testing Standards
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
- All endpoints have integration tests
|
||||||
|
- All validation rules have tests
|
||||||
|
- Edge cases tested
|
||||||
|
|
||||||
|
### Coverage
|
||||||
|
- Minimum 80% coverage
|
||||||
|
- 100% coverage for API endpoints
|
||||||
|
|
||||||
|
## Code Quality
|
||||||
|
|
||||||
|
### Naming
|
||||||
|
- camelCase for variables and functions
|
||||||
|
- PascalCase for classes
|
||||||
|
- UPPER_CASE for constants
|
||||||
|
|
||||||
|
### Comments
|
||||||
|
- JSDoc for public functions
|
||||||
|
- Inline comments for complex logic only
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
- JWT tokens required for all /api/* endpoints
|
||||||
|
- Tokens expire after 1 hour
|
||||||
|
- Refresh on activity
|
||||||
|
|
||||||
|
### Input Sanitization
|
||||||
|
- Escape HTML in todo titles/descriptions
|
||||||
|
- Limit field lengths (title: 200 chars, description: 2000 chars)
|
||||||
|
|
||||||
|
## Decision Log
|
||||||
|
|
||||||
|
### 2025-11-10: Use JWT for Auth
|
||||||
|
**Context:** Need authentication for multi-user support
|
||||||
|
**Decision:** Use JWT tokens stored in httpOnly cookies
|
||||||
|
**Rationale:** Secure, stateless, industry standard
|
||||||
|
**Implications:** Need token refresh mechanism, logout handling
|
||||||
|
```
|
||||||
|
|
||||||
|
## Maintaining the Constitution
|
||||||
|
|
||||||
|
**Update when:**
|
||||||
|
- New patterns emerge
|
||||||
|
- Decisions change
|
||||||
|
- Standards evolve
|
||||||
|
- Exceptions become rules
|
||||||
|
|
||||||
|
**Don't update when:**
|
||||||
|
- Single feature needs exception
|
||||||
|
- Trying to justify shortcut
|
||||||
|
- Reacting to single issue
|
||||||
|
|
||||||
|
**Update process:**
|
||||||
|
1. Propose change
|
||||||
|
2. Update constitution
|
||||||
|
3. Update affected specs
|
||||||
|
4. Communicate change
|
||||||
|
5. Add to decision log
|
||||||
|
|
||||||
|
## Common Sections
|
||||||
|
|
||||||
|
### Minimal Constitution
|
||||||
|
- Architectural principles
|
||||||
|
- Error handling
|
||||||
|
- Testing standards
|
||||||
|
|
||||||
|
### Standard Constitution
|
||||||
|
- Above, plus:
|
||||||
|
- API design
|
||||||
|
- Security requirements
|
||||||
|
- Code quality
|
||||||
|
|
||||||
|
### Comprehensive Constitution
|
||||||
|
- Above, plus:
|
||||||
|
- Performance requirements
|
||||||
|
- Accessibility standards
|
||||||
|
- Deployment practices
|
||||||
|
- Monitoring/observability
|
||||||
|
|
||||||
|
**Start minimal, expand as needed.**
|
||||||
|
|
||||||
|
## Anti-Patterns
|
||||||
|
|
||||||
|
**Avoid:**
|
||||||
|
- Creating constitution too early (no patterns yet)
|
||||||
|
- Making it too restrictive (can't follow it)
|
||||||
|
- Copying from other projects (doesn't fit yours)
|
||||||
|
- Never updating it (becomes outdated)
|
||||||
|
- Not following it (then why have it?)
|
||||||
|
|
||||||
|
**Instead:**
|
||||||
|
- Wait for patterns to emerge
|
||||||
|
- Make it realistic and followable
|
||||||
|
- Extract from your own project
|
||||||
|
- Update as project evolves
|
||||||
|
- Enforce during spec validation
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Constitution is living document.**
|
||||||
|
|
||||||
|
- Starts small, grows with project
|
||||||
|
- Reflects actual practices
|
||||||
|
- Updated as standards evolve
|
||||||
|
- Referenced regularly
|
||||||
|
|
||||||
|
**Constitution enables consistency.**
|
||||||
|
|
||||||
|
- Specs validated against it
|
||||||
|
- Reduces decision fatigue
|
||||||
|
- Onboards new developers
|
||||||
|
- Documents architectural decisions
|
||||||
|
|
||||||
|
**Constitution serves the project.**
|
||||||
|
|
||||||
|
- Not rigid rules set in stone
|
||||||
|
- Pragmatic guidelines
|
||||||
|
- Updated when they don't serve
|
||||||
|
- Exceptions documented
|
||||||
|
|
||||||
|
**Good constitution helps. Bad constitution hinders.**
|
||||||
|
|
||||||
|
Make yours helpful.
|
||||||
534
skills/evolve/SKILL.md
Normal file
534
skills/evolve/SKILL.md
Normal file
@@ -0,0 +1,534 @@
|
|||||||
|
---
|
||||||
|
name: evolve
|
||||||
|
description: Use when spec and code diverge - AI analyzes mismatches, recommends update spec vs fix code with reasoning, handles evolution with user control or auto-updates
|
||||||
|
---
|
||||||
|
|
||||||
|
# Spec Evolution and Reconciliation
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Handle spec/code mismatches through AI-guided analysis and user-controlled evolution.
|
||||||
|
|
||||||
|
Specs WILL diverge from code. This is normal and healthy. The question is: which should change?
|
||||||
|
|
||||||
|
This skill detects divergence, analyzes the mismatch, recommends resolution, and executes the change.
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
**Use this skill when:**
|
||||||
|
- Code review detects spec/code mismatch
|
||||||
|
- Verification finds spec compliance issues
|
||||||
|
- Developer explicitly requests evolution
|
||||||
|
- Implementation reveals better approach than spec
|
||||||
|
- Spec ambiguity discovered during implementation
|
||||||
|
|
||||||
|
**Auto-triggered by:**
|
||||||
|
- `sdd:review-code` (when deviations found)
|
||||||
|
- `sdd:verification-before-completion` (when compliance fails)
|
||||||
|
|
||||||
|
**Don't use this skill when:**
|
||||||
|
- No mismatch exists (everything compliant)
|
||||||
|
- Spec doesn't exist yet → Use `sdd:spec`
|
||||||
|
- Multiple specs need consolidation → Use `sdd:spec-refactoring`
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Ensure spec-kit is initialized:
|
||||||
|
|
||||||
|
{Skill: spec-kit}
|
||||||
|
|
||||||
|
If spec-kit prompts for restart, pause this workflow and resume after restart.
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Detect Mismatches
|
||||||
|
|
||||||
|
**Identify all spec/code divergences:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Read spec
|
||||||
|
cat specs/features/[feature-name].md
|
||||||
|
|
||||||
|
# Compare to implementation
|
||||||
|
# For each requirement in spec:
|
||||||
|
# - What does spec say?
|
||||||
|
# - What does code do?
|
||||||
|
# - Do they match?
|
||||||
|
```
|
||||||
|
|
||||||
|
**Categorize each mismatch:**
|
||||||
|
- **Missing in code**: Spec requires it, code doesn't have it
|
||||||
|
- **Extra in code**: Code implements it, spec doesn't mention it
|
||||||
|
- **Different behavior**: Spec says X, code does Y
|
||||||
|
- **Ambiguous spec**: Spec unclear, code made assumption
|
||||||
|
|
||||||
|
**Document all mismatches with:**
|
||||||
|
- Spec requirement (quote from spec)
|
||||||
|
- Actual implementation (what code does)
|
||||||
|
- Location (file:line in code, section in spec)
|
||||||
|
|
||||||
|
### 2. Analyze Each Mismatch
|
||||||
|
|
||||||
|
**For each mismatch, determine:**
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
- Architectural (affects system design)
|
||||||
|
- Behavioral (changes functionality)
|
||||||
|
- Cosmetic (naming, organization, details)
|
||||||
|
|
||||||
|
**Severity:**
|
||||||
|
- **Critical**: Breaking change, security issue, data loss
|
||||||
|
- **Major**: Significant behavior change, API contract change
|
||||||
|
- **Minor**: Small deviation, non-breaking addition
|
||||||
|
- **Trivial**: Naming, formatting, implementation details
|
||||||
|
|
||||||
|
**Impact:**
|
||||||
|
- User-facing vs internal
|
||||||
|
- Breaking vs non-breaking
|
||||||
|
- Risky vs safe
|
||||||
|
|
||||||
|
### 3. Recommend Resolution
|
||||||
|
|
||||||
|
**For each mismatch, recommend:**
|
||||||
|
|
||||||
|
**Option A: Update Spec**
|
||||||
|
- When: Implementation reveals better approach
|
||||||
|
- Why: Spec was incomplete/wrong, code is better
|
||||||
|
- Impact: Spec changes to match reality
|
||||||
|
|
||||||
|
**Option B: Fix Code**
|
||||||
|
- When: Code deviates from intended design
|
||||||
|
- Why: Spec is correct, code is wrong
|
||||||
|
- Impact: Code changes to match spec
|
||||||
|
|
||||||
|
**Option C: Clarify Spec**
|
||||||
|
- When: Spec was ambiguous, code made reasonable choice
|
||||||
|
- Why: Make implicit explicit
|
||||||
|
- Impact: Spec expanded with details, code unchanged
|
||||||
|
|
||||||
|
**Provide reasoning for recommendation:**
|
||||||
|
- Why this option is best
|
||||||
|
- Trade-offs of alternatives
|
||||||
|
- Risk assessment
|
||||||
|
- User impact
|
||||||
|
|
||||||
|
### 4. Decide Resolution
|
||||||
|
|
||||||
|
**Decision flow:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Is this mismatch trivial/minor AND auto-update enabled?
|
||||||
|
Yes → Auto-update with notification
|
||||||
|
No → Ask user to decide
|
||||||
|
|
||||||
|
User decides:
|
||||||
|
A) Update spec
|
||||||
|
B) Fix code
|
||||||
|
C) Clarify spec
|
||||||
|
D) Defer (mark as known deviation)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check user configuration:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"sdd": {
|
||||||
|
"auto_update_spec": {
|
||||||
|
"enabled": true,
|
||||||
|
"threshold": "minor", // "none", "minor", "moderate"
|
||||||
|
"notify": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Thresholds:**
|
||||||
|
- `none`: Never auto-update
|
||||||
|
- `minor`: Auto-update trivial/minor mismatches
|
||||||
|
- `moderate`: Include non-breaking behavioral changes
|
||||||
|
|
||||||
|
### 5. Execute Resolution
|
||||||
|
|
||||||
|
**Option A: Update Spec**
|
||||||
|
|
||||||
|
1. Modify spec to match implementation
|
||||||
|
2. Add to spec changelog
|
||||||
|
3. Validate updated spec for soundness
|
||||||
|
4. Commit spec change with clear message
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update spec
|
||||||
|
vim specs/features/[feature].md
|
||||||
|
|
||||||
|
# Add changelog entry
|
||||||
|
echo "- YYYY-MM-DD: Updated [requirement] to include [change]" >> specs/features/[feature].md
|
||||||
|
|
||||||
|
# Commit
|
||||||
|
git add specs/features/[feature].md
|
||||||
|
git commit -m "Update spec: [change]
|
||||||
|
|
||||||
|
Implementation revealed [reason for change].
|
||||||
|
|
||||||
|
Previous: [old requirement]
|
||||||
|
Updated: [new requirement]
|
||||||
|
|
||||||
|
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
||||||
|
|
||||||
|
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option B: Fix Code**
|
||||||
|
|
||||||
|
1. Modify code to match spec
|
||||||
|
2. Update tests if needed
|
||||||
|
3. Verify spec compliance
|
||||||
|
4. Commit code change
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fix code
|
||||||
|
[Make changes to match spec]
|
||||||
|
|
||||||
|
# Update tests
|
||||||
|
[Adjust tests to match spec]
|
||||||
|
|
||||||
|
# Verify compliance
|
||||||
|
[Run sdd:verification-before-completion]
|
||||||
|
|
||||||
|
# Commit
|
||||||
|
git add [files]
|
||||||
|
git commit -m "Fix: Align [component] with spec
|
||||||
|
|
||||||
|
Code was [what it did], spec requires [what spec says].
|
||||||
|
|
||||||
|
Updated to match spec requirement: [spec section]
|
||||||
|
|
||||||
|
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
||||||
|
|
||||||
|
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option C: Clarify Spec**
|
||||||
|
|
||||||
|
1. Add detail to spec (keep code unchanged)
|
||||||
|
2. Make implicit assumptions explicit
|
||||||
|
3. Add to spec changelog
|
||||||
|
4. Commit clarification
|
||||||
|
|
||||||
|
**Option D: Defer**
|
||||||
|
|
||||||
|
1. Document as known deviation
|
||||||
|
2. Add to spec's "Known Deviations" section
|
||||||
|
3. Note reason and plan to address
|
||||||
|
4. Commit documentation
|
||||||
|
|
||||||
|
### 6. Verify Reconciliation
|
||||||
|
|
||||||
|
**After resolution:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Re-check spec compliance
|
||||||
|
# Ensure mismatch is resolved
|
||||||
|
# Verify no new mismatches introduced
|
||||||
|
```
|
||||||
|
|
||||||
|
**Confirm:**
|
||||||
|
- Spec and code now aligned
|
||||||
|
- Tests still passing
|
||||||
|
- No regressions introduced
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Detect all spec/code mismatches
|
||||||
|
- [ ] Categorize each mismatch (type, severity, impact)
|
||||||
|
- [ ] Analyze and recommend resolution for each
|
||||||
|
- [ ] Check user configuration for auto-update
|
||||||
|
- [ ] Decide resolution (auto or ask user)
|
||||||
|
- [ ] Execute resolution (update spec, fix code, or clarify)
|
||||||
|
- [ ] Verify reconciliation complete
|
||||||
|
- [ ] Commit changes with clear messages
|
||||||
|
- [ ] Update documentation if needed
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Example 1: Auto-Update (Minor Addition)
|
||||||
|
|
||||||
|
```
|
||||||
|
[During verification]
|
||||||
|
|
||||||
|
Spec compliance check: 95%
|
||||||
|
|
||||||
|
Mismatch detected:
|
||||||
|
|
||||||
|
**Mismatch 1: Response includes timestamp (MINOR)**
|
||||||
|
- **Spec says:** Return `{ id, name, email }`
|
||||||
|
- **Code does:** Returns `{ id, name, email, updated_at }`
|
||||||
|
- **Location:** src/api/users.ts:45, specs/features/user-api.md#response
|
||||||
|
|
||||||
|
**Analysis:**
|
||||||
|
- Type: Behavioral (but non-breaking addition)
|
||||||
|
- Severity: Minor
|
||||||
|
- Impact: Non-breaking, adds useful information
|
||||||
|
|
||||||
|
**Recommendation: Update Spec (Option A)**
|
||||||
|
|
||||||
|
**Reasoning:**
|
||||||
|
- `updated_at` is standard practice for update endpoints
|
||||||
|
- Provides useful information to clients
|
||||||
|
- Non-breaking addition (clients can ignore it)
|
||||||
|
- Implementation is better than spec
|
||||||
|
|
||||||
|
**User config:** auto_update_spec.threshold = "minor"
|
||||||
|
|
||||||
|
**Action:** Auto-updating spec...
|
||||||
|
|
||||||
|
Updated specs/features/user-api.md:
|
||||||
|
- Added `updated_at` to response format
|
||||||
|
- Changelog: "2025-11-10: Added updated_at timestamp to responses"
|
||||||
|
|
||||||
|
✅ Spec updated
|
||||||
|
✅ Compliance now 100%
|
||||||
|
✅ Committed to git
|
||||||
|
|
||||||
|
Notification: Spec auto-updated with updated_at field (minor addition)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: User Decision (Major Change)
|
||||||
|
|
||||||
|
```
|
||||||
|
[During code review]
|
||||||
|
|
||||||
|
Spec compliance check: 85%
|
||||||
|
|
||||||
|
Mismatch detected:
|
||||||
|
|
||||||
|
**Mismatch 1: Validation behavior difference (MAJOR)**
|
||||||
|
- **Spec says:** "Reject requests with invalid avatar_url, return 422"
|
||||||
|
- **Code does:** "Accept invalid URLs, set avatar_url to null, return 200"
|
||||||
|
- **Location:** src/middleware/validation.ts:78, specs/features/user-profile.md#validation
|
||||||
|
|
||||||
|
**Analysis:**
|
||||||
|
- Type: Behavioral (changes error handling)
|
||||||
|
- Severity: Major
|
||||||
|
- Impact: User-facing, affects API contract
|
||||||
|
|
||||||
|
**Options:**
|
||||||
|
|
||||||
|
**A) Update Spec - Lenient validation**
|
||||||
|
- Pros: More user-friendly, prevents frustration
|
||||||
|
- Cons: Inconsistent with other validation (strict)
|
||||||
|
- Risk: Users might not know avatar failed
|
||||||
|
|
||||||
|
**B) Fix Code - Strict validation**
|
||||||
|
- Pros: Consistent with spec and other validation
|
||||||
|
- Cons: Worse UX when URL is invalid
|
||||||
|
- Risk: None (matches spec)
|
||||||
|
|
||||||
|
**C) Clarify Spec - Explicit fallback**
|
||||||
|
- Pros: Best of both (validate but handle gracefully)
|
||||||
|
- Cons: More complex
|
||||||
|
- Risk: None
|
||||||
|
|
||||||
|
**Recommendation: Option C**
|
||||||
|
|
||||||
|
**Reasoning:**
|
||||||
|
Best practice is to validate input but handle gracefully. Update spec to explicitly define fallback behavior: validate URL, set to null if invalid, log warning, return success with indication.
|
||||||
|
|
||||||
|
Which option do you prefer?
|
||||||
|
|
||||||
|
User: C - explicit fallback
|
||||||
|
|
||||||
|
You: Perfect. Updating spec to clarify fallback behavior...
|
||||||
|
|
||||||
|
Updated spec:
|
||||||
|
|
||||||
|
## Validation Rules
|
||||||
|
|
||||||
|
### avatar_url
|
||||||
|
- Must be valid URL format if provided
|
||||||
|
- **Fallback behavior:** If URL validation fails:
|
||||||
|
- Set avatar_url to null
|
||||||
|
- Log validation error
|
||||||
|
- Return 200 (success) with warning in response
|
||||||
|
- Response includes: `warnings: ["avatar_url invalid, set to null"]`
|
||||||
|
|
||||||
|
Code now matches clarified spec ✅
|
||||||
|
|
||||||
|
Spec compliance: 100%
|
||||||
|
|
||||||
|
Committed to git ✅
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 3: Fix Code (Spec Correct)
|
||||||
|
|
||||||
|
```
|
||||||
|
[During verification]
|
||||||
|
|
||||||
|
Spec compliance check: 90%
|
||||||
|
|
||||||
|
Mismatch detected:
|
||||||
|
|
||||||
|
**Mismatch 1: Missing error handling (CRITICAL)**
|
||||||
|
- **Spec says:** "Handle database connection errors with retry logic (3 attempts)"
|
||||||
|
- **Code does:** "Single attempt, fails immediately on error"
|
||||||
|
- **Location:** src/db/client.ts:34, specs/features/data-persistence.md#error-handling
|
||||||
|
|
||||||
|
**Analysis:**
|
||||||
|
- Type: Architectural (missing reliability mechanism)
|
||||||
|
- Severity: Critical
|
||||||
|
- Impact: Production reliability risk
|
||||||
|
|
||||||
|
**Recommendation: Fix Code (Option B)**
|
||||||
|
|
||||||
|
**Reasoning:**
|
||||||
|
- Spec defines critical reliability requirement
|
||||||
|
- Single-attempt fails too easily (production risk)
|
||||||
|
- Retry logic is standard practice
|
||||||
|
- Code is missing required feature
|
||||||
|
|
||||||
|
**No user decision needed - critical spec requirement missing**
|
||||||
|
|
||||||
|
Fixing code to implement retry logic...
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Added retry logic
|
||||||
|
async function queryWithRetry(sql, params, attempts = 3) {
|
||||||
|
for (let i = 0; i < attempts; i++) {
|
||||||
|
try {
|
||||||
|
return await db.query(sql, params);
|
||||||
|
} catch (error) {
|
||||||
|
if (i === attempts - 1) throw error;
|
||||||
|
await sleep(1000 * (i + 1)); // Exponential backoff
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Tests updated to verify retry behavior ✅
|
||||||
|
Spec compliance: 100% ✅
|
||||||
|
|
||||||
|
Committed code fix ✅
|
||||||
|
```
|
||||||
|
|
||||||
|
## Auto-Update Configuration
|
||||||
|
|
||||||
|
### Recommended Settings
|
||||||
|
|
||||||
|
**For solo projects:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"auto_update_spec": {
|
||||||
|
"enabled": true,
|
||||||
|
"threshold": "minor",
|
||||||
|
"notify": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**For team projects:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"auto_update_spec": {
|
||||||
|
"enabled": true,
|
||||||
|
"threshold": "none", // Always ask
|
||||||
|
"notify": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**For experimental work:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"auto_update_spec": {
|
||||||
|
"enabled": true,
|
||||||
|
"threshold": "moderate",
|
||||||
|
"notify": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Classification Guidelines
|
||||||
|
|
||||||
|
### Minor (Auto-Update Eligible)
|
||||||
|
- Adding timestamps to responses
|
||||||
|
- Renaming variables/functions
|
||||||
|
- Reorganizing code structure
|
||||||
|
- Adding logging/instrumentation
|
||||||
|
- Implementation detail changes
|
||||||
|
|
||||||
|
### Major (Always Ask)
|
||||||
|
- Changing API contracts
|
||||||
|
- Modifying behavior
|
||||||
|
- Adding/removing features
|
||||||
|
- Changing error handling
|
||||||
|
- Architectural changes
|
||||||
|
|
||||||
|
### Critical (Usually Fix Code)
|
||||||
|
- Security issues
|
||||||
|
- Data integrity problems
|
||||||
|
- Missing required features
|
||||||
|
- Incorrect business logic
|
||||||
|
|
||||||
|
## Common Patterns
|
||||||
|
|
||||||
|
### Pattern: Better Error Messages
|
||||||
|
|
||||||
|
**Mismatch:** Spec says "return error", code returns detailed error with context
|
||||||
|
|
||||||
|
**Resolution:** Update spec (minor)
|
||||||
|
- More detailed errors are better
|
||||||
|
- Non-breaking improvement
|
||||||
|
|
||||||
|
### Pattern: Missing Edge Case
|
||||||
|
|
||||||
|
**Mismatch:** Spec doesn't mention empty array, code handles it
|
||||||
|
|
||||||
|
**Resolution:** Clarify spec (add edge case)
|
||||||
|
- Make implicit explicit
|
||||||
|
- Document intended behavior
|
||||||
|
|
||||||
|
### Pattern: Performance Optimization
|
||||||
|
|
||||||
|
**Mismatch:** Spec doesn't specify caching, code adds cache
|
||||||
|
|
||||||
|
**Resolution:** Update spec (moderate)
|
||||||
|
- Document optimization in spec
|
||||||
|
- Ensure cache behavior is correct
|
||||||
|
|
||||||
|
### Pattern: Different Architecture
|
||||||
|
|
||||||
|
**Mismatch:** Spec implies synchronous, code is async
|
||||||
|
|
||||||
|
**Resolution:** Ask user (major)
|
||||||
|
- Significant architectural change
|
||||||
|
- May affect other components
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Spec evolution is normal and healthy.**
|
||||||
|
|
||||||
|
- Specs are not contracts set in stone
|
||||||
|
- Implementation reveals reality
|
||||||
|
- Better approaches emerge during coding
|
||||||
|
- Ambiguities get discovered
|
||||||
|
|
||||||
|
**The goal is alignment, not rigidity.**
|
||||||
|
|
||||||
|
- Specs guide implementation
|
||||||
|
- Implementation informs specs
|
||||||
|
- Both should reflect truth
|
||||||
|
|
||||||
|
**Always provide reasoning:**
|
||||||
|
- Why update spec vs fix code
|
||||||
|
- What's the impact
|
||||||
|
- What are the trade-offs
|
||||||
|
|
||||||
|
**Trust the process:**
|
||||||
|
- Detect mismatches early
|
||||||
|
- Analyze thoughtfully
|
||||||
|
- Recommend clearly
|
||||||
|
- Execute decisively
|
||||||
|
- Verify completely
|
||||||
|
|
||||||
|
**Spec and code in sync = quality software.**
|
||||||
432
skills/implement/SKILL.md
Normal file
432
skills/implement/SKILL.md
Normal file
@@ -0,0 +1,432 @@
|
|||||||
|
---
|
||||||
|
name: implement
|
||||||
|
description: Use when spec exists and is validated - generates implementation plan FROM spec, executes with TDD, and verifies spec compliance throughout
|
||||||
|
---
|
||||||
|
|
||||||
|
# Spec-Driven Implementation
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Implement features from validated specifications using Test-Driven Development, with continuous spec compliance checking throughout.
|
||||||
|
|
||||||
|
This is the core SDD implementation workflow: Spec → Plan → TDD → Verify.
|
||||||
|
|
||||||
|
**Critical Rule:** Implementation MUST match spec. Any deviation triggers spec evolution workflow.
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
**Use this skill when:**
|
||||||
|
- Spec exists and is validated
|
||||||
|
- Ready to write code
|
||||||
|
- Starting implementation of new feature
|
||||||
|
|
||||||
|
**Don't use this skill when:**
|
||||||
|
- No spec exists → Use `sdd:spec` or `sdd:brainstorm` first
|
||||||
|
- Spec/code mismatch exists → Use `sdd:evolve`
|
||||||
|
- Debugging existing code → Use `systematic-debugging`
|
||||||
|
|
||||||
|
## Technical Prerequisites
|
||||||
|
|
||||||
|
Ensure spec-kit is initialized:
|
||||||
|
|
||||||
|
{Skill: spec-kit}
|
||||||
|
|
||||||
|
If spec-kit prompts for restart, pause this workflow and resume after restart.
|
||||||
|
|
||||||
|
## Workflow Prerequisites
|
||||||
|
|
||||||
|
**Before starting implementation:**
|
||||||
|
- [ ] Spec exists in `specs/features/[feature-name].md`
|
||||||
|
- [ ] Spec validated for soundness (`sdd:review-spec`)
|
||||||
|
- [ ] Spec validated against constitution (if exists)
|
||||||
|
- [ ] No open questions in spec that block implementation
|
||||||
|
|
||||||
|
**If prerequisites not met:** Stop and address them first.
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Read and Understand Spec
|
||||||
|
|
||||||
|
**Load the spec:**
|
||||||
|
```bash
|
||||||
|
cat specs/features/[feature-name].md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Extract key information:**
|
||||||
|
- Functional requirements (what to build)
|
||||||
|
- Success criteria (how to verify)
|
||||||
|
- Error handling (what can go wrong)
|
||||||
|
- Dependencies (what's needed)
|
||||||
|
- Constraints (limitations)
|
||||||
|
|
||||||
|
**Validate understanding:**
|
||||||
|
- Summarize spec back to user
|
||||||
|
- Confirm no ambiguities remain
|
||||||
|
- Identify any implementation questions
|
||||||
|
|
||||||
|
### 2. Generate Implementation Plan FROM Spec
|
||||||
|
|
||||||
|
**Use `sdd:writing-plans` skill** to create plan.
|
||||||
|
|
||||||
|
**The plan MUST:**
|
||||||
|
- Derive directly from spec requirements
|
||||||
|
- Include all functional requirements
|
||||||
|
- Cover all error cases
|
||||||
|
- Address all edge cases
|
||||||
|
- Reference spec sections explicitly
|
||||||
|
|
||||||
|
**Plan structure:**
|
||||||
|
```markdown
|
||||||
|
# Implementation Plan: [Feature Name]
|
||||||
|
|
||||||
|
**Source Spec:** specs/features/[feature-name].md
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
|
||||||
|
## Requirements Coverage
|
||||||
|
|
||||||
|
### Functional Requirement 1: [From spec]
|
||||||
|
**Implementation approach:**
|
||||||
|
- [ ] Task 1
|
||||||
|
- [ ] Task 2
|
||||||
|
...
|
||||||
|
|
||||||
|
[Repeat for all functional requirements]
|
||||||
|
|
||||||
|
## Error Handling Implementation
|
||||||
|
|
||||||
|
[For each error case in spec]
|
||||||
|
- **Error:** [From spec]
|
||||||
|
- **Implementation:** [How to handle]
|
||||||
|
|
||||||
|
## Test Strategy
|
||||||
|
|
||||||
|
[How we'll verify each requirement]
|
||||||
|
|
||||||
|
## Files to Create/Modify
|
||||||
|
|
||||||
|
[List with file paths]
|
||||||
|
|
||||||
|
## Verification Steps
|
||||||
|
|
||||||
|
- [ ] All tests pass
|
||||||
|
- [ ] Spec compliance check passes
|
||||||
|
- [ ] Code review against spec
|
||||||
|
```
|
||||||
|
|
||||||
|
**Save plan:** `docs/plans/[date]-[feature]-implementation.md`
|
||||||
|
|
||||||
|
### 3. Set Up Isolated Workspace
|
||||||
|
|
||||||
|
**Use `using-git-worktrees`** (optional but recommended):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git worktree add ../feature-[name] -b feature/[name]
|
||||||
|
cd ../feature-[name]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Or work in current branch:**
|
||||||
|
- Ensure clean working directory
|
||||||
|
- Create feature branch if needed
|
||||||
|
|
||||||
|
### 4. Implement with Test-Driven Development
|
||||||
|
|
||||||
|
**Use `test-driven-development` skill.**
|
||||||
|
|
||||||
|
**For each requirement in spec:**
|
||||||
|
|
||||||
|
1. **Write test first** (based on spec requirement)
|
||||||
|
- Test validates spec requirement directly
|
||||||
|
- Include error cases from spec
|
||||||
|
- Include edge cases from spec
|
||||||
|
|
||||||
|
2. **Watch it fail**
|
||||||
|
- Confirms test is testing the right thing
|
||||||
|
- Red phase of TDD
|
||||||
|
|
||||||
|
3. **Write minimal code to pass**
|
||||||
|
- Implement spec requirement
|
||||||
|
- Don't add features not in spec
|
||||||
|
- Green phase of TDD
|
||||||
|
|
||||||
|
4. **Refactor**
|
||||||
|
- Clean up while keeping tests green
|
||||||
|
- Refactor phase of TDD
|
||||||
|
|
||||||
|
5. **Verify spec compliance**
|
||||||
|
- Does code match spec requirement?
|
||||||
|
- Check implementation against spec section
|
||||||
|
- Document any necessary deviations
|
||||||
|
|
||||||
|
**Track progress with TodoWrite:**
|
||||||
|
- Mark requirements as in_progress/completed
|
||||||
|
- One requirement at a time
|
||||||
|
- Don't skip or batch
|
||||||
|
|
||||||
|
### 5. Continuous Spec Compliance Checking
|
||||||
|
|
||||||
|
**During implementation, regularly check:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Compare implementation to spec
|
||||||
|
# For each functional requirement:
|
||||||
|
# - ✓ Implemented as specified
|
||||||
|
# - ✗ Deviation detected → document reason
|
||||||
|
```
|
||||||
|
|
||||||
|
**If deviation needed:**
|
||||||
|
- Document WHY spec cannot be followed
|
||||||
|
- Note what changed and reason
|
||||||
|
- Will trigger `sdd:evolve` during review
|
||||||
|
|
||||||
|
### 6. Code Review Against Spec
|
||||||
|
|
||||||
|
**Use `sdd:review-code` skill.**
|
||||||
|
|
||||||
|
**Review checks:**
|
||||||
|
- Code implements all spec requirements
|
||||||
|
- No extra features beyond spec
|
||||||
|
- Error handling matches spec
|
||||||
|
- Edge cases covered per spec
|
||||||
|
- Tests validate spec requirements
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
- Compliance score (% of requirements met)
|
||||||
|
- List of deviations with reasons
|
||||||
|
- Recommendations: approve or evolve
|
||||||
|
|
||||||
|
### 7. Verification Before Completion
|
||||||
|
|
||||||
|
**Use `sdd:verification-before-completion` skill.**
|
||||||
|
|
||||||
|
**Verification steps:**
|
||||||
|
1. All tests pass
|
||||||
|
2. Spec compliance validation passes
|
||||||
|
3. No unaddressed deviations
|
||||||
|
4. All success criteria met (from spec)
|
||||||
|
|
||||||
|
**If verification fails:** Fix issues before claiming completion.
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Read and understand spec
|
||||||
|
- [ ] Generate implementation plan from spec
|
||||||
|
- [ ] Set up workspace (worktree or branch)
|
||||||
|
- [ ] For each requirement: TDD cycle (test, fail, implement, pass, refactor)
|
||||||
|
- [ ] Check spec compliance continuously
|
||||||
|
- [ ] Request code review against spec
|
||||||
|
- [ ] Run verification (tests + spec compliance)
|
||||||
|
- [ ] Address any deviations (evolve spec or fix code)
|
||||||
|
- [ ] Commit implementation
|
||||||
|
- [ ] Clean up workspace
|
||||||
|
|
||||||
|
## Example Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User: Let's implement the user profile API from the spec
|
||||||
|
|
||||||
|
You: I'm using sdd:implement to build this feature from the spec.
|
||||||
|
|
||||||
|
Reading spec: specs/features/user-profile-api.md
|
||||||
|
|
||||||
|
The spec defines:
|
||||||
|
- PUT /api/users/:id/profile endpoint
|
||||||
|
- Fields: name (2-50 chars), bio (max 500), avatar_url
|
||||||
|
- Auth: JWT required
|
||||||
|
- Errors: 401, 403, 404, 422
|
||||||
|
- Success criteria: authenticated users can update profiles
|
||||||
|
|
||||||
|
Generating implementation plan from spec...
|
||||||
|
[Uses sdd:writing-plans]
|
||||||
|
|
||||||
|
Plan created: docs/plans/2025-11-10-user-profile-api-implementation.md
|
||||||
|
|
||||||
|
Plan includes:
|
||||||
|
1. Create route handler (src/api/users/profile.ts)
|
||||||
|
2. Add validation middleware (src/middleware/validate-profile.ts)
|
||||||
|
3. Update service layer (src/services/user.ts)
|
||||||
|
4. Add tests (tests/api/users/profile.test.ts)
|
||||||
|
|
||||||
|
Ready to implement with TDD. Starting...
|
||||||
|
|
||||||
|
[Uses test-driven-development]
|
||||||
|
|
||||||
|
Test 1: Should reject unauthenticated requests (Spec: Error Handling)
|
||||||
|
|
||||||
|
Writing test...
|
||||||
|
```typescript
|
||||||
|
test('PUT /api/users/:id/profile returns 401 without JWT', async () => {
|
||||||
|
const response = await request(app)
|
||||||
|
.put('/api/users/123/profile')
|
||||||
|
.send({ name: 'Test' });
|
||||||
|
|
||||||
|
expect(response.status).toBe(401);
|
||||||
|
expect(response.body.error).toBe('Authentication required');
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Running test... ❌ FAIL (expected - no auth implemented yet)
|
||||||
|
|
||||||
|
Implementing auth middleware...
|
||||||
|
[Adds JWT validation]
|
||||||
|
|
||||||
|
Running test... ✅ PASS
|
||||||
|
|
||||||
|
Spec compliance check:
|
||||||
|
✓ Matches spec requirement: "User must be authenticated with valid JWT"
|
||||||
|
✓ Error message matches spec: "Authentication required"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Test 2: Should validate name length (Spec: Functional Requirements #2)
|
||||||
|
|
||||||
|
Writing test...
|
||||||
|
```typescript
|
||||||
|
test('PUT /api/users/:id/profile validates name length', async () => {
|
||||||
|
const token = generateTestJWT({ sub: '123' });
|
||||||
|
|
||||||
|
// Too short
|
||||||
|
let response = await request(app)
|
||||||
|
.put('/api/users/123/profile')
|
||||||
|
.set('Authorization', `Bearer ${token}`)
|
||||||
|
.send({ name: 'A' });
|
||||||
|
|
||||||
|
expect(response.status).toBe(422);
|
||||||
|
|
||||||
|
// Too long
|
||||||
|
response = await request(app)
|
||||||
|
.put('/api/users/123/profile')
|
||||||
|
.set('Authorization', `Bearer ${token}`)
|
||||||
|
.send({ name: 'A'.repeat(51) });
|
||||||
|
|
||||||
|
expect(response.status).toBe(422);
|
||||||
|
|
||||||
|
// Valid
|
||||||
|
response = await request(app)
|
||||||
|
.put('/api/users/123/profile')
|
||||||
|
.set('Authorization', `Bearer ${token}`)
|
||||||
|
.send({ name: 'Valid Name' });
|
||||||
|
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Running test... ❌ FAIL
|
||||||
|
|
||||||
|
Implementing validation...
|
||||||
|
[Adds name length validation]
|
||||||
|
|
||||||
|
Running test... ✅ PASS
|
||||||
|
|
||||||
|
Spec compliance check:
|
||||||
|
✓ Matches spec: "name: string, 2-50 characters"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[Continues through all requirements...]
|
||||||
|
|
||||||
|
All requirements implemented ✓
|
||||||
|
|
||||||
|
Requesting code review against spec...
|
||||||
|
[Uses sdd:review-code]
|
||||||
|
|
||||||
|
Code Review Results:
|
||||||
|
✓ All functional requirements implemented (6/6)
|
||||||
|
✓ All error cases handled (4/4)
|
||||||
|
✓ All edge cases covered (3/3)
|
||||||
|
✓ Tests validate spec requirements
|
||||||
|
|
||||||
|
Spec Compliance: 100%
|
||||||
|
|
||||||
|
Deviations detected: 1
|
||||||
|
- Added `updated_at` field to response (not in spec)
|
||||||
|
Reason: Standard practice for update endpoints
|
||||||
|
Recommendation: Update spec (minor addition)
|
||||||
|
|
||||||
|
Running verification...
|
||||||
|
[Uses sdd:verification-before-completion]
|
||||||
|
|
||||||
|
✅ All tests passing (24/24)
|
||||||
|
✅ Spec compliance validated
|
||||||
|
⚠️ Minor deviation: updated_at field
|
||||||
|
|
||||||
|
Recommendation: Use sdd:evolve to update spec with updated_at field
|
||||||
|
|
||||||
|
You: Should I update the spec to include the updated_at field?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Handling Deviations
|
||||||
|
|
||||||
|
**When code deviates from spec:**
|
||||||
|
|
||||||
|
1. **Document the deviation** during implementation
|
||||||
|
2. **Note the reason** (technical constraint, better approach, etc.)
|
||||||
|
3. **Continue implementation** (don't block on it)
|
||||||
|
4. **Trigger evolution** during review
|
||||||
|
5. **Use `sdd:evolve`** to reconcile
|
||||||
|
|
||||||
|
**Never:**
|
||||||
|
- Silently deviate without documentation
|
||||||
|
- Force-fit code to incorrect spec
|
||||||
|
- Skip spec compliance checks
|
||||||
|
|
||||||
|
## Integration with Superpowers Skills
|
||||||
|
|
||||||
|
**This skill orchestrates:**
|
||||||
|
- `sdd:writing-plans` - Generate plan from spec
|
||||||
|
- `test-driven-development` - TDD implementation
|
||||||
|
- `sdd:review-code` - Spec compliance review
|
||||||
|
- `sdd:verification-before-completion` - Tests + spec validation
|
||||||
|
- `sdd:evolve` - If deviations need reconciliation
|
||||||
|
|
||||||
|
**Also compatible with:**
|
||||||
|
- `using-git-worktrees` - Isolated workspace
|
||||||
|
- `systematic-debugging` - If bugs found during implementation
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
**Implementation is complete when:**
|
||||||
|
- [ ] All spec requirements implemented
|
||||||
|
- [ ] All tests passing
|
||||||
|
- [ ] Spec compliance 100% (or deviations reconciled)
|
||||||
|
- [ ] Code review passed
|
||||||
|
- [ ] Verification passed
|
||||||
|
- [ ] All success criteria from spec met
|
||||||
|
|
||||||
|
## Common Pitfalls
|
||||||
|
|
||||||
|
**Avoid:**
|
||||||
|
- Implementing features not in spec
|
||||||
|
- Skipping TDD (spec doesn't mean no tests!)
|
||||||
|
- Ignoring error cases from spec
|
||||||
|
- Deviating without documentation
|
||||||
|
- Claiming completion before verification
|
||||||
|
|
||||||
|
**Instead:**
|
||||||
|
- Implement only what's in spec (YAGNI)
|
||||||
|
- TDD for every requirement
|
||||||
|
- Test all error cases from spec
|
||||||
|
- Document all deviations
|
||||||
|
- Verify before completing
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**The spec is your contract.**
|
||||||
|
|
||||||
|
- Don't add features not in spec
|
||||||
|
- Don't skip requirements from spec
|
||||||
|
- Don't ignore error cases in spec
|
||||||
|
- Don't deviate silently
|
||||||
|
|
||||||
|
**If spec is wrong or incomplete:**
|
||||||
|
- Document the issue
|
||||||
|
- Continue implementation
|
||||||
|
- Use `sdd:evolve` to fix spec
|
||||||
|
|
||||||
|
**Quality gates exist for a reason:**
|
||||||
|
- TDD ensures testability
|
||||||
|
- Code review ensures compliance
|
||||||
|
- Verification ensures correctness
|
||||||
|
|
||||||
|
**Follow the process. Ship quality code that matches the spec.**
|
||||||
350
skills/review-code/SKILL.md
Normal file
350
skills/review-code/SKILL.md
Normal file
@@ -0,0 +1,350 @@
|
|||||||
|
---
|
||||||
|
name: review-code
|
||||||
|
description: Review code against spec compliance - checks implementation matches spec requirements, identifies deviations, reports compliance score, triggers evolution if needed
|
||||||
|
---
|
||||||
|
|
||||||
|
# Code Review Against Specification
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Review code implementation against specification to ensure compliance.
|
||||||
|
|
||||||
|
**Key Difference from Standard Code Review:**
|
||||||
|
- Primary focus: **Does code match spec?**
|
||||||
|
- Secondary focus: Code quality, patterns, best practices
|
||||||
|
- Output: **Compliance score** + deviation list
|
||||||
|
- Triggers: **Spec evolution** if mismatches found
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
- After implementation complete (called by `sdd:implement`)
|
||||||
|
- Before merging/deploying code
|
||||||
|
- When validating existing code against spec
|
||||||
|
- As part of verification workflow
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Load Spec and Code
|
||||||
|
|
||||||
|
**Read specification:**
|
||||||
|
```bash
|
||||||
|
cat specs/features/[feature-name].md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Identify implementation files:**
|
||||||
|
```bash
|
||||||
|
# From implementation plan or code exploration
|
||||||
|
ls -la [implementation-files]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Review Functional Requirements
|
||||||
|
|
||||||
|
**For each functional requirement in spec:**
|
||||||
|
|
||||||
|
1. **Find implementation** in code
|
||||||
|
2. **Compare behavior**: Does code do what spec says?
|
||||||
|
3. **Check completeness**: All aspects implemented?
|
||||||
|
4. **Note deviations**: Any differences?
|
||||||
|
|
||||||
|
**Create compliance matrix:**
|
||||||
|
```
|
||||||
|
Requirement 1: [Spec text]
|
||||||
|
Implementation: [file:line]
|
||||||
|
Status: ✓ Compliant | ✗ Deviation | ? Missing
|
||||||
|
Notes: [If deviation, explain]
|
||||||
|
|
||||||
|
Requirement 2: [Spec text]
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Review Error Handling
|
||||||
|
|
||||||
|
**For each error case in spec:**
|
||||||
|
|
||||||
|
1. **Find error handling** in code
|
||||||
|
2. **Check error response**: Matches spec?
|
||||||
|
3. **Verify error codes**: Correct HTTP status / error codes?
|
||||||
|
4. **Test error messages**: Clear and helpful?
|
||||||
|
|
||||||
|
**Error handling compliance:**
|
||||||
|
```
|
||||||
|
Error Case 1: [From spec]
|
||||||
|
Implemented: Yes/No
|
||||||
|
Location: [file:line]
|
||||||
|
Response: [What code returns]
|
||||||
|
Spec Expected: [What spec says]
|
||||||
|
Status: ✓ / ✗
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Review Edge Cases
|
||||||
|
|
||||||
|
**For each edge case in spec:**
|
||||||
|
|
||||||
|
1. **Find handling** in code
|
||||||
|
2. **Check behavior**: Matches spec?
|
||||||
|
3. **Verify tests**: Edge case tested?
|
||||||
|
|
||||||
|
### 5. Check for Extra Features
|
||||||
|
|
||||||
|
**Identify code features NOT in spec:**
|
||||||
|
|
||||||
|
- Functions/endpoints not mentioned in spec
|
||||||
|
- Behavior beyond spec requirements
|
||||||
|
- Additional error handling
|
||||||
|
- Extra validations
|
||||||
|
|
||||||
|
**For each extra feature:**
|
||||||
|
- Document what it does
|
||||||
|
- Assess: Helpful addition or scope creep?
|
||||||
|
- Note for potential spec update
|
||||||
|
|
||||||
|
### 6. Calculate Compliance Score
|
||||||
|
|
||||||
|
**Formula:**
|
||||||
|
```
|
||||||
|
Compliance % = (Compliant Requirements / Total Requirements) × 100
|
||||||
|
```
|
||||||
|
|
||||||
|
**Include:**
|
||||||
|
- Functional requirements
|
||||||
|
- Error cases
|
||||||
|
- Edge cases
|
||||||
|
- Non-functional requirements
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
```
|
||||||
|
Functional: 8/8 = 100%
|
||||||
|
Error Cases: 3/4 = 75%
|
||||||
|
Edge Cases: 2/3 = 67%
|
||||||
|
Non-Functional: 3/3 = 100%
|
||||||
|
|
||||||
|
Overall: 16/18 = 89%
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Generate Report
|
||||||
|
|
||||||
|
**Report structure:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Code Review: [Feature Name]
|
||||||
|
|
||||||
|
**Spec:** specs/features/[feature].md
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
**Reviewer:** Claude (sdd:review-code)
|
||||||
|
|
||||||
|
## Compliance Summary
|
||||||
|
|
||||||
|
**Overall Score: XX%**
|
||||||
|
|
||||||
|
- Functional Requirements: X/X (XX%)
|
||||||
|
- Error Handling: X/X (XX%)
|
||||||
|
- Edge Cases: X/X (XX%)
|
||||||
|
- Non-Functional: X/X (XX%)
|
||||||
|
|
||||||
|
## Detailed Review
|
||||||
|
|
||||||
|
### Functional Requirements
|
||||||
|
|
||||||
|
#### ✓ Requirement 1: [Spec text]
|
||||||
|
**Implementation:** src/[file]:line
|
||||||
|
**Status:** Compliant
|
||||||
|
**Notes:** Correctly implemented as specified
|
||||||
|
|
||||||
|
#### ✗ Requirement 2: [Spec text]
|
||||||
|
**Implementation:** src/[file]:line
|
||||||
|
**Status:** Deviation
|
||||||
|
**Issue:** [What differs from spec]
|
||||||
|
**Impact:** [Minor/Major]
|
||||||
|
**Recommendation:** [Update spec / Fix code]
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
|
||||||
|
[Similar format for each error case]
|
||||||
|
|
||||||
|
### Edge Cases
|
||||||
|
|
||||||
|
[Similar format for each edge case]
|
||||||
|
|
||||||
|
### Extra Features (Not in Spec)
|
||||||
|
|
||||||
|
#### [Feature name]
|
||||||
|
**Location:** src/[file]:line
|
||||||
|
**Description:** [What it does]
|
||||||
|
**Assessment:** [Helpful / Scope creep]
|
||||||
|
**Recommendation:** [Add to spec / Remove]
|
||||||
|
|
||||||
|
## Code Quality Notes
|
||||||
|
|
||||||
|
[Secondary observations about code quality, patterns, etc.]
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
### Critical (Must Fix)
|
||||||
|
- [ ] [Issue requiring immediate attention]
|
||||||
|
|
||||||
|
### Spec Evolution Candidates
|
||||||
|
- [ ] [Deviation that might warrant spec update]
|
||||||
|
|
||||||
|
### Optional Improvements
|
||||||
|
- [ ] [Nice-to-have suggestions]
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
[Overall assessment]
|
||||||
|
|
||||||
|
**Next Steps:**
|
||||||
|
- If compliance < 100%: Use `sdd:evolve` to reconcile deviations
|
||||||
|
- If compliance = 100%: Proceed to verification
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Trigger Evolution if Needed
|
||||||
|
|
||||||
|
**If deviations found:**
|
||||||
|
- Present review results to user
|
||||||
|
- Recommend using `sdd:evolve`
|
||||||
|
- Don't proceed to verification until resolved
|
||||||
|
|
||||||
|
**If 100% compliant:**
|
||||||
|
- Approve for verification
|
||||||
|
- Proceed to `sdd:verification-before-completion`
|
||||||
|
|
||||||
|
## Review Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Load specification
|
||||||
|
- [ ] Identify all implementation files
|
||||||
|
- [ ] Review each functional requirement
|
||||||
|
- [ ] Review each error case
|
||||||
|
- [ ] Review each edge case
|
||||||
|
- [ ] Identify extra features not in spec
|
||||||
|
- [ ] Calculate compliance score
|
||||||
|
- [ ] Generate detailed review report
|
||||||
|
- [ ] Make recommendations
|
||||||
|
- [ ] Trigger evolution if deviations found
|
||||||
|
|
||||||
|
## Example Output
|
||||||
|
|
||||||
|
```
|
||||||
|
# Code Review: User Profile Update API
|
||||||
|
|
||||||
|
**Spec:** specs/features/user-profile-api.md
|
||||||
|
**Date:** 2025-11-10
|
||||||
|
**Reviewer:** Claude (sdd:review-code)
|
||||||
|
|
||||||
|
## Compliance Summary
|
||||||
|
|
||||||
|
**Overall Score: 94%**
|
||||||
|
|
||||||
|
- Functional Requirements: 6/6 (100%)
|
||||||
|
- Error Handling: 4/4 (100%)
|
||||||
|
- Edge Cases: 3/3 (100%)
|
||||||
|
- Non-Functional: 2/3 (67%)
|
||||||
|
|
||||||
|
## Detailed Review
|
||||||
|
|
||||||
|
### Functional Requirements
|
||||||
|
|
||||||
|
#### ✓ Requirement 1: PUT endpoint accepts requests
|
||||||
|
**Implementation:** src/api/users/profile.ts:12
|
||||||
|
**Status:** Compliant
|
||||||
|
**Notes:** Route correctly configured at PUT /api/users/:id/profile
|
||||||
|
|
||||||
|
#### ✓ Requirement 2: Validates request body
|
||||||
|
**Implementation:** src/middleware/validation/profile.ts:5
|
||||||
|
**Status:** Compliant
|
||||||
|
**Notes:** All validations match spec (name 2-50, bio max 500, avatar_url URL)
|
||||||
|
|
||||||
|
[... all ✓ ...]
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
|
||||||
|
#### ✓ Error: Missing/Invalid JWT
|
||||||
|
**Implementation:** src/middleware/auth.ts:22
|
||||||
|
**Status:** Compliant
|
||||||
|
**Spec Expected:** 401 with "Authentication required"
|
||||||
|
**Actual:** 401 with "Authentication required" ✓
|
||||||
|
|
||||||
|
[... all ✓ ...]
|
||||||
|
|
||||||
|
### Non-Functional Requirements
|
||||||
|
|
||||||
|
#### ✗ Performance: Response time < 200ms
|
||||||
|
**Status:** Not Verified
|
||||||
|
**Issue:** No performance testing implemented
|
||||||
|
**Impact:** Minor (likely meets requirement but unverified)
|
||||||
|
**Recommendation:** Add performance test or update spec to remove specific timing
|
||||||
|
|
||||||
|
### Extra Features (Not in Spec)
|
||||||
|
|
||||||
|
#### Updated timestamp in response
|
||||||
|
**Location:** src/api/users/profile.ts:45
|
||||||
|
**Description:** Adds `updated_at` timestamp to response object
|
||||||
|
**Assessment:** Helpful - standard practice for update endpoints
|
||||||
|
**Recommendation:** Add to spec (minor addition)
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
### Spec Evolution Candidates
|
||||||
|
- [ ] Add `updated_at` field to response spec (minor addition)
|
||||||
|
- [ ] Remove specific performance timing or add perf tests
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Code implementation is 94% compliant with spec. All functional requirements and error handling correctly implemented. One non-functional requirement unverified and one helpful feature added beyond spec.
|
||||||
|
|
||||||
|
**Next Steps:**
|
||||||
|
Use `sdd:evolve` to update spec with:
|
||||||
|
1. `updated_at` field (minor addition)
|
||||||
|
2. Clarify performance requirement (remove specific timing or add test)
|
||||||
|
|
||||||
|
After spec evolution, compliance will be 100%.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Assessment Criteria
|
||||||
|
|
||||||
|
### Compliant (✓)
|
||||||
|
- Code does exactly what spec says
|
||||||
|
- No deviations in behavior
|
||||||
|
- All aspects covered
|
||||||
|
|
||||||
|
### Minor Deviation (⚠)
|
||||||
|
- Small differences (naming, details)
|
||||||
|
- Non-breaking additions
|
||||||
|
- Better error messages than spec
|
||||||
|
- Typically → Update spec
|
||||||
|
|
||||||
|
### Major Deviation (✗)
|
||||||
|
- Different behavior than spec
|
||||||
|
- Missing functionality
|
||||||
|
- Wrong error handling
|
||||||
|
- Typically → Fix code or evolve spec
|
||||||
|
|
||||||
|
### Missing (?)
|
||||||
|
- Spec requires it, code doesn't have it
|
||||||
|
- Critical gap
|
||||||
|
- Must fix code
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Spec compliance is primary concern.**
|
||||||
|
|
||||||
|
This is not just code quality review - it's **spec validation**.
|
||||||
|
|
||||||
|
- Does code match spec? (Most important)
|
||||||
|
- Is code quality good? (Secondary)
|
||||||
|
- Any improvements? (Tertiary)
|
||||||
|
|
||||||
|
**100% compliance is the goal.**
|
||||||
|
|
||||||
|
- < 90%: Significant issues, fix before proceeding
|
||||||
|
- 90-99%: Minor deviations, likely spec updates
|
||||||
|
- 100%: Perfect compliance, ready for verification
|
||||||
|
|
||||||
|
**Deviations trigger evolution.**
|
||||||
|
|
||||||
|
- Don't force-fit wrong spec
|
||||||
|
- Don't ignore deviations
|
||||||
|
- Use `sdd:evolve` to reconcile
|
||||||
|
|
||||||
|
**The code and spec must tell the same story.**
|
||||||
498
skills/review-spec/SKILL.md
Normal file
498
skills/review-spec/SKILL.md
Normal file
@@ -0,0 +1,498 @@
|
|||||||
|
---
|
||||||
|
name: review-spec
|
||||||
|
description: Review specifications for soundness, completeness, and implementability - validates structure, identifies ambiguities, checks for gaps before implementation
|
||||||
|
---
|
||||||
|
|
||||||
|
# Reviewing Specifications for Soundness
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Validate specification quality before implementation begins.
|
||||||
|
|
||||||
|
A poor spec leads to confusion, rework, and spec/code drift. A sound spec enables smooth implementation.
|
||||||
|
|
||||||
|
This skill checks: completeness, clarity, implementability, and testability.
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
- After spec creation (before implementation)
|
||||||
|
- Before generating implementation plan
|
||||||
|
- When spec seems unclear or incomplete
|
||||||
|
- Periodically for important specs
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Ensure spec-kit is initialized:
|
||||||
|
|
||||||
|
{Skill: spec-kit}
|
||||||
|
|
||||||
|
If spec-kit prompts for restart, pause this workflow and resume after restart.
|
||||||
|
|
||||||
|
## Review Dimensions
|
||||||
|
|
||||||
|
### 1. Completeness
|
||||||
|
- All sections filled
|
||||||
|
- No TBD or placeholder text
|
||||||
|
- All requirements defined
|
||||||
|
- Success criteria specified
|
||||||
|
|
||||||
|
### 2. Clarity
|
||||||
|
- No ambiguous language
|
||||||
|
- Concrete, specific requirements
|
||||||
|
- Edge cases explicitly defined
|
||||||
|
- Error handling specified
|
||||||
|
|
||||||
|
### 3. Implementability
|
||||||
|
- Can generate implementation plan
|
||||||
|
- Dependencies identified
|
||||||
|
- Constraints realistic
|
||||||
|
- Scope manageable
|
||||||
|
|
||||||
|
### 4. Testability
|
||||||
|
- Success criteria measurable
|
||||||
|
- Requirements verifiable
|
||||||
|
- Acceptance criteria clear
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Load and Read Spec
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat specs/features/[feature-name].md
|
||||||
|
```
|
||||||
|
|
||||||
|
Read thoroughly, take notes on issues.
|
||||||
|
|
||||||
|
### 2. Check Structure
|
||||||
|
|
||||||
|
**Required sections (should exist):**
|
||||||
|
- [ ] Purpose/Overview
|
||||||
|
- [ ] Functional Requirements
|
||||||
|
- [ ] Success Criteria
|
||||||
|
- [ ] Error Handling
|
||||||
|
|
||||||
|
**Recommended sections:**
|
||||||
|
- [ ] Non-Functional Requirements
|
||||||
|
- [ ] Edge Cases
|
||||||
|
- [ ] Dependencies
|
||||||
|
- [ ] Constraints
|
||||||
|
- [ ] Out of Scope
|
||||||
|
|
||||||
|
**If sections missing:**
|
||||||
|
- Note which ones
|
||||||
|
- Assess if truly needed for this spec
|
||||||
|
- Recommend additions
|
||||||
|
|
||||||
|
### 3. Review Completeness
|
||||||
|
|
||||||
|
**For each section, check:**
|
||||||
|
|
||||||
|
**Purpose:**
|
||||||
|
- [ ] Clearly states why feature exists
|
||||||
|
- [ ] Describes problem being solved
|
||||||
|
- [ ] Avoids implementation details
|
||||||
|
|
||||||
|
**Functional Requirements:**
|
||||||
|
- [ ] Numbered/listed clearly
|
||||||
|
- [ ] Each requirement is specific
|
||||||
|
- [ ] No "TBD" or placeholders
|
||||||
|
- [ ] All aspects covered
|
||||||
|
|
||||||
|
**Success Criteria:**
|
||||||
|
- [ ] Measurable outcomes defined
|
||||||
|
- [ ] Clear completion indicators
|
||||||
|
- [ ] Testable assertions
|
||||||
|
|
||||||
|
**Error Handling:**
|
||||||
|
- [ ] All error cases identified
|
||||||
|
- [ ] Handling approach specified
|
||||||
|
- [ ] Error messages/codes defined
|
||||||
|
|
||||||
|
**Edge Cases:**
|
||||||
|
- [ ] Boundary conditions listed
|
||||||
|
- [ ] Expected behavior specified
|
||||||
|
- [ ] Not marked as "TBD"
|
||||||
|
|
||||||
|
### 4. Check for Ambiguities
|
||||||
|
|
||||||
|
**Red flag words/phrases:**
|
||||||
|
- "should" (vs "must")
|
||||||
|
- "might", "could", "probably"
|
||||||
|
- "fast", "slow" (without metrics)
|
||||||
|
- "user-friendly" (vague)
|
||||||
|
- "handle appropriately" (non-specific)
|
||||||
|
- "etc." (incomplete list)
|
||||||
|
- "similar to..." (unclear)
|
||||||
|
|
||||||
|
**For each ambiguity:**
|
||||||
|
- Identify the vague requirement
|
||||||
|
- Note what's unclear
|
||||||
|
- Suggest specific alternative
|
||||||
|
|
||||||
|
### 5. Validate Implementability
|
||||||
|
|
||||||
|
**Ask:**
|
||||||
|
- Can I generate an implementation plan from this?
|
||||||
|
- Are file locations/components identifiable?
|
||||||
|
- Are dependencies clear?
|
||||||
|
- Is scope reasonable?
|
||||||
|
|
||||||
|
**Check for:**
|
||||||
|
- Unknown dependencies
|
||||||
|
- Unrealistic constraints
|
||||||
|
- Scope too large
|
||||||
|
- Conflicting requirements
|
||||||
|
|
||||||
|
### 6. Assess Testability
|
||||||
|
|
||||||
|
**For each requirement:**
|
||||||
|
- How will this be tested?
|
||||||
|
- Is the outcome verifiable?
|
||||||
|
- Can success be measured?
|
||||||
|
|
||||||
|
**For success criteria:**
|
||||||
|
- Are they specific enough to test?
|
||||||
|
- Can they be automated?
|
||||||
|
- Are they objective (not subjective)?
|
||||||
|
|
||||||
|
### 7. Check Against Constitution
|
||||||
|
|
||||||
|
**If constitution exists:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat specs/constitution.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Validate:**
|
||||||
|
- Does spec follow project principles?
|
||||||
|
- Are patterns consistent?
|
||||||
|
- Does error handling match standards?
|
||||||
|
- Are architectural decisions aligned?
|
||||||
|
|
||||||
|
**Note any violations with reasoning.**
|
||||||
|
|
||||||
|
### 8. Generate Review Report
|
||||||
|
|
||||||
|
**Report structure:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Spec Review: [Feature Name]
|
||||||
|
|
||||||
|
**Spec:** specs/features/[feature].md
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
**Reviewer:** Claude (sdd:review-spec)
|
||||||
|
|
||||||
|
## Overall Assessment
|
||||||
|
|
||||||
|
**Status:** ✅ SOUND / ⚠️ NEEDS WORK / ❌ MAJOR ISSUES
|
||||||
|
|
||||||
|
**Summary:** [1-2 sentence overall assessment]
|
||||||
|
|
||||||
|
## Completeness: [Score/5]
|
||||||
|
|
||||||
|
### Structure
|
||||||
|
- [✓/✗] All required sections present
|
||||||
|
- [✓/✗] Recommended sections included
|
||||||
|
- [✓/✗] No placeholder text
|
||||||
|
|
||||||
|
### Coverage
|
||||||
|
- [✓/✗] All functional requirements defined
|
||||||
|
- [✓/✗] Error cases identified
|
||||||
|
- [✓/✗] Edge cases covered
|
||||||
|
- [✓/✗] Success criteria specified
|
||||||
|
|
||||||
|
**Issues:**
|
||||||
|
- [List any completeness issues]
|
||||||
|
|
||||||
|
## Clarity: [Score/5]
|
||||||
|
|
||||||
|
### Language Quality
|
||||||
|
- [✓/✗] No ambiguous language
|
||||||
|
- [✓/✗] Requirements are specific
|
||||||
|
- [✓/✗] No vague terms
|
||||||
|
|
||||||
|
**Ambiguities Found:**
|
||||||
|
1. [Quote ambiguous text]
|
||||||
|
- Issue: [What's unclear]
|
||||||
|
- Suggestion: [Specific alternative]
|
||||||
|
|
||||||
|
## Implementability: [Score/5]
|
||||||
|
|
||||||
|
### Plan Generation
|
||||||
|
- [✓/✗] Can generate implementation plan
|
||||||
|
- [✓/✗] Dependencies identified
|
||||||
|
- [✓/✗] Constraints realistic
|
||||||
|
- [✓/✗] Scope manageable
|
||||||
|
|
||||||
|
**Issues:**
|
||||||
|
- [List any implementability issues]
|
||||||
|
|
||||||
|
## Testability: [Score/5]
|
||||||
|
|
||||||
|
### Verification
|
||||||
|
- [✓/✗] Success criteria measurable
|
||||||
|
- [✓/✗] Requirements verifiable
|
||||||
|
- [✓/✗] Acceptance criteria clear
|
||||||
|
|
||||||
|
**Issues:**
|
||||||
|
- [List any testability issues]
|
||||||
|
|
||||||
|
## Constitution Alignment
|
||||||
|
|
||||||
|
[If constitution exists]
|
||||||
|
|
||||||
|
- [✓/✗] Follows project principles
|
||||||
|
- [✓/✗] Patterns consistent
|
||||||
|
- [✓/✗] Error handling aligned
|
||||||
|
|
||||||
|
**Violations:**
|
||||||
|
- [List any violations]
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
### Critical (Must Fix Before Implementation)
|
||||||
|
- [ ] [Critical issue 1]
|
||||||
|
- [ ] [Critical issue 2]
|
||||||
|
|
||||||
|
### Important (Should Fix)
|
||||||
|
- [ ] [Important issue 1]
|
||||||
|
|
||||||
|
### Optional (Nice to Have)
|
||||||
|
- [ ] [Optional improvement 1]
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
[Final assessment and recommendation]
|
||||||
|
|
||||||
|
**Ready for implementation:** Yes / No / After fixes
|
||||||
|
|
||||||
|
**Next steps:**
|
||||||
|
[What should be done]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9. Make Recommendation
|
||||||
|
|
||||||
|
**If sound (minor issues only):**
|
||||||
|
- ✅ Ready for implementation
|
||||||
|
- Proceed with `sdd:implement`
|
||||||
|
|
||||||
|
**If needs work (important issues):**
|
||||||
|
- ⚠️ Fix issues before implementing
|
||||||
|
- Update spec, re-review
|
||||||
|
|
||||||
|
**If major issues:**
|
||||||
|
- ❌ Not ready for implementation
|
||||||
|
- Significant rework needed
|
||||||
|
- May need re-brainstorming
|
||||||
|
|
||||||
|
## Review Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Load and read spec thoroughly
|
||||||
|
- [ ] Check structure (all sections present)
|
||||||
|
- [ ] Review completeness (no TBD, all covered)
|
||||||
|
- [ ] Identify ambiguities (vague language)
|
||||||
|
- [ ] Validate implementability (can plan from this)
|
||||||
|
- [ ] Assess testability (can verify requirements)
|
||||||
|
- [ ] Check constitution alignment (if exists)
|
||||||
|
- [ ] Generate review report
|
||||||
|
- [ ] Make recommendation (ready/needs work/major issues)
|
||||||
|
|
||||||
|
## Example: Sound Spec
|
||||||
|
|
||||||
|
```
|
||||||
|
# Spec Review: User Profile Update API
|
||||||
|
|
||||||
|
**Spec:** specs/features/user-profile-api.md
|
||||||
|
**Status:** ✅ SOUND
|
||||||
|
|
||||||
|
## Overall Assessment
|
||||||
|
|
||||||
|
Specification is well-written, complete, and ready for implementation.
|
||||||
|
Minor suggestions for improvement but no blocking issues.
|
||||||
|
|
||||||
|
## Completeness: 5/5
|
||||||
|
|
||||||
|
✓ All required sections present
|
||||||
|
✓ All functional requirements clearly defined (6 requirements)
|
||||||
|
✓ All error cases identified (4 cases)
|
||||||
|
✓ All edge cases covered (3 cases)
|
||||||
|
✓ Success criteria specified and measurable
|
||||||
|
|
||||||
|
## Clarity: 4.5/5
|
||||||
|
|
||||||
|
✓ Requirements are specific and unambiguous
|
||||||
|
✓ Error handling clearly defined
|
||||||
|
⚠️ One minor ambiguity (see below)
|
||||||
|
|
||||||
|
**Ambiguities Found:**
|
||||||
|
1. "Response should be fast"
|
||||||
|
- Issue: "Fast" is subjective
|
||||||
|
- Suggestion: Specify "Response time < 200ms" or remove
|
||||||
|
|
||||||
|
## Implementability: 5/5
|
||||||
|
|
||||||
|
✓ Can generate detailed implementation plan
|
||||||
|
✓ All dependencies identified (JWT auth, database)
|
||||||
|
✓ Constraints are realistic
|
||||||
|
✓ Scope is manageable (single endpoint)
|
||||||
|
|
||||||
|
## Testability: 5/5
|
||||||
|
|
||||||
|
✓ All success criteria measurable
|
||||||
|
✓ Each requirement verifiable through tests
|
||||||
|
✓ Clear acceptance criteria
|
||||||
|
|
||||||
|
## Constitution Alignment
|
||||||
|
|
||||||
|
✓ Follows RESTful conventions (from constitution)
|
||||||
|
✓ Error handling matches project patterns
|
||||||
|
✓ Auth requirements aligned with standards
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
### Important (Should Fix)
|
||||||
|
- [ ] Clarify "fast" response requirement (specify < 200ms or remove)
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
- [ ] Consider adding rate limiting requirement
|
||||||
|
- [ ] Specify audit logging if required by project
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Excellent spec, ready for implementation after minor clarification on
|
||||||
|
performance requirement.
|
||||||
|
|
||||||
|
**Ready for implementation:** Yes (after performance clarification)
|
||||||
|
|
||||||
|
**Next steps:** Clarify "fast" requirement, then proceed to sdd:implement
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example: Needs Work
|
||||||
|
|
||||||
|
```
|
||||||
|
# Spec Review: Real-time Notifications
|
||||||
|
|
||||||
|
**Spec:** specs/features/real-time-notifications.md
|
||||||
|
**Status:** ⚠️ NEEDS WORK
|
||||||
|
|
||||||
|
## Overall Assessment
|
||||||
|
|
||||||
|
Specification has good foundation but several important gaps that will
|
||||||
|
cause confusion during implementation.
|
||||||
|
|
||||||
|
## Completeness: 3/5
|
||||||
|
|
||||||
|
✓ Purpose clearly stated
|
||||||
|
✗ Non-functional requirements missing
|
||||||
|
✗ Error handling incomplete
|
||||||
|
⚠️ Edge cases partially defined
|
||||||
|
|
||||||
|
**Issues:**
|
||||||
|
- No specification of real-time latency requirements
|
||||||
|
- Database storage requirements unclear
|
||||||
|
- Error recovery not defined
|
||||||
|
- Scalability requirements missing
|
||||||
|
|
||||||
|
## Clarity: 3/5
|
||||||
|
|
||||||
|
**Ambiguities Found:**
|
||||||
|
1. "Notifications should appear in real-time"
|
||||||
|
- Issue: "Real-time" undefined (< 100ms? < 1s? < 5s?)
|
||||||
|
- Suggestion: Specify exact latency requirement
|
||||||
|
|
||||||
|
2. "Handle notification delivery failures appropriately"
|
||||||
|
- Issue: "Appropriately" is non-specific
|
||||||
|
- Suggestion: Define retry logic, fallback, user notification
|
||||||
|
|
||||||
|
3. "Support many users"
|
||||||
|
- Issue: "Many" is vague
|
||||||
|
- Suggestion: Specify target (100? 1000? 10000?)
|
||||||
|
|
||||||
|
## Implementability: 2/5
|
||||||
|
|
||||||
|
✗ Cannot generate complete implementation plan
|
||||||
|
✗ Technology stack not specified (WebSocket? SSE? Polling?)
|
||||||
|
✗ Storage mechanism unclear
|
||||||
|
|
||||||
|
**Issues:**
|
||||||
|
- Is this WebSocket or polling? Spec doesn't say
|
||||||
|
- Where are notifications stored? For how long?
|
||||||
|
- What happens when user offline?
|
||||||
|
- No mention of infrastructure requirements
|
||||||
|
|
||||||
|
## Testability: 3/5
|
||||||
|
|
||||||
|
⚠️ Some criteria measurable, others vague
|
||||||
|
|
||||||
|
**Issues:**
|
||||||
|
- "Users receive notifications quickly" - not measurable
|
||||||
|
- "System handles failures" - no specific test criteria
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
### Critical (Must Fix Before Implementation)
|
||||||
|
- [ ] Define exact real-time latency requirement (< Xms)
|
||||||
|
- [ ] Specify technology (WebSocket vs polling vs SSE)
|
||||||
|
- [ ] Define notification storage (where, how long)
|
||||||
|
- [ ] Specify error handling and retry logic
|
||||||
|
- [ ] Define scalability target (number of users)
|
||||||
|
|
||||||
|
### Important (Should Fix)
|
||||||
|
- [ ] Add detailed error cases
|
||||||
|
- [ ] Specify offline handling
|
||||||
|
- [ ] Define notification expiration
|
||||||
|
- [ ] Add infrastructure requirements
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Spec has good intent but lacks critical technical details needed for
|
||||||
|
implementation. Requires significant expansion before coding can begin.
|
||||||
|
|
||||||
|
**Ready for implementation:** No
|
||||||
|
|
||||||
|
**Next steps:**
|
||||||
|
1. Address all critical issues
|
||||||
|
2. Re-review spec
|
||||||
|
3. Then proceed to implementation
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quality Standards
|
||||||
|
|
||||||
|
**A sound spec has:**
|
||||||
|
- All sections complete
|
||||||
|
- No ambiguous language
|
||||||
|
- Specific, measurable requirements
|
||||||
|
- Identified dependencies
|
||||||
|
- Realistic constraints
|
||||||
|
- Clear error handling
|
||||||
|
- Defined edge cases
|
||||||
|
- Testable success criteria
|
||||||
|
|
||||||
|
**A poor spec has:**
|
||||||
|
- Missing sections
|
||||||
|
- Vague language
|
||||||
|
- Unmeasurable requirements
|
||||||
|
- Unknown dependencies
|
||||||
|
- Unrealistic constraints
|
||||||
|
- Unclear error handling
|
||||||
|
- Ignored edge cases
|
||||||
|
- Subjective criteria
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Reviewing specs saves time in implementation.**
|
||||||
|
|
||||||
|
- 1 hour reviewing spec saves 10 hours debugging
|
||||||
|
- Ambiguities caught early prevent rework
|
||||||
|
- Complete specs enable smooth TDD
|
||||||
|
- Sound specs reduce spec/code drift
|
||||||
|
|
||||||
|
**Be thorough but not pedantic:**
|
||||||
|
- Flag real issues, not nitpicks
|
||||||
|
- Focus on what blocks implementation
|
||||||
|
- Suggest specific improvements
|
||||||
|
- Balance perfection with pragmatism
|
||||||
|
|
||||||
|
**The goal is implementability, not perfection.**
|
||||||
371
skills/spec-kit/SKILL.md
Normal file
371
skills/spec-kit/SKILL.md
Normal file
@@ -0,0 +1,371 @@
|
|||||||
|
---
|
||||||
|
name: spec-kit
|
||||||
|
description: Technical integration layer for spec-kit CLI - handles automatic initialization, installation validation, project setup, and ensures proper file/directory layout. Called by all SDD workflow skills.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Spec-Kit Technical Integration
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This skill is the **single source of truth** for all spec-kit technical integration:
|
||||||
|
- Automatic initialization and setup
|
||||||
|
- Installation validation
|
||||||
|
- Project structure management
|
||||||
|
- CLI command wrappers
|
||||||
|
- Layout and file path enforcement
|
||||||
|
|
||||||
|
**This is a low-level technical skill.** Workflow skills (brainstorm, implement, etc.) call this skill for setup, then proceed with their specific workflows.
|
||||||
|
|
||||||
|
## Automatic Initialization Protocol
|
||||||
|
|
||||||
|
**IMPORTANT: This runs automatically when called by any workflow skill.**
|
||||||
|
|
||||||
|
Every SDD workflow skill calls this skill first via `{Skill: spec-kit}`. When called, execute this initialization sequence once per session.
|
||||||
|
|
||||||
|
### Session Tracking
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check if already initialized this session
|
||||||
|
# Use an environment variable or similar mechanism
|
||||||
|
# If "sdd_init_done" flag is set, skip to step 4
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 1: Check spec-kit CLI Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
which speckit
|
||||||
|
```
|
||||||
|
|
||||||
|
**If NOT found:**
|
||||||
|
```
|
||||||
|
❌ ERROR: spec-kit is required but not installed
|
||||||
|
|
||||||
|
spec-kit provides the templates, scripts, and tooling for SDD workflows.
|
||||||
|
|
||||||
|
Installation:
|
||||||
|
1. Visit: https://github.com/github/spec-kit
|
||||||
|
2. Follow installation instructions
|
||||||
|
3. Ensure 'speckit' is in your PATH
|
||||||
|
4. Verify: run 'which speckit'
|
||||||
|
|
||||||
|
After installation, restart this workflow.
|
||||||
|
```
|
||||||
|
|
||||||
|
**STOP workflow.** Do not proceed without spec-kit.
|
||||||
|
|
||||||
|
**If found:**
|
||||||
|
```bash
|
||||||
|
# Get version for logging
|
||||||
|
speckit --version
|
||||||
|
```
|
||||||
|
|
||||||
|
Proceed to step 2.
|
||||||
|
|
||||||
|
### Step 2: Check Project Initialization
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check if .specify/ directory exists
|
||||||
|
[ -d .specify ] && echo "initialized" || echo "not-initialized"
|
||||||
|
```
|
||||||
|
|
||||||
|
**If NOT initialized:**
|
||||||
|
|
||||||
|
Display message:
|
||||||
|
```
|
||||||
|
spec-kit is installed ✓
|
||||||
|
|
||||||
|
This project needs initialization...
|
||||||
|
Running: speckit init
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute initialization:
|
||||||
|
```bash
|
||||||
|
speckit init
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check for errors:**
|
||||||
|
- Permission denied → suggest running with proper permissions
|
||||||
|
- Command failed → display error and suggest manual init
|
||||||
|
- Success → proceed to step 3
|
||||||
|
|
||||||
|
**If already initialized:**
|
||||||
|
Skip to step 3.
|
||||||
|
|
||||||
|
### Step 3: Check for New Commands (Restart Detection)
|
||||||
|
|
||||||
|
After `speckit init` runs, check if local commands were installed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check if spec-kit installed Claude Code commands
|
||||||
|
if [ -d .claude/commands ]; then
|
||||||
|
ls .claude/commands/ | grep -q speckit
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "commands-installed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
**If commands were installed:**
|
||||||
|
|
||||||
|
Display restart prompt:
|
||||||
|
```
|
||||||
|
✅ Project initialized successfully!
|
||||||
|
|
||||||
|
⚠️ RESTART REQUIRED ⚠️
|
||||||
|
|
||||||
|
spec-kit has installed local slash commands in:
|
||||||
|
.claude/commands/speckit.*
|
||||||
|
|
||||||
|
To load these new commands, please:
|
||||||
|
1. Save your work
|
||||||
|
2. Close this conversation
|
||||||
|
3. Restart Claude Code application
|
||||||
|
4. Return to this project
|
||||||
|
5. Continue your workflow
|
||||||
|
|
||||||
|
After restart, you'll have access to:
|
||||||
|
- /sdd:* commands (from this plugin)
|
||||||
|
- /speckit.* commands (from local spec-kit installation)
|
||||||
|
|
||||||
|
[Workflow paused - resume after restart]
|
||||||
|
```
|
||||||
|
|
||||||
|
**STOP workflow.** User must restart before continuing.
|
||||||
|
|
||||||
|
**If no new commands installed:**
|
||||||
|
Proceed to step 4.
|
||||||
|
|
||||||
|
### Step 4: Verify Installation
|
||||||
|
|
||||||
|
Quick sanity check:
|
||||||
|
```bash
|
||||||
|
# Verify key files exist
|
||||||
|
[ -f .specify/templates/spec-template.md ] && \
|
||||||
|
[ -f .specify/scripts/bash/common.sh ] && \
|
||||||
|
echo "verified" || echo "corrupt"
|
||||||
|
```
|
||||||
|
|
||||||
|
**If verification fails:**
|
||||||
|
```
|
||||||
|
❌ ERROR: .specify/ exists but appears incomplete
|
||||||
|
|
||||||
|
This may be due to a failed initialization.
|
||||||
|
|
||||||
|
Please run: speckit init --force
|
||||||
|
|
||||||
|
Then restart this workflow.
|
||||||
|
```
|
||||||
|
|
||||||
|
**STOP workflow.**
|
||||||
|
|
||||||
|
**If verification succeeds:**
|
||||||
|
- Set session flag: "sdd_init_done"
|
||||||
|
- Return success to calling skill
|
||||||
|
- Calling skill continues with its workflow
|
||||||
|
|
||||||
|
## Layout Validation
|
||||||
|
|
||||||
|
Use these helpers to validate spec-kit file structure:
|
||||||
|
|
||||||
|
### Check Constitution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Constitution location (per spec-kit convention)
|
||||||
|
CONSTITUTION=".specify/memory/constitution.md"
|
||||||
|
|
||||||
|
if [ -f "$CONSTITUTION" ]; then
|
||||||
|
echo "constitution-exists"
|
||||||
|
else
|
||||||
|
echo "no-constitution"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Get Feature Spec Path
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Validate feature spec path follows spec-kit layout
|
||||||
|
# Expected: specs/NNNN-feature-name/spec.md
|
||||||
|
# Or: specs/features/feature-name.md
|
||||||
|
|
||||||
|
validate_spec_path() {
|
||||||
|
local spec_path=$1
|
||||||
|
|
||||||
|
# Check if follows spec-kit conventions
|
||||||
|
if [[ $spec_path =~ ^specs/[0-9]+-[a-z-]+/spec\.md$ ]] || \
|
||||||
|
[[ $spec_path =~ ^specs/features/[a-z-]+\.md$ ]]; then
|
||||||
|
echo "valid"
|
||||||
|
else
|
||||||
|
echo "invalid: spec must be in specs/ directory with proper naming"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Get Plan Path
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Plan location (per spec-kit convention)
|
||||||
|
# Expected: specs/NNNN-feature-name/docs/plan.md
|
||||||
|
|
||||||
|
get_plan_path() {
|
||||||
|
local feature_dir=$1 # e.g., "specs/0001-user-auth"
|
||||||
|
echo "$feature_dir/docs/plan.md"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ensure Directory Structure
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create spec-kit compliant feature structure
|
||||||
|
ensure_feature_structure() {
|
||||||
|
local feature_dir=$1 # e.g., "specs/0001-user-auth"
|
||||||
|
|
||||||
|
mkdir -p "$feature_dir/docs"
|
||||||
|
mkdir -p "$feature_dir/checklists"
|
||||||
|
mkdir -p "$feature_dir/contracts"
|
||||||
|
|
||||||
|
echo "created: $feature_dir structure"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Spec-Kit CLI Commands
|
||||||
|
|
||||||
|
Wrapper helpers for common spec-kit commands:
|
||||||
|
|
||||||
|
### Initialize Project
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Already covered in automatic initialization
|
||||||
|
speckit init
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create Specification
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Interactive spec creation
|
||||||
|
speckit specify [feature-description]
|
||||||
|
|
||||||
|
# Uses template from .specify/templates/spec-template.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Validate Specification
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Validate spec format and structure
|
||||||
|
speckit validate <spec-file>
|
||||||
|
|
||||||
|
# Example:
|
||||||
|
speckit validate specs/0001-user-auth/spec.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Generate Plan
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Generate implementation plan from spec
|
||||||
|
speckit plan <spec-file>
|
||||||
|
|
||||||
|
# Example:
|
||||||
|
speckit plan specs/0001-user-auth/spec.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create Constitution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Interactive constitution creation
|
||||||
|
speckit constitution
|
||||||
|
|
||||||
|
# Creates .specify/memory/constitution.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
### spec-kit CLI Errors
|
||||||
|
|
||||||
|
**Command not found after installation:**
|
||||||
|
- Check PATH configuration
|
||||||
|
- Suggest shell restart
|
||||||
|
- Provide which speckit output
|
||||||
|
|
||||||
|
**Init fails:**
|
||||||
|
- Check write permissions
|
||||||
|
- Check disk space
|
||||||
|
- Suggest manual troubleshooting
|
||||||
|
|
||||||
|
**Validation fails:**
|
||||||
|
- Display validation errors
|
||||||
|
- Suggest fixes based on error type
|
||||||
|
- Reference spec template
|
||||||
|
|
||||||
|
### File System Errors
|
||||||
|
|
||||||
|
**Permission denied:**
|
||||||
|
```
|
||||||
|
Cannot write to project directory.
|
||||||
|
|
||||||
|
Please ensure you have write permissions:
|
||||||
|
chmod +w .
|
||||||
|
```
|
||||||
|
|
||||||
|
**Path not found:**
|
||||||
|
```
|
||||||
|
Expected file not found: <path>
|
||||||
|
|
||||||
|
This suggests incomplete initialization.
|
||||||
|
Run: speckit init --force
|
||||||
|
```
|
||||||
|
|
||||||
|
## Integration Points
|
||||||
|
|
||||||
|
**Called by these workflow skills:**
|
||||||
|
- sdd:brainstorm (at start)
|
||||||
|
- sdd:implement (at start)
|
||||||
|
- sdd:evolve (at start)
|
||||||
|
- sdd:constitution (at start)
|
||||||
|
- sdd:review-spec (at start)
|
||||||
|
- All workflow skills that need spec-kit
|
||||||
|
|
||||||
|
**Calls:**
|
||||||
|
- spec-kit CLI (external command)
|
||||||
|
- File system operations
|
||||||
|
- No other skills (this is a leaf skill)
|
||||||
|
|
||||||
|
## Session Management
|
||||||
|
|
||||||
|
**First call in session:**
|
||||||
|
- Run full initialization protocol
|
||||||
|
- Check installation, project, commands
|
||||||
|
- Prompt restart if needed
|
||||||
|
- Set session flag
|
||||||
|
|
||||||
|
**Subsequent calls in session:**
|
||||||
|
- Check session flag
|
||||||
|
- Skip initialization if already done
|
||||||
|
- Optionally re-verify critical paths
|
||||||
|
- Return success immediately
|
||||||
|
|
||||||
|
**Session reset:**
|
||||||
|
- New conversation = new session
|
||||||
|
- Re-run initialization protocol
|
||||||
|
- Ensures project state is current
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**This skill is infrastructure, not workflow.**
|
||||||
|
|
||||||
|
- Don't make decisions about WHAT to build
|
||||||
|
- Don't route to other workflow skills
|
||||||
|
- Just ensure spec-kit is ready to use
|
||||||
|
- Validate paths and structure
|
||||||
|
- Handle technical errors
|
||||||
|
|
||||||
|
**Workflow skills handle:**
|
||||||
|
- What to create (specs, plans, code)
|
||||||
|
- When to use which tool
|
||||||
|
- Process discipline and quality gates
|
||||||
|
|
||||||
|
**This skill handles:**
|
||||||
|
- Is spec-kit installed?
|
||||||
|
- Is project initialized?
|
||||||
|
- Do files exist in correct locations?
|
||||||
|
- Are commands available?
|
||||||
|
|
||||||
|
**The goal: Zero-config, automatic, invisible setup.**
|
||||||
447
skills/spec-refactoring/SKILL.md
Normal file
447
skills/spec-refactoring/SKILL.md
Normal file
@@ -0,0 +1,447 @@
|
|||||||
|
---
|
||||||
|
name: spec-refactoring
|
||||||
|
description: Consolidate and improve evolved specs - identifies inconsistencies, removes redundancy, improves structure while maintaining feature coverage
|
||||||
|
---
|
||||||
|
|
||||||
|
# Specification Refactoring
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Refactor specifications that have grown organically to improve clarity, consistency, and maintainability.
|
||||||
|
|
||||||
|
As specs evolve through `sdd:evolve`, they can accumulate:
|
||||||
|
- Inconsistencies
|
||||||
|
- Redundancies
|
||||||
|
- Unclear sections
|
||||||
|
- Poor organization
|
||||||
|
|
||||||
|
This skill consolidates and improves specs while ensuring all implemented features remain covered.
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
- Spec has evolved significantly through multiple updates
|
||||||
|
- Multiple related specs have redundancy
|
||||||
|
- Spec is difficult to understand or implement from
|
||||||
|
- Before major feature work on legacy spec
|
||||||
|
- Periodic maintenance (quarterly review)
|
||||||
|
|
||||||
|
**Warning:** Never refactor specs during active implementation. Wait until stable.
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Analyze Current State
|
||||||
|
|
||||||
|
**Read all related specs:**
|
||||||
|
```bash
|
||||||
|
# Single spec
|
||||||
|
cat specs/features/[feature].md
|
||||||
|
|
||||||
|
# Multiple related specs
|
||||||
|
cat specs/features/user-*.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Document current issues:**
|
||||||
|
- Inconsistencies (conflicting requirements)
|
||||||
|
- Redundancies (duplicate requirements)
|
||||||
|
- Unclear sections (ambiguities)
|
||||||
|
- Poor structure (hard to navigate)
|
||||||
|
- Outdated sections (no longer relevant)
|
||||||
|
|
||||||
|
### 2. Review Implementation
|
||||||
|
|
||||||
|
**Check what's actually implemented:**
|
||||||
|
```bash
|
||||||
|
# Find implementation
|
||||||
|
rg "[feature-related-terms]" src/
|
||||||
|
|
||||||
|
# Check tests
|
||||||
|
rg "[feature-related-terms]" tests/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Critical:** Refactored spec MUST cover all implemented features.
|
||||||
|
|
||||||
|
**Create coverage map:**
|
||||||
|
```
|
||||||
|
Implemented Feature 1 → Spec Requirement X
|
||||||
|
Implemented Feature 2 → Spec Requirement Y
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
If implementation exists without spec coverage, ADD it during refactor.
|
||||||
|
|
||||||
|
### 3. Identify Consolidation Opportunities
|
||||||
|
|
||||||
|
**Look for:**
|
||||||
|
|
||||||
|
**Redundant requirements:**
|
||||||
|
- Same requirement stated multiple times
|
||||||
|
- Similar requirements that could merge
|
||||||
|
- Duplicate error handling
|
||||||
|
|
||||||
|
**Inconsistent terminology:**
|
||||||
|
- Same concept called different names
|
||||||
|
- Inconsistent capitalization
|
||||||
|
- Different formats for similar things
|
||||||
|
|
||||||
|
**Scattered related requirements:**
|
||||||
|
- Auth requirements in multiple places
|
||||||
|
- Error handling spread throughout
|
||||||
|
- Related features not grouped
|
||||||
|
|
||||||
|
### 4. Design Improved Structure
|
||||||
|
|
||||||
|
**Better organization:**
|
||||||
|
- Group related requirements
|
||||||
|
- Logical section order
|
||||||
|
- Consistent formatting
|
||||||
|
- Clear hierarchy
|
||||||
|
|
||||||
|
**Example improvement:**
|
||||||
|
|
||||||
|
**Before:**
|
||||||
|
```markdown
|
||||||
|
## Requirements
|
||||||
|
- User login
|
||||||
|
- Password validation
|
||||||
|
- Email validation
|
||||||
|
- Session management
|
||||||
|
- Logout
|
||||||
|
- Password reset
|
||||||
|
- Email verification
|
||||||
|
```
|
||||||
|
|
||||||
|
**After:**
|
||||||
|
```markdown
|
||||||
|
## Authentication Requirements
|
||||||
|
|
||||||
|
### User Registration
|
||||||
|
- Email validation
|
||||||
|
- Email verification
|
||||||
|
- Password validation
|
||||||
|
|
||||||
|
### Session Management
|
||||||
|
- User login
|
||||||
|
- Session creation
|
||||||
|
- Logout
|
||||||
|
- Session expiration
|
||||||
|
|
||||||
|
### Password Management
|
||||||
|
- Password reset
|
||||||
|
- Password change
|
||||||
|
- Password strength requirements
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Refactor Spec
|
||||||
|
|
||||||
|
**Steps:**
|
||||||
|
|
||||||
|
1. **Create refactored version** (new file or branch)
|
||||||
|
2. **Reorganize sections** for clarity
|
||||||
|
3. **Consolidate redundancies**
|
||||||
|
4. **Standardize terminology**
|
||||||
|
5. **Improve requirement clarity**
|
||||||
|
6. **Add missing coverage** (if implementation exists)
|
||||||
|
7. **Remove obsolete sections** (if truly no longer relevant)
|
||||||
|
|
||||||
|
**Throughout:** Maintain traceability to old spec
|
||||||
|
|
||||||
|
### 6. Validate Refactored Spec
|
||||||
|
|
||||||
|
**Check:**
|
||||||
|
- [ ] All implemented features covered
|
||||||
|
- [ ] No requirements lost
|
||||||
|
- [ ] Terminology consistent
|
||||||
|
- [ ] Structure logical
|
||||||
|
- [ ] No new ambiguities introduced
|
||||||
|
|
||||||
|
**Use `sdd:review-spec`** on refactored version.
|
||||||
|
|
||||||
|
### 7. Create Changelog
|
||||||
|
|
||||||
|
**Document changes:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Spec Refactoring Changelog
|
||||||
|
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
**Previous Version:** [link or commit]
|
||||||
|
|
||||||
|
### Changes Made
|
||||||
|
|
||||||
|
**Structural Changes:**
|
||||||
|
- Reorganized requirements into logical groups
|
||||||
|
- Moved error handling to dedicated section
|
||||||
|
- Created sub-sections for clarity
|
||||||
|
|
||||||
|
**Consolidated Requirements:**
|
||||||
|
- Merged requirements 3, 7, 12 (all about validation)
|
||||||
|
- Combined duplicate error cases
|
||||||
|
- Unified session management requirements
|
||||||
|
|
||||||
|
**Terminology Standardization:**
|
||||||
|
- "User" → "Authenticated User" (consistent usage)
|
||||||
|
- "Login" → "Authentication" (aligned with codebase)
|
||||||
|
|
||||||
|
**Added Coverage:**
|
||||||
|
- Requirement 15: Password strength (implemented but not in spec)
|
||||||
|
- Error case 8: Rate limiting (implemented but not in spec)
|
||||||
|
|
||||||
|
**Removed:**
|
||||||
|
- Obsolete requirement 9 (feature removed in v2.0)
|
||||||
|
|
||||||
|
### Migration Notes
|
||||||
|
|
||||||
|
[How to map old spec sections to new spec sections]
|
||||||
|
|
||||||
|
Old Section 2.1 → New Section 3.1.1
|
||||||
|
Old Section 3.4 → New Section 2.3
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Transition Strategy
|
||||||
|
|
||||||
|
**For active projects:**
|
||||||
|
|
||||||
|
1. **Review with team** (if team project)
|
||||||
|
2. **Create PR for spec refactor**
|
||||||
|
3. **Get approval before merging**
|
||||||
|
4. **Keep old spec accessible** (git history)
|
||||||
|
5. **Update documentation** (if references spec)
|
||||||
|
|
||||||
|
**For solo projects:**
|
||||||
|
|
||||||
|
1. **Commit old spec** (ensure it's in git)
|
||||||
|
2. **Replace with refactored spec**
|
||||||
|
3. **Commit with detailed message**
|
||||||
|
|
||||||
|
### 9. Verify Against Code
|
||||||
|
|
||||||
|
**After refactoring:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check spec compliance with current code
|
||||||
|
# Use sdd:review-code
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ensure:**
|
||||||
|
- Refactored spec still describes existing implementation
|
||||||
|
- No accidental requirement changes
|
||||||
|
- Compliance still 100%
|
||||||
|
|
||||||
|
## Refactoring Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Analyze current spec state (issues, redundancies)
|
||||||
|
- [ ] Review actual implementation (what exists in code)
|
||||||
|
- [ ] Create coverage map (implementation → spec)
|
||||||
|
- [ ] Identify consolidation opportunities
|
||||||
|
- [ ] Design improved structure
|
||||||
|
- [ ] Refactor spec content
|
||||||
|
- [ ] Validate refactored spec for soundness
|
||||||
|
- [ ] Ensure all implemented features covered
|
||||||
|
- [ ] Create changelog documenting changes
|
||||||
|
- [ ] Verify refactored spec against code (compliance check)
|
||||||
|
- [ ] Commit with detailed message
|
||||||
|
|
||||||
|
## Example: Before and After
|
||||||
|
|
||||||
|
### Before Refactoring
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Feature: User System
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
1. Users can register
|
||||||
|
2. Email must be validated
|
||||||
|
3. Password must be strong
|
||||||
|
4. Users can login
|
||||||
|
5. Sessions expire after 30 minutes
|
||||||
|
6. Users can logout
|
||||||
|
7. Passwords must have 8 characters
|
||||||
|
8. Passwords must have uppercase
|
||||||
|
9. Passwords must have lowercase
|
||||||
|
10. Passwords must have number
|
||||||
|
11. Email format must be valid
|
||||||
|
12. Users can reset password
|
||||||
|
13. Reset tokens expire after 1 hour
|
||||||
|
14. Users get logged out on password change
|
||||||
|
15. Sessions use JWT
|
||||||
|
16. JWT secret must be secure
|
||||||
|
...
|
||||||
|
|
||||||
|
(Requirements scattered, no organization, redundancy)
|
||||||
|
```
|
||||||
|
|
||||||
|
### After Refactoring
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Feature: User Authentication System
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
Provide secure user authentication with registration, login, and password management.
|
||||||
|
|
||||||
|
## User Registration
|
||||||
|
|
||||||
|
### Functional Requirements
|
||||||
|
1. Users can register with email and password
|
||||||
|
2. Registration creates user account and initial session
|
||||||
|
|
||||||
|
### Email Validation
|
||||||
|
- Must be valid email format (RFC 5322)
|
||||||
|
- Email verification required before account activation
|
||||||
|
- Verification link expires after 24 hours
|
||||||
|
|
||||||
|
### Password Requirements
|
||||||
|
- Minimum 8 characters
|
||||||
|
- Must contain: uppercase, lowercase, number
|
||||||
|
- Common passwords rejected (check against list)
|
||||||
|
|
||||||
|
## Session Management
|
||||||
|
|
||||||
|
### Authentication Flow
|
||||||
|
1. User provides credentials (email + password)
|
||||||
|
2. System validates credentials
|
||||||
|
3. On success: JWT token generated
|
||||||
|
4. Client stores token for subsequent requests
|
||||||
|
|
||||||
|
### Session Configuration
|
||||||
|
- Token type: JWT (JSON Web Token)
|
||||||
|
- Token expiration: 30 minutes
|
||||||
|
- Secret: Stored in environment variable (not in code)
|
||||||
|
- Algorithm: HS256
|
||||||
|
|
||||||
|
### Logout
|
||||||
|
- Client discards token
|
||||||
|
- Optional: Server-side token invalidation (if implemented)
|
||||||
|
|
||||||
|
## Password Management
|
||||||
|
|
||||||
|
### Password Reset
|
||||||
|
- User requests reset via email
|
||||||
|
- Reset token generated and emailed
|
||||||
|
- Reset token expires after 1 hour
|
||||||
|
- On successful reset: all sessions invalidated
|
||||||
|
|
||||||
|
### Password Change
|
||||||
|
- Requires current password confirmation
|
||||||
|
- On success: all sessions invalidated (forces re-login)
|
||||||
|
...
|
||||||
|
|
||||||
|
(Organized, consolidated, clear)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changelog for Above
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Spec Refactoring Changelog
|
||||||
|
|
||||||
|
**Date:** 2025-11-10
|
||||||
|
|
||||||
|
### Structural Changes
|
||||||
|
- Reorganized flat list into hierarchical sections:
|
||||||
|
- User Registration
|
||||||
|
- Session Management
|
||||||
|
- Password Management
|
||||||
|
|
||||||
|
### Consolidated Requirements
|
||||||
|
- Requirements 7-10 → Single "Password Requirements" section
|
||||||
|
- Requirements 2, 11 → "Email Validation" section
|
||||||
|
- Requirements 4, 5, 6, 15, 16 → "Session Management" section
|
||||||
|
|
||||||
|
### Terminology Standardization
|
||||||
|
- Consistently use "JWT" (not "token" and "JWT" interchangeably)
|
||||||
|
- "User" context now explicit (authenticated vs unauthenticated)
|
||||||
|
|
||||||
|
### Added Coverage
|
||||||
|
- None (all features already in original spec)
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- None (all requirements preserved, just reorganized)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Types of Refactoring
|
||||||
|
|
||||||
|
### 1. Structural Refactoring
|
||||||
|
- Reorganize sections
|
||||||
|
- Create hierarchy
|
||||||
|
- Group related items
|
||||||
|
- Improve navigation
|
||||||
|
|
||||||
|
### 2. Consolidation Refactoring
|
||||||
|
- Merge duplicate requirements
|
||||||
|
- Combine scattered related items
|
||||||
|
- Remove redundancy
|
||||||
|
|
||||||
|
### 3. Clarification Refactoring
|
||||||
|
- Remove ambiguities
|
||||||
|
- Add specificity
|
||||||
|
- Improve wording
|
||||||
|
- Standardize terminology
|
||||||
|
|
||||||
|
### 4. Coverage Refactoring
|
||||||
|
- Add missing implemented features
|
||||||
|
- Remove obsolete requirements
|
||||||
|
- Align with current codebase
|
||||||
|
|
||||||
|
## Common Patterns
|
||||||
|
|
||||||
|
### Pattern: Password Requirements Scattered
|
||||||
|
|
||||||
|
**Problem:** Password requirements in multiple places
|
||||||
|
|
||||||
|
**Solution:** Consolidate into single "Password Requirements" section
|
||||||
|
|
||||||
|
### Pattern: Inconsistent Error Handling
|
||||||
|
|
||||||
|
**Problem:** Some requirements specify errors, others don't
|
||||||
|
|
||||||
|
**Solution:** Create dedicated "Error Handling" section, reference from requirements
|
||||||
|
|
||||||
|
### Pattern: Mixed Abstraction Levels
|
||||||
|
|
||||||
|
**Problem:** High-level and low-level requirements mixed
|
||||||
|
|
||||||
|
**Solution:** Create hierarchy - high-level functional requirements with detailed sub-sections
|
||||||
|
|
||||||
|
### Pattern: Terminology Drift
|
||||||
|
|
||||||
|
**Problem:** "User", "Account", "Profile" used interchangeably
|
||||||
|
|
||||||
|
**Solution:** Standardize on one term, define others in glossary if needed
|
||||||
|
|
||||||
|
## Warnings
|
||||||
|
|
||||||
|
**Don't:**
|
||||||
|
- Change requirements (that's spec evolution, not refactoring)
|
||||||
|
- Remove coverage of implemented features
|
||||||
|
- Refactor during active implementation
|
||||||
|
- Make untracked changes (always document)
|
||||||
|
|
||||||
|
**Do:**
|
||||||
|
- Preserve all requirement content
|
||||||
|
- Improve organization and clarity
|
||||||
|
- Maintain traceability
|
||||||
|
- Document all changes
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Refactoring improves form, not function.**
|
||||||
|
|
||||||
|
- Same requirements, better organization
|
||||||
|
- Same coverage, better clarity
|
||||||
|
- Same intent, better structure
|
||||||
|
|
||||||
|
**Refactoring is maintenance, not change.**
|
||||||
|
|
||||||
|
- Spec still describes same implementation
|
||||||
|
- No behavioral changes
|
||||||
|
- Only organizational improvements
|
||||||
|
|
||||||
|
**Good specs enable good work.**
|
||||||
|
|
||||||
|
- Clear specs enable smooth implementation
|
||||||
|
- Organized specs reduce confusion
|
||||||
|
- Consistent specs prevent errors
|
||||||
|
|
||||||
|
**Periodic refactoring prevents spec decay.**
|
||||||
233
skills/spec/SKILL.md
Normal file
233
skills/spec/SKILL.md
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
---
|
||||||
|
name: spec
|
||||||
|
description: Create specifications directly from clear requirements - uses spec-kit tools to create formal, executable specs following WHAT/WHY principle (not HOW)
|
||||||
|
---
|
||||||
|
|
||||||
|
# Direct Specification Creation
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Create formal specifications directly when requirements are clear and well-defined.
|
||||||
|
|
||||||
|
**Use this instead of brainstorm when:**
|
||||||
|
- Requirements are already clear
|
||||||
|
- User provides detailed description
|
||||||
|
- Feature scope is well-defined
|
||||||
|
- No exploratory dialogue needed
|
||||||
|
|
||||||
|
**This skill creates specs using spec-kit tools and ensures WHAT/WHY focus (not HOW).**
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
**Use this skill when:**
|
||||||
|
- User provides clear, detailed requirements
|
||||||
|
- Feature scope is well-defined
|
||||||
|
- User wants to skip exploratory dialogue
|
||||||
|
- Requirements come from external source (PRD, ticket, etc.)
|
||||||
|
|
||||||
|
**Don't use this skill when:**
|
||||||
|
- Requirements are vague or exploratory → Use `sdd:brainstorm`
|
||||||
|
- Spec already exists → Use `sdd:implement` or `sdd:evolve`
|
||||||
|
- Making changes to existing spec → Use `sdd:spec-refactoring`
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Ensure spec-kit is initialized:
|
||||||
|
|
||||||
|
{Skill: spec-kit}
|
||||||
|
|
||||||
|
If spec-kit prompts for restart, pause this workflow and resume after restart.
|
||||||
|
|
||||||
|
## Critical: Specifications are WHAT and WHY, NOT HOW
|
||||||
|
|
||||||
|
**Specs define contracts and requirements, not implementation.**
|
||||||
|
|
||||||
|
### ✅ Specs SHOULD include:
|
||||||
|
- **Requirements**: What the feature must do
|
||||||
|
- **Behaviors**: How the feature should behave (user-observable)
|
||||||
|
- **Contracts**: API structures, file formats, data schemas
|
||||||
|
- **Error handling rules**: What errors must be handled and how they should appear to users
|
||||||
|
- **Success criteria**: Measurable outcomes
|
||||||
|
- **Constraints**: Limitations and restrictions
|
||||||
|
- **User-visible paths**: File locations, environment variables users interact with
|
||||||
|
|
||||||
|
### ❌ Specs should NOT include:
|
||||||
|
- **Implementation algorithms**: Specific sorting algorithms, data structure choices
|
||||||
|
- **Code**: Function signatures, class hierarchies, pseudocode
|
||||||
|
- **Technology choices**: "Use Redis", "Use React hooks", "Use Python asyncio"
|
||||||
|
- **Internal architecture**: How components communicate internally
|
||||||
|
- **Optimization strategies**: Caching mechanisms, performance tuning
|
||||||
|
|
||||||
|
### 📋 Example: What belongs where
|
||||||
|
|
||||||
|
**SPEC (WHAT/WHY):**
|
||||||
|
```markdown
|
||||||
|
## Requirements
|
||||||
|
- FR-001: System MUST validate email addresses before storing
|
||||||
|
- FR-002: System MUST return validation errors within 200ms
|
||||||
|
- FR-003: Invalid emails MUST return 422 status with error details
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
- Invalid format: Return `{"error": "Invalid email format", "field": "email"}`
|
||||||
|
- Duplicate email: Return `{"error": "Email already exists"}`
|
||||||
|
```
|
||||||
|
|
||||||
|
**PLAN (HOW):**
|
||||||
|
```markdown
|
||||||
|
## Validation Implementation
|
||||||
|
- Use regex pattern: `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
||||||
|
- Cache validation results in Redis (TTL: 5 min)
|
||||||
|
- Database query: `SELECT COUNT(*) FROM users WHERE email = ?`
|
||||||
|
```
|
||||||
|
|
||||||
|
### Why this matters:
|
||||||
|
- **Specs remain stable** - Implementation details change, requirements don't
|
||||||
|
- **Implementation flexibility** - Can change HOW without changing WHAT
|
||||||
|
- **Clearer reviews** - Easy to see if requirements are met vs implementation quality
|
||||||
|
- **Better evolution** - When code diverges from spec, know which to update
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Gather Requirements
|
||||||
|
|
||||||
|
**Extract from user input:**
|
||||||
|
- What needs to be built
|
||||||
|
- Why it's needed (purpose/problem)
|
||||||
|
- Success criteria
|
||||||
|
- Constraints and dependencies
|
||||||
|
- Error cases and edge conditions
|
||||||
|
|
||||||
|
**Ask clarifying questions** (brief, targeted):
|
||||||
|
- Only if critical information is missing
|
||||||
|
- Keep questions focused and specific
|
||||||
|
- Don't turn this into full brainstorming session
|
||||||
|
|
||||||
|
**If requirements are vague:**
|
||||||
|
Stop and use `sdd:brainstorm` instead.
|
||||||
|
|
||||||
|
### 2. Check Project Context
|
||||||
|
|
||||||
|
**Review existing specs:**
|
||||||
|
```bash
|
||||||
|
ls -la specs/features/
|
||||||
|
# Or: ls -la specs/[NNNN]-*/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check for constitution:**
|
||||||
|
```bash
|
||||||
|
cat .specify/memory/constitution.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Look for related features:**
|
||||||
|
- Similar functionality already specced
|
||||||
|
- Integration points
|
||||||
|
- Shared components
|
||||||
|
|
||||||
|
### 3. Create Specification
|
||||||
|
|
||||||
|
**Use spec-kit tools:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Interactive spec creation using spec-kit template
|
||||||
|
speckit specify "[feature description]"
|
||||||
|
|
||||||
|
# Or use spec-kit scripts directly
|
||||||
|
.specify/scripts/bash/create-new-feature.sh --json "[feature description]"
|
||||||
|
```
|
||||||
|
|
||||||
|
**This will:**
|
||||||
|
- Create feature directory (e.g., `specs/0001-feature-name/`)
|
||||||
|
- Initialize spec.md from template
|
||||||
|
- Set up directory structure (docs/, checklists/, contracts/)
|
||||||
|
|
||||||
|
**Fill in the spec following template structure:**
|
||||||
|
- Purpose - WHY this feature exists
|
||||||
|
- Functional Requirements - WHAT it must do
|
||||||
|
- Non-Functional Requirements - Performance, security, etc.
|
||||||
|
- Success Criteria - Measurable outcomes
|
||||||
|
- Error Handling - What can go wrong
|
||||||
|
- Edge Cases - Boundary conditions
|
||||||
|
- Constraints - Limitations
|
||||||
|
- Dependencies - What this relies on
|
||||||
|
- Out of Scope - What this doesn't do
|
||||||
|
|
||||||
|
**Follow WHAT/WHY principle:**
|
||||||
|
- Focus on observable behavior
|
||||||
|
- Avoid implementation details
|
||||||
|
- Use user/system perspective
|
||||||
|
- Keep technology-agnostic where possible
|
||||||
|
|
||||||
|
### 4. Validate Against Constitution
|
||||||
|
|
||||||
|
**If constitution exists:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat .specify/memory/constitution.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check alignment:**
|
||||||
|
- Does spec follow project principles?
|
||||||
|
- Are patterns consistent with constitution?
|
||||||
|
- Does error handling match standards?
|
||||||
|
- Are architectural decisions aligned?
|
||||||
|
|
||||||
|
**Note any deviations** and justify them in spec.
|
||||||
|
|
||||||
|
### 5. Review Spec Soundness
|
||||||
|
|
||||||
|
**Before finishing, validate:**
|
||||||
|
|
||||||
|
Use `sdd:review-spec` skill to check:
|
||||||
|
- Completeness (all sections filled)
|
||||||
|
- Clarity (no ambiguous language)
|
||||||
|
- Implementability (can generate plan from this)
|
||||||
|
- Testability (success criteria measurable)
|
||||||
|
|
||||||
|
**If review finds issues:**
|
||||||
|
- Fix critical issues before proceeding
|
||||||
|
- Document any known gaps
|
||||||
|
- Mark unclear areas for clarification
|
||||||
|
|
||||||
|
### 6. Commit Spec
|
||||||
|
|
||||||
|
**Create git commit:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add specs/[feature-dir]/
|
||||||
|
git commit -m "Add spec for [feature-name]"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Spec is now source of truth** for this feature.
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
After spec creation:
|
||||||
|
|
||||||
|
1. **Review spec soundness** (if not already done):
|
||||||
|
```
|
||||||
|
Use sdd:review-spec
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Implement the feature**:
|
||||||
|
```
|
||||||
|
Use sdd:implement
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Or refine spec further** if issues found
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Spec is contract, not design doc:**
|
||||||
|
- Defines WHAT and WHY
|
||||||
|
- Defers HOW to implementation
|
||||||
|
- Remains stable as code evolves
|
||||||
|
- Is source of truth for compliance
|
||||||
|
|
||||||
|
**Keep specs:****
|
||||||
|
- Technology-agnostic
|
||||||
|
- User-focused
|
||||||
|
- Measurable
|
||||||
|
- Implementable
|
||||||
|
|
||||||
|
**The goal:**
|
||||||
|
A clear, unambiguous specification that serves as the single source of truth for implementation and validation.
|
||||||
331
skills/using-superpowers-sdd/SKILL.md
Normal file
331
skills/using-superpowers-sdd/SKILL.md
Normal file
@@ -0,0 +1,331 @@
|
|||||||
|
---
|
||||||
|
name: using-superpowers-sdd
|
||||||
|
description: Establishes SDD methodology - workflow routing, process discipline, spec-first principle, and skill discovery. Use when starting any SDD conversation to determine which workflow skill to invoke.
|
||||||
|
---
|
||||||
|
|
||||||
|
<EXTREMELY-IMPORTANT>
|
||||||
|
If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST read the skill.
|
||||||
|
|
||||||
|
IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
|
||||||
|
|
||||||
|
This is not negotiable. This is not optional. You cannot rationalize your way out of this.
|
||||||
|
</EXTREMELY-IMPORTANT>
|
||||||
|
|
||||||
|
# Getting Started with Superpowers-SDD
|
||||||
|
|
||||||
|
## What is SDD?
|
||||||
|
|
||||||
|
**SDD = Specification-Driven Development**
|
||||||
|
|
||||||
|
A development methodology where specifications are the single source of truth:
|
||||||
|
- Specs created before code
|
||||||
|
- Code validated against specs
|
||||||
|
- Specs evolve with implementation reality
|
||||||
|
- Quality gates enforce spec compliance
|
||||||
|
|
||||||
|
This plugin combines:
|
||||||
|
- **Superpowers** process discipline (TDD, verification, quality gates)
|
||||||
|
- **Spec-Driven Development** (specs as source of truth)
|
||||||
|
- Result: High-quality software with specs that stay current
|
||||||
|
|
||||||
|
## Technical Prerequisites
|
||||||
|
|
||||||
|
**NOTE: The `spec-kit` skill handles all technical setup automatically.**
|
||||||
|
|
||||||
|
Every SDD workflow skill calls `{Skill: spec-kit}` first, which:
|
||||||
|
- Checks if spec-kit CLI is installed
|
||||||
|
- Initializes the project if needed
|
||||||
|
- Prompts restart if new commands installed
|
||||||
|
- Validates file structure
|
||||||
|
|
||||||
|
You don't need to worry about setup. Focus on choosing the right workflow.
|
||||||
|
|
||||||
|
## MANDATORY FIRST RESPONSE PROTOCOL
|
||||||
|
|
||||||
|
Before responding to ANY user message, you MUST complete this checklist:
|
||||||
|
|
||||||
|
1. ☐ List available SDD skills in your mind
|
||||||
|
2. ☐ Ask yourself: "Does ANY SDD skill match this request?"
|
||||||
|
3. ☐ If yes → Use the Skill tool to read and run the skill file
|
||||||
|
4. ☐ Announce which skill you're using
|
||||||
|
5. ☐ Follow the skill exactly
|
||||||
|
|
||||||
|
**Responding WITHOUT completing this checklist = automatic failure.**
|
||||||
|
|
||||||
|
## The Specification-First Principle
|
||||||
|
|
||||||
|
**CRITICAL RULE: Specs are the source of truth. Everything flows from and validates against specs.**
|
||||||
|
|
||||||
|
Before ANY implementation work:
|
||||||
|
- Spec must exist OR be created first
|
||||||
|
- Spec must be reviewed for soundness
|
||||||
|
- Implementation must validate against spec
|
||||||
|
- Spec/code mismatches trigger evolution workflow
|
||||||
|
|
||||||
|
**You CANNOT write code without a spec. Period.**
|
||||||
|
|
||||||
|
## Critical Rules
|
||||||
|
|
||||||
|
1. **Spec-first, always.** No code without spec. No exceptions.
|
||||||
|
2. **Follow mandatory workflows.** Brainstorm → Spec → Plan → TDD → Verify.
|
||||||
|
3. **Check for relevant skills before ANY task.** SDD has skills for each phase.
|
||||||
|
4. **Validate spec compliance.** Code review and verification check specs.
|
||||||
|
5. **Handle spec/code drift.** Use sdd:evolve when mismatches detected.
|
||||||
|
|
||||||
|
## Available SDD Skills
|
||||||
|
|
||||||
|
### Phase Entry Points
|
||||||
|
- **sdd:brainstorm** - Rough idea → spec through collaborative dialogue
|
||||||
|
- **sdd:implement** - Spec → code with TDD and compliance checking
|
||||||
|
- **sdd:evolve** - Handle spec/code mismatches with AI guidance
|
||||||
|
|
||||||
|
### Modified Core Skills
|
||||||
|
- **sdd:writing-plans** - Generate plans FROM specs (not from scratch)
|
||||||
|
- **sdd:review-code** - Review code-to-spec compliance
|
||||||
|
- **sdd:verification-before-completion** - Tests + spec compliance validation
|
||||||
|
|
||||||
|
### SDD-Specific Skills
|
||||||
|
- **sdd:review-spec** - Validate spec soundness and completeness
|
||||||
|
- **sdd:spec-refactoring** - Consolidate and improve evolved specs
|
||||||
|
- **sdd:spec-kit** - Technical integration for spec-kit CLI (called automatically)
|
||||||
|
- **sdd:constitution** - Create/manage project-wide principles
|
||||||
|
|
||||||
|
### Compatible Superpowers Skills
|
||||||
|
These work as-is with spec context:
|
||||||
|
- **test-driven-development** - Use AFTER spec, during implementation
|
||||||
|
- **systematic-debugging** - Use spec as reference during debugging
|
||||||
|
- **using-git-worktrees** - For isolated feature development
|
||||||
|
- **dispatching-parallel-agents** - For independent parallel work
|
||||||
|
|
||||||
|
## Workflow Decision Tree
|
||||||
|
|
||||||
|
```
|
||||||
|
User request arrives
|
||||||
|
↓
|
||||||
|
Is this a new feature/project?
|
||||||
|
Yes → Is it a rough idea?
|
||||||
|
Yes → sdd:brainstorm
|
||||||
|
No → Create spec using spec-kit tools
|
||||||
|
No → Does spec exist for this area?
|
||||||
|
Yes → Is there spec/code mismatch?
|
||||||
|
Yes → sdd:evolve
|
||||||
|
No → sdd:implement
|
||||||
|
No → Create spec first using spec-kit tools
|
||||||
|
```
|
||||||
|
|
||||||
|
## Creating Specifications
|
||||||
|
|
||||||
|
### Rough Idea → Use Brainstorm
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "I want to add authentication to my app"
|
||||||
|
→ Use sdd:brainstorm
|
||||||
|
```
|
||||||
|
|
||||||
|
**Brainstorm will:**
|
||||||
|
- Explore the idea through questions
|
||||||
|
- Propose approaches with trade-offs
|
||||||
|
- Refine requirements collaboratively
|
||||||
|
- Create formal spec using spec-kit
|
||||||
|
|
||||||
|
### Clear Requirements → Direct Spec Creation
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "Add a POST /api/users endpoint that validates email and returns 422 on invalid format"
|
||||||
|
→ Create spec directly using spec-kit tools
|
||||||
|
```
|
||||||
|
|
||||||
|
**Direct spec creation:**
|
||||||
|
- Requirements are already clear
|
||||||
|
- No exploratory dialogue needed
|
||||||
|
- Use spec-kit CLI or templates directly
|
||||||
|
- Follow spec-kit layout conventions
|
||||||
|
|
||||||
|
**WHAT vs HOW principle:**
|
||||||
|
Specs define WHAT and WHY, not HOW.
|
||||||
|
- ✅ WHAT: Requirements, behaviors, contracts, success criteria
|
||||||
|
- ❌ HOW: Algorithms, code, technology choices, architecture
|
||||||
|
|
||||||
|
## Common Rationalizations That Mean You're About To Fail
|
||||||
|
|
||||||
|
If you catch yourself thinking ANY of these thoughts, STOP. You are rationalizing. Check for and use the skill.
|
||||||
|
|
||||||
|
**Spec-avoidance rationalizations:**
|
||||||
|
- "This is too simple for a spec" → WRONG. Simple changes still need spec context.
|
||||||
|
- "I'll just write the code quickly" → WRONG. Code without spec creates drift.
|
||||||
|
- "The spec is obvious from the description" → WRONG. Make it explicit.
|
||||||
|
- "We can spec it after implementation" → WRONG. That's documentation, not SDD.
|
||||||
|
|
||||||
|
**Skill-avoidance rationalizations:**
|
||||||
|
- "This is just a quick fix" → WRONG. Quick fixes need spec validation.
|
||||||
|
- "I can check the spec manually" → WRONG. Use sdd:verification-before-completion.
|
||||||
|
- "The spec is good enough" → WRONG. Use sdd:review-spec before implementing.
|
||||||
|
- "I remember this workflow" → WRONG. Skills evolve. Run the current version.
|
||||||
|
|
||||||
|
**Why:** Specs prevent drift. Skills enforce discipline. Both save time by preventing mistakes.
|
||||||
|
|
||||||
|
If a skill for your task exists, you must use it or you will fail at your task.
|
||||||
|
|
||||||
|
## Skills with Checklists
|
||||||
|
|
||||||
|
If a skill has a checklist, YOU MUST create TodoWrite todos for EACH item.
|
||||||
|
|
||||||
|
**Don't:**
|
||||||
|
- Work through checklist mentally
|
||||||
|
- Skip creating todos "to save time"
|
||||||
|
- Batch multiple items into one todo
|
||||||
|
- Mark complete without doing them
|
||||||
|
|
||||||
|
**Why:** Checklists without TodoWrite tracking = steps get skipped. Every time.
|
||||||
|
|
||||||
|
## Announcing Skill Usage
|
||||||
|
|
||||||
|
Before using a skill, announce that you are using it.
|
||||||
|
|
||||||
|
"I'm using [Skill Name] to [what you're doing]."
|
||||||
|
|
||||||
|
**Examples:**
|
||||||
|
- "I'm using sdd:brainstorm to refine your idea into a spec."
|
||||||
|
- "I'm using sdd:implement to build this feature from the spec."
|
||||||
|
- "I'm using sdd:evolve to reconcile the spec/code mismatch."
|
||||||
|
|
||||||
|
**Why:** Transparency helps your human partner understand your process and catch errors early.
|
||||||
|
|
||||||
|
## Spec Evolution is Normal
|
||||||
|
|
||||||
|
Specs WILL diverge from code. This is expected and healthy.
|
||||||
|
|
||||||
|
**When mismatch detected:**
|
||||||
|
1. DON'T panic or force-fit code to wrong spec
|
||||||
|
2. DO use sdd:evolve
|
||||||
|
3. AI analyzes: update spec vs. fix code
|
||||||
|
4. User decides (or auto-update if configured)
|
||||||
|
|
||||||
|
**Remember:** Specs are source of truth, but truth can evolve based on reality.
|
||||||
|
|
||||||
|
## Constitution: Optional but Powerful
|
||||||
|
|
||||||
|
Consider creating a constitution for your project:
|
||||||
|
|
||||||
|
**What is it?**
|
||||||
|
- Project-wide principles and standards
|
||||||
|
- Referenced during spec validation
|
||||||
|
- Ensures consistency across features
|
||||||
|
|
||||||
|
**When to create:**
|
||||||
|
- New projects: Early, after first feature spec
|
||||||
|
- Existing projects: When patterns emerge
|
||||||
|
- Team projects: Always (defines shared understanding)
|
||||||
|
|
||||||
|
**How to create:**
|
||||||
|
Use `/sdd:constitution` skill.
|
||||||
|
|
||||||
|
## Instructions ≠ Permission to Skip Workflows
|
||||||
|
|
||||||
|
Your human partner's specific instructions describe WHAT to do, not HOW.
|
||||||
|
|
||||||
|
"Add X", "Fix Y" = the goal, NOT permission to skip spec-first or verification.
|
||||||
|
|
||||||
|
**Red flags:** "Instruction was specific" • "Seems simple" • "Workflow is overkill"
|
||||||
|
|
||||||
|
**Why:** Specific instructions mean clear requirements, which is when specs matter MOST.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
**Starting any task:**
|
||||||
|
1. Check this skill first for routing
|
||||||
|
2. Determine: brainstorm vs. direct spec vs. implement vs. evolve
|
||||||
|
3. Invoke the appropriate workflow skill
|
||||||
|
4. That skill will call spec-kit for setup automatically
|
||||||
|
5. Follow the workflow discipline exactly
|
||||||
|
|
||||||
|
**The methodology is:**
|
||||||
|
- Specs first, always
|
||||||
|
- Code validates against specs
|
||||||
|
- Specs evolve when reality teaches us
|
||||||
|
- Quality gates prevent shortcuts
|
||||||
|
- Process discipline ensures quality
|
||||||
|
|
||||||
|
**The tools are:**
|
||||||
|
- spec-kit (technical integration)
|
||||||
|
- Workflow skills (brainstorm, implement, evolve)
|
||||||
|
- Verification and validation skills
|
||||||
|
- TDD and debugging skills
|
||||||
|
|
||||||
|
**The goal is:**
|
||||||
|
High-quality software with specs that remain the living source of truth.
|
||||||
|
|
||||||
|
## Workflow Patterns
|
||||||
|
|
||||||
|
### Pattern 1: New Feature from Rough Idea
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "I want to add notifications to my app"
|
||||||
|
|
||||||
|
1. Recognize: Rough idea
|
||||||
|
2. Route to: sdd:brainstorm
|
||||||
|
3. Brainstorm will:
|
||||||
|
- Call spec-kit (auto-setup)
|
||||||
|
- Explore idea collaboratively
|
||||||
|
- Create formal spec
|
||||||
|
- Hand off to sdd:implement
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pattern 2: New Feature from Clear Requirements
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "Add GET /api/stats endpoint returning JSON with user_count and post_count"
|
||||||
|
|
||||||
|
1. Recognize: Clear requirements
|
||||||
|
2. Create spec using spec-kit tools
|
||||||
|
3. Route to: sdd:implement
|
||||||
|
4. Implement will:
|
||||||
|
- Call spec-kit (auto-setup)
|
||||||
|
- Generate plan from spec
|
||||||
|
- Use TDD
|
||||||
|
- Verify spec compliance
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pattern 3: Code Exists, Spec Missing
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "Document what this auth module does"
|
||||||
|
|
||||||
|
1. Recognize: Code without spec
|
||||||
|
2. Create spec by analyzing code
|
||||||
|
3. Route to: sdd:evolve (to reconcile)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pattern 4: Code and Spec Diverged
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "The login endpoint returns different errors than the spec says"
|
||||||
|
|
||||||
|
1. Recognize: Spec/code mismatch
|
||||||
|
2. Route to: sdd:evolve
|
||||||
|
3. Evolve will:
|
||||||
|
- Call spec-kit (auto-setup)
|
||||||
|
- Analyze mismatch
|
||||||
|
- Recommend update spec vs. fix code
|
||||||
|
- User decides or auto-update
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**You are the methodology enforcer.**
|
||||||
|
|
||||||
|
- Route to correct workflow skill
|
||||||
|
- Enforce spec-first principle
|
||||||
|
- Catch rationalizations
|
||||||
|
- Ensure quality gates run
|
||||||
|
|
||||||
|
**You are NOT:**
|
||||||
|
- The technical setup manager (that's spec-kit)
|
||||||
|
- The implementer (that's workflow skills)
|
||||||
|
- The spec creator (that's spec-kit + brainstorm)
|
||||||
|
|
||||||
|
**Your job:**
|
||||||
|
Ensure the right skill gets used for the right task, and that SDD principles are followed.
|
||||||
|
|
||||||
|
**The goal:**
|
||||||
|
Specs that stay current. Code that matches intent. Quality through discipline.
|
||||||
419
skills/verification-before-completion/SKILL.md
Normal file
419
skills/verification-before-completion/SKILL.md
Normal file
@@ -0,0 +1,419 @@
|
|||||||
|
---
|
||||||
|
name: verification-before-completion
|
||||||
|
description: Extended verification including tests AND spec compliance - runs tests, validates spec compliance, checks for drift, blocks completion on failures
|
||||||
|
---
|
||||||
|
|
||||||
|
# Verification Before Completion (Spec-Aware)
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Verify implementation is complete by running tests AND validating spec compliance.
|
||||||
|
|
||||||
|
**Key Additions from Standard Verification:**
|
||||||
|
- Step 1: Run tests (existing behavior)
|
||||||
|
- **Step 2: Validate spec compliance** (new)
|
||||||
|
- **Step 3: Check for spec drift** (new)
|
||||||
|
- Blocks completion if EITHER tests OR spec compliance fails
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
- After implementation and code review
|
||||||
|
- Before claiming work is complete
|
||||||
|
- Before committing/merging/deploying
|
||||||
|
- As final gate in `sdd:implement` workflow
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Run Tests
|
||||||
|
|
||||||
|
**Execute all tests:**
|
||||||
|
```bash
|
||||||
|
# Run full test suite
|
||||||
|
npm test # or pytest, go test, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check results:**
|
||||||
|
- All tests passing?
|
||||||
|
- No flaky tests?
|
||||||
|
- Coverage adequate?
|
||||||
|
|
||||||
|
**If tests fail:**
|
||||||
|
- ❌ **STOP - Fix tests before proceeding**
|
||||||
|
- Do not skip this step
|
||||||
|
- Do not claim completion
|
||||||
|
|
||||||
|
### 2. Validate Spec Compliance
|
||||||
|
|
||||||
|
**Load spec:**
|
||||||
|
```bash
|
||||||
|
cat specs/features/[feature-name].md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check each requirement:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
Functional Requirement 1: [From spec]
|
||||||
|
✓ / ✗ Implemented
|
||||||
|
✓ / ✗ Tested
|
||||||
|
✓ / ✗ Matches spec behavior
|
||||||
|
|
||||||
|
Functional Requirement 2: [From spec]
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
**Verify:**
|
||||||
|
- All requirements implemented
|
||||||
|
- All requirements tested
|
||||||
|
- All behavior matches spec
|
||||||
|
- No missing features
|
||||||
|
- No extra features (or documented)
|
||||||
|
|
||||||
|
**Calculate compliance:**
|
||||||
|
```
|
||||||
|
Spec Compliance: X/X requirements = XX%
|
||||||
|
```
|
||||||
|
|
||||||
|
**If compliance < 100%:**
|
||||||
|
- ❌ **STOP - Use `sdd:evolve` to reconcile**
|
||||||
|
- Document all deviations
|
||||||
|
- Do not proceed until resolved
|
||||||
|
|
||||||
|
### 3. Check for Spec Drift
|
||||||
|
|
||||||
|
**Compare:**
|
||||||
|
- What spec says NOW
|
||||||
|
- What code does NOW
|
||||||
|
- Any divergence?
|
||||||
|
|
||||||
|
**Common drift sources:**
|
||||||
|
- Spec updated but code not
|
||||||
|
- Code changed but spec not
|
||||||
|
- Undocumented additions
|
||||||
|
- Forgotten requirements
|
||||||
|
|
||||||
|
**If drift detected:**
|
||||||
|
- Document each instance
|
||||||
|
- Use `sdd:evolve` to reconcile
|
||||||
|
- Do not proceed with drift
|
||||||
|
|
||||||
|
### 4. Verify Success Criteria
|
||||||
|
|
||||||
|
**From spec, check each criterion:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
Success Criteria (from spec):
|
||||||
|
- [ ] Criterion 1: [Description]
|
||||||
|
Status: ✓ Met / ✗ Not met
|
||||||
|
Evidence: [How verified]
|
||||||
|
|
||||||
|
- [ ] Criterion 2: [Description]
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
**All criteria must be met.**
|
||||||
|
|
||||||
|
If any criterion not met:
|
||||||
|
- ❌ **STOP - Criterion not met**
|
||||||
|
- Implement missing piece
|
||||||
|
- Re-verify
|
||||||
|
|
||||||
|
### 5. Generate Verification Report
|
||||||
|
|
||||||
|
**Report structure:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Verification Report: [Feature Name]
|
||||||
|
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
**Spec:** specs/features/[feature].md
|
||||||
|
|
||||||
|
## Test Results
|
||||||
|
|
||||||
|
**Status:** ✅ PASS / ❌ FAIL
|
||||||
|
|
||||||
|
```
|
||||||
|
[Test output]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Summary:**
|
||||||
|
- Total: X tests
|
||||||
|
- Passed: X
|
||||||
|
- Failed: X
|
||||||
|
- Coverage: XX%
|
||||||
|
|
||||||
|
## Spec Compliance
|
||||||
|
|
||||||
|
**Status:** ✅ COMPLIANT / ❌ NON-COMPLIANT
|
||||||
|
|
||||||
|
**Compliance Score:** XX%
|
||||||
|
|
||||||
|
### Requirements Status
|
||||||
|
- Functional: X/X (XX%)
|
||||||
|
- Error Cases: X/X (XX%)
|
||||||
|
- Edge Cases: X/X (XX%)
|
||||||
|
- Non-Functional: X/X (XX%)
|
||||||
|
|
||||||
|
### Deviations
|
||||||
|
[List any deviations found]
|
||||||
|
|
||||||
|
## Spec Drift Check
|
||||||
|
|
||||||
|
**Status:** ✅ NO DRIFT / ⚠️ DRIFT DETECTED
|
||||||
|
|
||||||
|
[Details if drift found]
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
**Status:** ✅ ALL MET / ❌ INCOMPLETE
|
||||||
|
|
||||||
|
- [✓] Criterion 1
|
||||||
|
- [✓] Criterion 2
|
||||||
|
...
|
||||||
|
|
||||||
|
## Overall Status
|
||||||
|
|
||||||
|
✅ **VERIFIED - Ready for completion**
|
||||||
|
|
||||||
|
OR
|
||||||
|
|
||||||
|
❌ **NOT VERIFIED - Issues must be resolved**
|
||||||
|
|
||||||
|
**Blocking Issues:**
|
||||||
|
- [Issue 1]
|
||||||
|
- [Issue 2]
|
||||||
|
|
||||||
|
**Next Steps:**
|
||||||
|
[What needs to be done]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Make Go/No-Go Decision
|
||||||
|
|
||||||
|
**All conditions must be true:**
|
||||||
|
- [x] All tests passing
|
||||||
|
- [x] Spec compliance 100%
|
||||||
|
- [x] No spec drift
|
||||||
|
- [x] All success criteria met
|
||||||
|
|
||||||
|
**If ALL true:**
|
||||||
|
- ✅ **VERIFIED - Proceed to completion**
|
||||||
|
- Safe to commit/merge/deploy
|
||||||
|
|
||||||
|
**If ANY false:**
|
||||||
|
- ❌ **NOT VERIFIED - Block completion**
|
||||||
|
- Fix issues before proceeding
|
||||||
|
- Re-run verification after fixes
|
||||||
|
|
||||||
|
## Verification Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Run full test suite
|
||||||
|
- [ ] Verify all tests passing
|
||||||
|
- [ ] Load specification
|
||||||
|
- [ ] Validate spec compliance for all requirements
|
||||||
|
- [ ] Check for spec drift
|
||||||
|
- [ ] Verify all success criteria met
|
||||||
|
- [ ] Generate verification report
|
||||||
|
- [ ] Make go/no-go decision
|
||||||
|
- [ ] If not verified: Document blocking issues
|
||||||
|
- [ ] If verified: Proceed to completion
|
||||||
|
|
||||||
|
## Example: Verification PASS
|
||||||
|
|
||||||
|
```
|
||||||
|
You: Running verification before completion...
|
||||||
|
|
||||||
|
Step 1: Running tests...
|
||||||
|
|
||||||
|
$ npm test
|
||||||
|
|
||||||
|
✅ All tests passing (24/24)
|
||||||
|
✅ Coverage: 95%
|
||||||
|
|
||||||
|
Step 2: Validating spec compliance...
|
||||||
|
|
||||||
|
Reading spec: specs/features/user-profile-api.md
|
||||||
|
|
||||||
|
Checking requirements:
|
||||||
|
✓ Functional Requirement 1: PUT endpoint - Implemented & tested
|
||||||
|
✓ Functional Requirement 2: Validation - Implemented & tested
|
||||||
|
✓ Functional Requirement 3: Auth - Implemented & tested
|
||||||
|
✓ Functional Requirement 4: Authorization - Implemented & tested
|
||||||
|
✓ Functional Requirement 5: Response format - Implemented & tested
|
||||||
|
✓ Functional Requirement 6: Partial updates - Implemented & tested
|
||||||
|
|
||||||
|
✓ Error Case 1: Missing JWT - Handled & tested
|
||||||
|
✓ Error Case 2: User not found - Handled & tested
|
||||||
|
✓ Error Case 3: Validation failure - Handled & tested
|
||||||
|
✓ Error Case 4: Authorization failure - Handled & tested
|
||||||
|
|
||||||
|
✓ Edge Case 1: Empty update - Handled & tested
|
||||||
|
✓ Edge Case 2: Invalid avatar URL - Handled & tested
|
||||||
|
✓ Edge Case 3: Special characters in name - Handled & tested
|
||||||
|
|
||||||
|
Spec Compliance: 13/13 = 100% ✅
|
||||||
|
|
||||||
|
Step 3: Checking for spec drift...
|
||||||
|
|
||||||
|
Comparing spec to implementation...
|
||||||
|
No drift detected ✅
|
||||||
|
|
||||||
|
Step 4: Verifying success criteria...
|
||||||
|
|
||||||
|
From spec:
|
||||||
|
✓ Authenticated users can update their profile
|
||||||
|
✓ Validation errors return 422 with clear messages
|
||||||
|
✓ Users cannot update other users' profiles
|
||||||
|
✓ All edge cases handled gracefully
|
||||||
|
|
||||||
|
All criteria met ✅
|
||||||
|
|
||||||
|
=== VERIFICATION REPORT ===
|
||||||
|
|
||||||
|
✅ Tests: PASS (24/24)
|
||||||
|
✅ Spec Compliance: 100%
|
||||||
|
✅ Spec Drift: None
|
||||||
|
✅ Success Criteria: All met
|
||||||
|
|
||||||
|
**OVERALL: ✅ VERIFIED**
|
||||||
|
|
||||||
|
Implementation is complete and verified. Ready for commit/merge.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example: Verification FAIL
|
||||||
|
|
||||||
|
```
|
||||||
|
You: Running verification before completion...
|
||||||
|
|
||||||
|
Step 1: Running tests...
|
||||||
|
|
||||||
|
$ npm test
|
||||||
|
|
||||||
|
❌ Tests FAILED (22/24 passing, 2 failing)
|
||||||
|
|
||||||
|
Failures:
|
||||||
|
1. "Should handle database connection errors"
|
||||||
|
Error: Connection retry not implemented
|
||||||
|
|
||||||
|
2. "Should return 503 when database unavailable"
|
||||||
|
Error: Returns 500 instead of 503
|
||||||
|
|
||||||
|
**BLOCKING: Tests must pass before proceeding**
|
||||||
|
|
||||||
|
Step 2: Validating spec compliance...
|
||||||
|
|
||||||
|
Reading spec: specs/features/user-profile-api.md
|
||||||
|
|
||||||
|
Checking requirements:
|
||||||
|
[checks requirements...]
|
||||||
|
|
||||||
|
❌ Non-Functional Requirement 1: Database retry logic
|
||||||
|
Status: Not implemented
|
||||||
|
Spec says: "3 retry attempts with exponential backoff"
|
||||||
|
Code does: Single attempt, no retry
|
||||||
|
|
||||||
|
Spec Compliance: 12/13 = 92% ❌
|
||||||
|
|
||||||
|
Step 3: Checking success criteria...
|
||||||
|
|
||||||
|
From spec:
|
||||||
|
✓ Authenticated users can update their profile
|
||||||
|
✓ Validation errors return 422
|
||||||
|
✗ Handles database failures gracefully (missing retry logic)
|
||||||
|
✓ Users cannot update other users' profiles
|
||||||
|
|
||||||
|
=== VERIFICATION REPORT ===
|
||||||
|
|
||||||
|
❌ Tests: FAIL (2 failures)
|
||||||
|
❌ Spec Compliance: 92% (missing retry logic)
|
||||||
|
❌ Success Criteria: 3/4 met
|
||||||
|
|
||||||
|
**OVERALL: ❌ NOT VERIFIED**
|
||||||
|
|
||||||
|
**Blocking Issues:**
|
||||||
|
1. Database retry logic not implemented (from spec)
|
||||||
|
2. Tests failing for error handling
|
||||||
|
3. Returns wrong HTTP status (500 vs 503)
|
||||||
|
|
||||||
|
**Next Steps:**
|
||||||
|
1. Implement database retry logic per spec
|
||||||
|
2. Fix HTTP status code
|
||||||
|
3. Re-run verification
|
||||||
|
|
||||||
|
**DO NOT PROCEED until all issues resolved.**
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Failure Scenarios
|
||||||
|
|
||||||
|
### Scenario: Tests Pass but Spec Compliance Fails
|
||||||
|
|
||||||
|
```
|
||||||
|
✅ Tests: 24/24 passing
|
||||||
|
❌ Spec Compliance: 85%
|
||||||
|
❌ BLOCKED
|
||||||
|
|
||||||
|
Issue: Tests don't cover all spec requirements
|
||||||
|
|
||||||
|
Action: Add tests for uncovered requirements, re-verify
|
||||||
|
```
|
||||||
|
|
||||||
|
### Scenario: Spec Compliant but Tests Fail
|
||||||
|
|
||||||
|
```
|
||||||
|
❌ Tests: 20/24 passing
|
||||||
|
✅ Spec Compliance: 100%
|
||||||
|
❌ BLOCKED
|
||||||
|
|
||||||
|
Issue: Implementation exists but has bugs
|
||||||
|
|
||||||
|
Action: Fix bugs, ensure tests pass, re-verify
|
||||||
|
```
|
||||||
|
|
||||||
|
### Scenario: Both Pass but Drift Detected
|
||||||
|
|
||||||
|
```
|
||||||
|
✅ Tests: 24/24 passing
|
||||||
|
✅ Spec Compliance: 100%
|
||||||
|
⚠️ Spec Drift: Spec updated after implementation
|
||||||
|
❌ BLOCKED
|
||||||
|
|
||||||
|
Issue: Spec changed, code doesn't reflect changes
|
||||||
|
|
||||||
|
Action: Update code or revert spec, re-verify
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quality Gates
|
||||||
|
|
||||||
|
**This skill enforces quality gates:**
|
||||||
|
|
||||||
|
1. **All tests must pass** (from superpowers)
|
||||||
|
2. **100% spec compliance required** (new)
|
||||||
|
3. **No spec drift allowed** (new)
|
||||||
|
4. **All success criteria must be met** (new)
|
||||||
|
|
||||||
|
**No exceptions. No shortcuts.**
|
||||||
|
|
||||||
|
These gates exist to prevent:
|
||||||
|
- Incomplete implementations
|
||||||
|
- Untested code
|
||||||
|
- Spec/code divergence
|
||||||
|
- False claims of completion
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**Verification is not optional.**
|
||||||
|
|
||||||
|
- Don't skip verification "just this once"
|
||||||
|
- Don't claim completion without verification
|
||||||
|
- Don't ignore failing gates
|
||||||
|
|
||||||
|
**Verification failures are information.**
|
||||||
|
|
||||||
|
- Tests failing? Code has bugs
|
||||||
|
- Spec compliance failing? Missing features
|
||||||
|
- Drift detected? Synchronization problem
|
||||||
|
- Criteria not met? Work incomplete
|
||||||
|
|
||||||
|
**Fix issues, don't rationalize past them.**
|
||||||
|
|
||||||
|
**Evidence before assertions. Always.**
|
||||||
500
skills/writing-plans/SKILL.md
Normal file
500
skills/writing-plans/SKILL.md
Normal file
@@ -0,0 +1,500 @@
|
|||||||
|
---
|
||||||
|
name: writing-plans
|
||||||
|
description: Generate implementation plans FROM specifications - reads spec as input, extracts requirements, creates step-by-step tasks with validation against spec
|
||||||
|
---
|
||||||
|
|
||||||
|
# Writing Implementation Plans from Specifications
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Generate detailed implementation plans derived FROM specifications, not from scratch.
|
||||||
|
|
||||||
|
The spec is the source of truth. The plan translates spec requirements into concrete, actionable implementation tasks.
|
||||||
|
|
||||||
|
**Key Difference from Standard Writing-Plans:**
|
||||||
|
- **Input is SPEC** (not blank slate)
|
||||||
|
- Plan MUST cover all spec requirements
|
||||||
|
- Plan validates against spec for completeness
|
||||||
|
- Tasks reference spec sections explicitly
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
**Use this skill when:**
|
||||||
|
- Spec exists and is validated
|
||||||
|
- Ready to create implementation plan
|
||||||
|
- Called by `sdd:implement` workflow
|
||||||
|
- Need to break spec into tasks
|
||||||
|
|
||||||
|
**Don't use this skill when:**
|
||||||
|
- No spec exists → Create spec first
|
||||||
|
- Plan already exists → Review/update existing plan
|
||||||
|
- Just clarifying approach → Use brainstorming
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- [ ] Spec exists and is complete
|
||||||
|
- [ ] Spec validated for soundness
|
||||||
|
- [ ] No blocking open questions in spec
|
||||||
|
- [ ] Ready to start implementation
|
||||||
|
|
||||||
|
## The Process
|
||||||
|
|
||||||
|
### 1. Read and Parse Specification
|
||||||
|
|
||||||
|
**Load the spec:**
|
||||||
|
```bash
|
||||||
|
cat specs/features/[feature-name].md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Extract all elements:**
|
||||||
|
- **Functional requirements** (what to build)
|
||||||
|
- **Non-functional requirements** (how it should perform)
|
||||||
|
- **Success criteria** (how to verify)
|
||||||
|
- **Error handling** (what can go wrong)
|
||||||
|
- **Edge cases** (boundary conditions)
|
||||||
|
- **Dependencies** (what's needed)
|
||||||
|
- **Constraints** (limitations)
|
||||||
|
|
||||||
|
**Create requirements checklist:**
|
||||||
|
- Number each requirement
|
||||||
|
- Reference spec section
|
||||||
|
- Mark coverage status
|
||||||
|
|
||||||
|
### 2. Understand Project Context
|
||||||
|
|
||||||
|
**Check existing codebase:**
|
||||||
|
```bash
|
||||||
|
# Find related files
|
||||||
|
rg "[relevant-terms]"
|
||||||
|
|
||||||
|
# Check architecture
|
||||||
|
ls -la src/
|
||||||
|
|
||||||
|
# Review dependencies
|
||||||
|
cat package.json # or requirements.txt, go.mod, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Identify:**
|
||||||
|
- Where new code should live
|
||||||
|
- Existing patterns to follow
|
||||||
|
- Components to reuse
|
||||||
|
- Integration points
|
||||||
|
|
||||||
|
### 3. Design Implementation Strategy
|
||||||
|
|
||||||
|
**For each functional requirement, determine:**
|
||||||
|
|
||||||
|
**Approach:**
|
||||||
|
- How will this be implemented?
|
||||||
|
- What components are needed?
|
||||||
|
- What patterns apply?
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- What files to create?
|
||||||
|
- What files to modify?
|
||||||
|
- Full file paths
|
||||||
|
|
||||||
|
**Dependencies:**
|
||||||
|
- What needs to exist first?
|
||||||
|
- What can be done in parallel?
|
||||||
|
- What's the critical path?
|
||||||
|
|
||||||
|
**Testing:**
|
||||||
|
- How will this be tested?
|
||||||
|
- What test files needed?
|
||||||
|
- What edge cases to cover?
|
||||||
|
|
||||||
|
### 4. Create Implementation Plan
|
||||||
|
|
||||||
|
**Use this structure:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Implementation Plan: [Feature Name]
|
||||||
|
|
||||||
|
**Source Spec:** specs/features/[feature-name].md
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
**Estimated Effort:** [time estimate if relevant]
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
[Brief summary of what we're implementing and why]
|
||||||
|
|
||||||
|
## Requirements Coverage
|
||||||
|
|
||||||
|
### Functional Requirement 1: [Quote from spec]
|
||||||
|
**Spec Reference:** specs/features/[feature].md#[section]
|
||||||
|
|
||||||
|
**Implementation Approach:**
|
||||||
|
[How we'll implement this requirement]
|
||||||
|
|
||||||
|
**Tasks:**
|
||||||
|
- [ ] [Specific actionable task]
|
||||||
|
- [ ] [Another task]
|
||||||
|
|
||||||
|
**Files to Create/Modify:**
|
||||||
|
- `path/to/file.ext` - [What changes]
|
||||||
|
|
||||||
|
**Tests:**
|
||||||
|
- [ ] [Test case for this requirement]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Functional Requirement 2: [Quote from spec]
|
||||||
|
[Repeat structure]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[Continue for ALL functional requirements]
|
||||||
|
|
||||||
|
## Non-Functional Requirements
|
||||||
|
|
||||||
|
[For each non-functional requirement from spec]
|
||||||
|
|
||||||
|
### [Requirement Name]: [Quote from spec]
|
||||||
|
**Spec Reference:** specs/features/[feature].md#[section]
|
||||||
|
|
||||||
|
**Implementation:**
|
||||||
|
[How we'll achieve this]
|
||||||
|
|
||||||
|
**Validation:**
|
||||||
|
[How we'll measure/verify this]
|
||||||
|
|
||||||
|
## Error Handling Implementation
|
||||||
|
|
||||||
|
[For each error case in spec]
|
||||||
|
|
||||||
|
### Error: [From spec]
|
||||||
|
**Spec Reference:** specs/features/[feature].md#error-handling
|
||||||
|
|
||||||
|
**Implementation:**
|
||||||
|
```
|
||||||
|
[Code approach or pseudocode]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Test Cases:**
|
||||||
|
- [ ] [Test for this error case]
|
||||||
|
|
||||||
|
## Edge Cases Implementation
|
||||||
|
|
||||||
|
[For each edge case in spec]
|
||||||
|
|
||||||
|
### Edge Case: [From spec]
|
||||||
|
**Expected Behavior:** [From spec]
|
||||||
|
|
||||||
|
**Implementation:**
|
||||||
|
[How we'll handle this]
|
||||||
|
|
||||||
|
**Test:**
|
||||||
|
- [ ] [Test for edge case]
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
**Required Before Implementation:**
|
||||||
|
- [ ] [Dependency 1 from spec]
|
||||||
|
- [ ] [Dependency 2 from spec]
|
||||||
|
|
||||||
|
**Integration Points:**
|
||||||
|
- [Component/service 1]: [How we integrate]
|
||||||
|
- [Component/service 2]: [How we integrate]
|
||||||
|
|
||||||
|
## Implementation Order
|
||||||
|
|
||||||
|
**Phase 1: Foundation**
|
||||||
|
1. [Task]
|
||||||
|
2. [Task]
|
||||||
|
|
||||||
|
**Phase 2: Core Functionality**
|
||||||
|
1. [Task]
|
||||||
|
2. [Task]
|
||||||
|
|
||||||
|
**Phase 3: Error Handling**
|
||||||
|
1. [Task]
|
||||||
|
2. [Task]
|
||||||
|
|
||||||
|
**Phase 4: Edge Cases & Polish**
|
||||||
|
1. [Task]
|
||||||
|
2. [Task]
|
||||||
|
|
||||||
|
## Test Strategy
|
||||||
|
|
||||||
|
**Unit Tests:**
|
||||||
|
- [ ] [Component/function to test]
|
||||||
|
- [ ] [Another component/function]
|
||||||
|
|
||||||
|
**Integration Tests:**
|
||||||
|
- [ ] [Integration scenario]
|
||||||
|
- [ ] [Another scenario]
|
||||||
|
|
||||||
|
**Spec Compliance Tests:**
|
||||||
|
- [ ] [Verify requirement 1]
|
||||||
|
- [ ] [Verify requirement 2]
|
||||||
|
|
||||||
|
## Files to Create
|
||||||
|
|
||||||
|
- `path/to/new/file1.ext` - [Purpose]
|
||||||
|
- `path/to/new/file2.ext` - [Purpose]
|
||||||
|
|
||||||
|
## Files to Modify
|
||||||
|
|
||||||
|
- `path/to/existing/file1.ext` - [What changes]
|
||||||
|
- `path/to/existing/file2.ext` - [What changes]
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
[From spec, repeated here for reference]
|
||||||
|
- [ ] [Criterion 1]
|
||||||
|
- [ ] [Criterion 2]
|
||||||
|
|
||||||
|
## Spec Validation Checklist
|
||||||
|
|
||||||
|
**All requirements covered:**
|
||||||
|
- [ ] All functional requirements have tasks
|
||||||
|
- [ ] All non-functional requirements addressed
|
||||||
|
- [ ] All error cases have implementation approach
|
||||||
|
- [ ] All edge cases have handling strategy
|
||||||
|
- [ ] All dependencies identified
|
||||||
|
- [ ] All success criteria have verification plan
|
||||||
|
|
||||||
|
**Plan completeness:**
|
||||||
|
- [ ] All tasks are specific and actionable
|
||||||
|
- [ ] All file paths are complete (not "TBD")
|
||||||
|
- [ ] All requirements reference spec sections
|
||||||
|
- [ ] Test strategy covers all requirements
|
||||||
|
- [ ] Implementation order is logical
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
[Any additional context, decisions, or considerations]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Validate Plan Against Spec
|
||||||
|
|
||||||
|
**Completeness check:**
|
||||||
|
|
||||||
|
For each requirement in spec:
|
||||||
|
- [ ] Plan has implementation approach
|
||||||
|
- [ ] Plan has specific tasks
|
||||||
|
- [ ] Plan has test coverage
|
||||||
|
- [ ] Plan references spec section
|
||||||
|
|
||||||
|
**Coverage matrix:**
|
||||||
|
```
|
||||||
|
Requirement 1 → Tasks [1,2,3], Tests [A,B] ✓
|
||||||
|
Requirement 2 → Tasks [4,5], Tests [C,D] ✓
|
||||||
|
Requirement 3 → Tasks [6], Tests [E,F,G] ✓
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
**If any requirement uncovered:** Add tasks before proceeding.
|
||||||
|
|
||||||
|
### 6. Review for Implementability
|
||||||
|
|
||||||
|
**Check that plan:**
|
||||||
|
- Has concrete file paths (not "somewhere")
|
||||||
|
- Has specific tasks (not vague "implement X")
|
||||||
|
- Has realistic order (dependencies respected)
|
||||||
|
- Has test coverage (every requirement tested)
|
||||||
|
|
||||||
|
**Red flags:**
|
||||||
|
- "Figure out how to..."
|
||||||
|
- "Implement [vague concept]"
|
||||||
|
- "TBD"
|
||||||
|
- Missing file paths
|
||||||
|
- No test strategy
|
||||||
|
|
||||||
|
### 7. Save and Commit Plan
|
||||||
|
|
||||||
|
**Save plan:**
|
||||||
|
```bash
|
||||||
|
# Location
|
||||||
|
docs/plans/[date]-[feature]-implementation.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Commit plan:**
|
||||||
|
```bash
|
||||||
|
git add docs/plans/[date]-[feature]-implementation.md
|
||||||
|
git commit -m "Add implementation plan for [feature]
|
||||||
|
|
||||||
|
Generated from spec: specs/features/[feature].md
|
||||||
|
|
||||||
|
Coverage:
|
||||||
|
- [N] functional requirements
|
||||||
|
- [N] error cases
|
||||||
|
- [N] edge cases
|
||||||
|
|
||||||
|
Estimated [N] tasks
|
||||||
|
|
||||||
|
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
||||||
|
|
||||||
|
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
Use TodoWrite to track:
|
||||||
|
|
||||||
|
- [ ] Read and parse specification completely
|
||||||
|
- [ ] Extract all requirements, errors, edge cases
|
||||||
|
- [ ] Understand project context and codebase
|
||||||
|
- [ ] Design implementation strategy
|
||||||
|
- [ ] Create implementation plan with all sections
|
||||||
|
- [ ] Validate plan coverage against spec (100%)
|
||||||
|
- [ ] Review plan for implementability
|
||||||
|
- [ ] Ensure all file paths are complete
|
||||||
|
- [ ] Ensure all tasks are specific and actionable
|
||||||
|
- [ ] Save plan to docs/plans/
|
||||||
|
- [ ] Commit plan to git
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```
|
||||||
|
[Called from sdd:implement]
|
||||||
|
|
||||||
|
You: Generating implementation plan from spec...
|
||||||
|
|
||||||
|
Reading spec: specs/features/user-profile-api.md
|
||||||
|
|
||||||
|
Extracting requirements:
|
||||||
|
- Functional: 6 requirements
|
||||||
|
- Non-functional: 3 requirements
|
||||||
|
- Error cases: 4
|
||||||
|
- Edge cases: 3
|
||||||
|
- Dependencies: 2
|
||||||
|
|
||||||
|
Understanding project context...
|
||||||
|
- Existing API routes in: src/api/
|
||||||
|
- Validation middleware in: src/middleware/
|
||||||
|
- User service in: src/services/user.ts
|
||||||
|
- Tests in: tests/api/
|
||||||
|
|
||||||
|
Creating implementation plan...
|
||||||
|
|
||||||
|
# Implementation Plan: User Profile Update API
|
||||||
|
|
||||||
|
**Source Spec:** specs/features/user-profile-api.md
|
||||||
|
**Date:** 2025-11-10
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Implement REST API endpoint for authenticated users to update their profiles.
|
||||||
|
Includes validation, error handling, and partial update support.
|
||||||
|
|
||||||
|
## Requirements Coverage
|
||||||
|
|
||||||
|
### Functional Requirement 1: PUT endpoint accepts requests
|
||||||
|
**Spec Reference:** specs/features/user-profile-api.md#functional-requirements
|
||||||
|
|
||||||
|
**Implementation Approach:**
|
||||||
|
Create Express route handler at PUT /api/users/:id/profile using
|
||||||
|
existing route structure in src/api/users/
|
||||||
|
|
||||||
|
**Tasks:**
|
||||||
|
- [ ] Create route file at src/api/users/profile.ts
|
||||||
|
- [ ] Register route in src/api/users/index.ts
|
||||||
|
- [ ] Add route handler function
|
||||||
|
|
||||||
|
**Files to Create/Modify:**
|
||||||
|
- `src/api/users/profile.ts` - New route handler
|
||||||
|
- `src/api/users/index.ts` - Register route
|
||||||
|
|
||||||
|
**Tests:**
|
||||||
|
- [ ] Test route responds to PUT requests
|
||||||
|
- [ ] Test route path is /api/users/:id/profile
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Functional Requirement 2: Validate request body
|
||||||
|
**Spec Reference:** specs/features/user-profile-api.md#functional-requirements
|
||||||
|
|
||||||
|
**Implementation Approach:**
|
||||||
|
Create validation middleware using existing validation pattern.
|
||||||
|
Validate: name (2-50 chars), bio (max 500), avatar_url (URL format).
|
||||||
|
|
||||||
|
**Tasks:**
|
||||||
|
- [ ] Create validation schema in src/middleware/validation/profile.ts
|
||||||
|
- [ ] Add validation middleware to route
|
||||||
|
- [ ] Return 422 on validation errors
|
||||||
|
|
||||||
|
**Files to Create/Modify:**
|
||||||
|
- `src/middleware/validation/profile.ts` - Validation schema
|
||||||
|
- `src/api/users/profile.ts` - Apply middleware
|
||||||
|
|
||||||
|
**Tests:**
|
||||||
|
- [ ] Test name length validation (too short)
|
||||||
|
- [ ] Test name length validation (too long)
|
||||||
|
- [ ] Test bio length validation
|
||||||
|
- [ ] Test avatar_url format validation
|
||||||
|
|
||||||
|
[... continues for all requirements ...]
|
||||||
|
|
||||||
|
## Spec Validation Checklist
|
||||||
|
|
||||||
|
**All requirements covered:**
|
||||||
|
- [x] All 6 functional requirements have tasks
|
||||||
|
- [x] All 3 non-functional requirements addressed
|
||||||
|
- [x] All 4 error cases have implementation
|
||||||
|
- [x] All 3 edge cases handled
|
||||||
|
- [x] All 2 dependencies identified
|
||||||
|
- [x] All 5 success criteria have verification
|
||||||
|
|
||||||
|
Plan validated against spec ✓
|
||||||
|
Coverage: 100%
|
||||||
|
|
||||||
|
Saving plan to: docs/plans/2025-11-10-user-profile-api-implementation.md
|
||||||
|
|
||||||
|
Plan created ✓
|
||||||
|
Committed to git ✓
|
||||||
|
|
||||||
|
Plan has 24 tasks across 4 phases.
|
||||||
|
Ready to implement with TDD?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quality Standards
|
||||||
|
|
||||||
|
**Every plan MUST have:**
|
||||||
|
- Complete file paths (no "TBD")
|
||||||
|
- Specific tasks (not vague)
|
||||||
|
- Test coverage (every requirement)
|
||||||
|
- Error handling (every error case)
|
||||||
|
- Edge case coverage (every edge case)
|
||||||
|
- Spec references (every requirement linked)
|
||||||
|
|
||||||
|
**Every task MUST be:**
|
||||||
|
- Actionable (clear what to do)
|
||||||
|
- Testable (can verify completion)
|
||||||
|
- Atomic (one clear outcome)
|
||||||
|
- Ordered (dependencies respected)
|
||||||
|
|
||||||
|
## Common Pitfalls
|
||||||
|
|
||||||
|
**Avoid:**
|
||||||
|
- Creating plan before spec exists
|
||||||
|
- Missing spec requirements in plan
|
||||||
|
- Vague tasks ("implement feature")
|
||||||
|
- Missing file paths
|
||||||
|
- No test strategy
|
||||||
|
- Skipping error cases
|
||||||
|
- Ignoring edge cases
|
||||||
|
|
||||||
|
**Instead:**
|
||||||
|
- Always start from spec
|
||||||
|
- Cover 100% of spec requirements
|
||||||
|
- Make tasks concrete and specific
|
||||||
|
- Provide complete file paths
|
||||||
|
- Test every requirement
|
||||||
|
- Handle every error case
|
||||||
|
- Cover every edge case
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
**The plan is a bridge from spec to code.**
|
||||||
|
|
||||||
|
- Spec says WHAT
|
||||||
|
- Plan says HOW and WHERE and WHEN
|
||||||
|
- Code implements the plan
|
||||||
|
|
||||||
|
**A good plan makes implementation smooth.**
|
||||||
|
**A poor plan causes confusion and rework.**
|
||||||
|
|
||||||
|
**Validate against spec before proceeding.**
|
||||||
|
**100% coverage is non-negotiable.**
|
||||||
Reference in New Issue
Block a user