# Specification Writing Guide This file provides complete details for creating specifications. Only load when user needs template details or writing guidance. ## When to Load This File - User asks: "What fields does a spec have?", "Show me the template" - User wants examples of well-written specs - User is confused about spec format - Creating first spec and needs structure guidance ## The Markdown Specification Template ```markdown --- id: spec-TYPE-NNN type: feature # feature, bugfix, refactor, documentation, performance, security, testing status: draft priority: medium # critical, high, medium, or low created_at: 2025-01-10T10:00:00 updated_at: 2025-01-10T10:00:00 --- # Descriptive Title ## Description What needs to be done. Be specific and detailed. Multiple paragraphs are fine. ## Rationale Why this is needed. What problem it solves. Business or technical justification. ## Dependencies - **Requires**: spec-001, spec-002 (specs that must be completed first) - **Blocks**: spec-003 (specs that can't start until this is done) - **Related**: spec-004 (related specs for context) ## Risks - Risk description if any - Another risk if applicable ## Success Metrics - Measurable success metric - Another measurable metric ## Acceptance Criteria - [ ] User can do X - [ ] System performs Y - [ ] Feature handles Z - [ ] Error cases handled gracefully - [ ] Performance meets requirements ## Test Scenarios ### Happy path test **Given**: Initial state **When**: Action taken **Then**: Expected result ### Error case test **Given**: Invalid input **When**: Action attempted **Then**: Appropriate error message shown ## Metadata estimated_hours: 8 technical_notes: Any technical considerations branch: feat/feature-name (added when work starts) ``` ## Spec ID Generation I generate unique IDs based on type and existing specs: ```yaml id_patterns: feature: "spec-feature-NNN" bugfix: "spec-bugfix-NNN" refactor: "spec-refactor-NNN" performance: "spec-perf-NNN" security: "spec-sec-NNN" testing: "spec-test-NNN" documentation: "spec-docs-NNN" generation_process: 1. Check existing specs in draft/ folder 2. Find highest number for that type 3. Increment by 1 4. Zero-pad to 3 digits: 001, 002, etc. ``` **Example**: If `spec-feature-001` and `spec-feature-002` exist, next is `spec-feature-003` ## Field Descriptions ### Frontmatter Fields **id** (required): Unique identifier - Format: `spec-TYPE-NNN` - Auto-generated from type and sequence - Never changes once created **type** (required): Category of work - `feature` - New functionality - `bugfix` - Fix broken behavior - `refactor` - Improve code structure - `documentation` - Docs/comments - `performance` - Speed/efficiency - `security` - Security improvements - `testing` - Test coverage **status** (auto-managed): Current state - `draft` - Not started - `active` - Work in progress - `completed` - Finished - **Folder determines status**, not this field **priority** (required): Urgency level - `critical` - Drop everything, do this now - `high` - Important, schedule soon - `medium` - Normal priority - `low` - Nice to have, do when time allows **created_at** / **updated_at** (auto): ISO timestamps - Format: `2025-01-10T14:30:00` - Created when spec is written - Updated when spec is modified ### Content Sections **Title** (required): Clear, descriptive name - Bad: "Auth", "Fix bug", "Update code" - Good: "User Authentication System", "Fix memory leak in processor", "Refactor payment validation logic" **Description** (required): What needs to be done - Be specific about functionality - Include scope and boundaries - Mention key components affected - Multiple paragraphs encouraged **Rationale** (required): Why this matters - Business value or technical benefit - Problem being solved - Impact if not done **Dependencies** (optional): Related specs - **Requires**: Must be completed first - **Blocks**: Prevents other specs from starting - **Related**: Provides context **Risks** (optional): Potential issues - Technical risks - Schedule risks - Dependency risks **Success Metrics** (optional): Measurable outcomes - Performance targets - Usage metrics - Quality metrics **Acceptance Criteria** (required): How to know it's done - Use checkboxes: `- [ ]` and `- [x]` - Be specific and testable - Include error cases - Minimum 3 criteria recommended **Test Scenarios** (required): How to verify - Happy path (success case) - Error cases (failure handling) - Edge cases (boundary conditions) - Use Given/When/Then format **Metadata** (optional): Additional info - `estimated_hours`: Time estimate - `technical_notes`: Implementation notes - `branch`: Git branch name ## Writing Process ### Step 1: Interactive Requirements Gathering **ALWAYS ask clarifying questions using AskUserQuestion tool:** #### Required Information If any of these are missing, ask: - **Title**: "What are we building/fixing?" (if not provided) - **Type**: Present options using AskUserQuestion - Feature, Bugfix, Refactor, Performance, Security, Testing, Documentation - **Description**: "What exactly needs to be done?" - **Scope**: "Should this include [related functionality]?" - **Priority**: Ask to choose - Critical, High, Medium, or Low? #### Decision Points When multiple approaches exist, use AskUserQuestion: **Example Question Pattern:** ```yaml question: "I see multiple approaches for implementing [feature]. Which direction should we take?" options: - label: "Approach A: [name]" description: "[description with trade-offs like: Simple but limited, Fast but complex, etc.]" - label: "Approach B: [name]" description: "[description with trade-offs]" - label: "Approach C: [name]" description: "[description with trade-offs]" ``` #### Trade-off Clarifications When design choices exist, ask user to decide: - "Optimize for speed or simplicity?" - "Comprehensive feature OR minimal initial version?" - "Integrate with [existing system] OR standalone?" - "High performance OR easier maintenance?" **Always use structured questions (AskUserQuestion tool) rather than open-ended prompts.** ### Step 2: Generate Unique ID Check existing specs and create next available ID: ```bash # Check what exists ls .quaestor/specs/draft/spec-feature-*.md # If spec-feature-001 and spec-feature-002 exist # Create spec-feature-003 ``` ### Step 3: Fill Template with Actual Values **Always use real values, never placeholders:** ✅ Good: ```yaml id: spec-feature-001 title: User Authentication System description: Implement secure login with JWT tokens and password hashing ``` ❌ Bad: ```yaml id: [SPEC_ID] title: [Feature Title] description: TODO: Add description ``` ### Step 4: Create Checkboxes for Criteria Make criteria specific and testable: ✅ Good: ```markdown - [ ] User can login with email and password - [ ] Invalid credentials show error within 500ms - [ ] Session expires after 24 hours - [ ] Logout clears session completely ``` ❌ Bad: ```markdown - [ ] Login works - [ ] Errors handled - [ ] Security is good ``` ### Step 5: Save to Draft Folder Write to `.quaestor/specs/draft/[spec-id].md` All specs start in draft/ regardless of when they'll be worked on. ### Step 6: Report Success Tell user: - Spec ID created - File location - Next steps: "Run `/impl spec-feature-001` to start implementation" ## Important Rules ### ✅ Always Use Actual Values Never use placeholders like `[TODO]`, `[REPLACE THIS]`, `[SPEC_ID]` ### ✅ Generate Sequential IDs Check existing files to find next number for each type ### ✅ Include Test Scenarios Every spec needs at least: 1. Happy path test 2. Error case test ### ✅ Make Criteria Testable Each acceptance criterion should be verifiable: - Can you write a test for it? - Is success/failure clear? - Is it specific enough? ## Examples ### Example 1: Feature Spec **User request**: "I want to add email notifications when orders are placed" **Created spec**: `spec-feature-001.md` ```markdown --- id: spec-feature-001 type: feature status: draft priority: high created_at: 2025-01-19T10:30:00 updated_at: 2025-01-19T10:30:00 --- # Order Confirmation Email Notifications ## Description Send automated email notifications to customers when they successfully place an order. The email should include order details (items, quantities, total price), estimated delivery date, and a link to track the order. ## Rationale Customers need immediate confirmation that their order was received. This reduces support inquiries about order status and provides professional customer experience. Industry standard for e-commerce platforms. ## Dependencies - **Requires**: spec-email-001 (Email service integration) - **Related**: spec-order-003 (Order processing system) ## Risks - Email delivery failures (use queuing system) - High volume during peak times (rate limiting needed) ## Success Metrics - 95% email delivery rate within 30 seconds - Less than 1% bounce rate - Customer satisfaction score improvement ## Acceptance Criteria - [ ] Email sent within 30 seconds of order placement - [ ] Email contains all order items with prices - [ ] Email includes estimated delivery date - [ ] Tracking link works and shows order status - [ ] Failed emails retry 3 times with exponential backoff - [ ] Admin dashboard shows email delivery status ## Test Scenarios ### Successful order email **Given**: User places order successfully **When**: Order is confirmed in database **Then**: Email is queued and sent within 30 seconds ### Email delivery failure **Given**: Email service is temporarily down **When**: System attempts to send email **Then**: Email is queued for retry with exponential backoff ### High volume scenario **Given**: 1000 orders placed simultaneously **When**: System processes order confirmations **Then**: All emails delivered within 5 minutes, no failures ## Metadata estimated_hours: 12 technical_notes: Use SendGrid API, implement queue with Redis ``` ### Example 2: Bugfix Spec **User request**: "Memory leak in background processor needs fixing" **Created spec**: `spec-bugfix-001.md` ```markdown --- id: spec-bugfix-001 type: bugfix status: draft priority: critical created_at: 2025-01-19T11:00:00 updated_at: 2025-01-19T11:00:00 --- # Fix Memory Leak in Background Job Processor ## Description The background job processor accumulates memory over time and doesn't release it after job completion. Memory usage grows from 200MB to 2GB+ over 24 hours, eventually causing OOM crashes. Affects job processing for order fulfillment and email sending. ## Rationale Critical production issue causing service restarts every 12 hours. Impacts order processing reliability and customer experience. Root cause is database connections not being properly closed after job completion. ## Dependencies None ## Risks - Fix might affect job processing throughput - Need careful testing to avoid breaking existing jobs ## Success Metrics - Memory usage stable at < 300MB over 72 hours - No OOM crashes - Job processing throughput unchanged ## Acceptance Criteria - [ ] Memory usage remains stable over 72-hour test period - [ ] Database connections properly closed after each job - [ ] No memory leaks detected by profiler - [ ] All existing job types still process correctly - [ ] Performance benchmarks show no regression ## Test Scenarios ### Memory stability test **Given**: Background processor running for 72 hours **When**: 10,000 jobs processed during test period **Then**: Memory usage remains under 300MB ### Connection cleanup verification **Given**: Single job completes **When**: Check database connection pool **Then**: Connection is returned to pool and not held ## Metadata estimated_hours: 6 technical_notes: Use context managers for DB connections, add memory profiling ``` ### Example 3: Refactor Spec **User request**: "Authentication logic is spread across 5 files, needs consolidation" **Created spec**: `spec-refactor-001.md` ```markdown --- id: spec-refactor-001 type: refactor status: draft priority: medium created_at: 2025-01-19T11:30:00 updated_at: 2025-01-19T11:30:00 --- # Consolidate Authentication Logic ## Description Authentication logic is currently scattered across 5 different files (api.py, middleware.py, services.py, utils.py, validators.py). This makes it hard to maintain, test, and understand the auth flow. Consolidate into a single AuthService class with clear responsibilities. ## Rationale Technical debt causing maintenance issues. Recent security update required changes in 5 places. New developer onboarding takes longer due to scattered logic. Consolidation will improve testability and make security audits easier. ## Dependencies None (existing functionality must continue working) ## Risks - Regression in auth functionality - Need comprehensive test coverage before refactoring ## Success Metrics - Auth logic in single module with < 300 lines - Test coverage > 90% - No behavior changes (all existing tests pass) - Reduced complexity score ## Acceptance Criteria - [ ] All auth logic moved to single AuthService class - [ ] Existing functionality unchanged (all tests pass) - [ ] Test coverage increased to > 90% - [ ] Documentation updated with new structure - [ ] Code review approved by security team ## Test Scenarios ### Existing functionality preserved **Given**: Complete existing test suite **When**: Refactored code deployed **Then**: All 127 existing tests pass without modification ### Improved testability **Given**: New AuthService class **When**: Write tests for edge cases **Then**: Can test authentication logic in isolation ## Metadata estimated_hours: 16 technical_notes: Start with comprehensive test coverage, refactor incrementally ``` ## Tips for Best Specs ### Be Specific - Instead of: "Add authentication" - Better: "Add email/password authentication with JWT tokens, 24-hour session expiry, and password reset via email" ### Define Success Clearly - Bad: "System works" - Good: "User can login in < 2 seconds, sessions persist across browser restarts, invalid credentials show within 500ms" ### Break Down Large Features If > 5 acceptance criteria, consider splitting: - `spec-auth-001`: Basic login/logout - `spec-auth-002`: Password reset - `spec-auth-003`: OAuth integration ### Use Given/When/Then for Tests Follows BDD format that's clear and testable: ``` Given: Initial state When: Action taken Then: Expected result ``` --- *This guide provides complete specification writing details. Return to SKILL.md for overview or LIFECYCLE.md for management operations.*