--- description: Generate implementation specification from problem analysis with flexible input sources argument-hint: [jira-id|github-issue-url|--input path|--from-scratch description] [--work-dir PATH] allowed-tools: ["Read", "Grep", "Glob", "Task", "mcp__jira__*", "mcp__jetbrains__*", "Bash", "AskUserQuestion", "Write"] --- # Create Specification Workflow You are **creating an implementation specification** that bridges problem analysis and implementation. This spec transforms exploratory analysis into actionable, clear implementation guidance. --- ## ARGUMENT PARSING Parse command arguments using lib/argument-parser.md: ``` Configuration: command_name: "plan" command_label: "Create-Spec" positional: - name: "input" description: "Jira ID, GitHub URL, analysis file path, or description" required: false flags: - name: "--input" type: "path" description: "Analysis file path" - name: "--output" type: "path" description: "Custom output file path" - name: "--from-scratch" type: "string" description: "Create spec without analysis" - name: "--work-dir" type: "path" description: "Custom work directory" - name: "--no-file" type: "boolean" description: "Skip file creation, terminal only" - name: "--quiet" type: "boolean" description: "Suppress terminal output" - name: "--post-to-jira" type: "boolean" description: "Post spec as Jira comment" validation: - Check for conflicting flags (--input with --from-scratch) - Ensure at least one input source provided ``` **Store parsed values:** - `input_value`: Positional argument or --input value or --from-scratch value - `output_path`: --output value or null - `work_dir`: --work-dir value or null - `file_output`: true (unless --no-file) - `terminal_output`: true (unless --quiet) - `jira_posting`: true if --post-to-jira, else false - `from_scratch_mode`: true if --from-scratch flag present --- ## PHASE 1: INPUT VALIDATION & ANALYSIS EXTRACTION ### Step 1.1: Classify and Validate Input Type **Input classification:** 1. **Research File** (✅ VALID - --input flag) - Pattern: `--input ./research-*.md` - Has deep technical analysis with file:line references - Action: Read and extract research analysis 2. **Analysis File (Legacy)** (✅ VALID - --input flag) - Pattern: `--input ./analysis-*.md` - Has technical analysis with file:line references (from old analyze command) - Action: Read and extract analysis - Note: Legacy support, use research command for new workflows 3. **From Scratch** (✅ VALID - --from-scratch flag) - Pattern: `--from-scratch "description"` - Bypass research requirement - Action: Interactive minimal spec creation 4. **Conversation Analysis** (✅ VALID - no args, research/analysis in conversation) - Pattern: No arguments - Recent `/schovi:research` or `/schovi:analyze` output in conversation - Action: Extract from conversation history 5. **Brainstorm File** (❌ INVALID - requires research first) - Pattern: `--input ./brainstorm-*.md` - Has multiple solution options, lacks deep technical analysis - Action: STOP with guidance to run research first 6. **Raw Input** (❌ INVALID - Jira ID, GitHub URL, text description) - Patterns: `EC-1234`, `#123`, `owner/repo#123`, free text without --from-scratch - Requires research first - Action: STOP with guidance message **If input type is INVALID (Raw inputs or brainstorm without research):** Determine specific error type and display appropriate message: #### Error Type A: Raw Input (Jira, GitHub, text without flags) ```markdown ╭─────────────────────────────────────────────────────────────────╮ │ ❌ RESEARCH REQUIRED BEFORE SPECIFICATION GENERATION │ ╰─────────────────────────────────────────────────────────────────╯ **Problem**: Cannot generate actionable specification without deep technical research. **Input Detected**: [Describe what was provided - Jira ID, GitHub URL, description] **Why Research is Required**: Specifications need specific file locations, affected components, and technical context to generate actionable implementation tasks. Without research: ❌ Tasks will be vague: "Fix the bug" instead of "Update validation in Validator.ts:67" ❌ No clear entry points: Which files to change? ❌ Missing context: How do components interact? ❌ Unclear scope: What else might be affected? **Required Workflow**: 🧠 **Step 1: Brainstorm Options** (optional, recommended) Explore 2-3 solution approaches: /schovi:brainstorm [your-input] 🔬 **Step 2: Deep Research** (required) Analyze ONE specific approach: /schovi:research --input brainstorm-[id].md --option [N] OR directly: /schovi:research --input [your-input] 📋 **Step 3: Create Spec** (this command) Generate implementation plan: /schovi:plan --input research-[id].md **Quick Path** (skip brainstorm): # Direct deep research /schovi:research --input [jira-id|github-url|file] /schovi:plan --input research-[id].md **Simple Tasks** (skip research): # Create minimal spec without research /schovi:plan --from-scratch "Task description" **Examples**: # Wrong: Raw input /schovi:plan EC-1234 ❌ # Right: Research first /schovi:research --input EC-1234 /schovi:plan --input research-EC-1234.md ✅ # Or full workflow /schovi:brainstorm EC-1234 /schovi:research --input brainstorm-EC-1234.md --option 2 /schovi:plan --input research-EC-1234-option2.md ✅ ``` #### Error Type B: Brainstorm File (--input brainstorm-*.md) ```markdown ╭─────────────────────────────────────────────────────────────────╮ │ ❌ BRAINSTORM CANNOT BE USED DIRECTLY FOR SPECIFICATION │ ╰─────────────────────────────────────────────────────────────────╯ **Problem**: Brainstorm files contain multiple solution options without deep technical analysis. **Input Detected**: [brainstorm file path] **Why Research is Required**: Brainstorm provides 2-3 high-level solution options with broad feasibility analysis. To create actionable implementation tasks, you must: 1. Choose ONE option from brainstorm 2. Perform deep technical research on that option 3. Then create specification from research Brainstorm → Research → Plan (2-3 opts) (1 deep) (spec) **Required Actions**: 🔬 **Run research on chosen option**: # Research option 2 from brainstorm /schovi:research --input [brainstorm-file] --option 2 # Then create spec from research /schovi:plan --input research-[id]-option2.md **Available Options** (from your brainstorm): [List options from brainstorm file if readable] **Example**: # Wrong: Use brainstorm directly /schovi:plan --input brainstorm-EC-1234.md ❌ # Right: Research first, then plan /schovi:research --input brainstorm-EC-1234.md --option 2 /schovi:plan --input research-EC-1234-option2.md ✅ ``` **Workflow**: ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ Problem │ → │ Brainstorm │ → │ Research │ → │ Plan │ │ (Jira, GH) │ │ (2-3 opts) │ │ (1 deep) │ │ (Spec Gen) │ └─────────────┘ └──────────────┘ └──────────────┘ └─────────────┘ ↓ optional ↑ required └─────────────────────────┘ ╭─────────────────────────────────────────────────────────────────────────────╮ │ 💡 TIP: Run /schovi:research --input [input] to perform deep analysis first │ ╰─────────────────────────────────────────────────────────────────────────────╯ ``` **HALT EXECUTION** - Do not proceed. --- ### Step 1.2: Extract Analysis Content **Based on validated input type:** #### Option A: Research/Analysis File (--input flag provided) ``` 1. Acknowledge file read: 📄 **[Create-Spec]** Reading research from file: [PATH] 2. Use Read tool to load file contents: file_path: [PATH from --input flag] 3. If file doesn't exist or read fails: ❌ **[Create-Spec]** File not found: [PATH] Ask user for correct path or alternative input source. HALT EXECUTION 4. If file loads successfully: ✅ **[Create-Spec]** File loaded ([X] lines) 5. Extract key content based on file type: **For Research Files (research-*.md)**: - Problem/topic summary (from 📋 Problem/Topic Summary section) - Research focus and specific approach - Current state analysis with file:line references - Architecture overview with components - Technical deep dive (data flow, dependencies, code quality) - Implementation considerations (complexity, testing, risks) - Performance and security implications **For Analysis Files (analysis-*.md - legacy)**: - Problem summary (core issue, impact, severity) - Affected components with file:line references - User flow and data flow (if present) - Solution proposals with pros/cons - Technical details and dependencies 6. Verify content quality: - Check: Has file:line references? (Critical for actionable spec) - Check: Has affected components identified? - Check: Has problem description? - Check: Has technical context (architecture, dependencies)? If missing critical elements → Flag for enrichment in Step 1.3 ``` #### Option B: Conversation Analysis (no arguments, search conversation) ``` 1. Acknowledge search: 🔍 **[Create-Spec]** Searching conversation for research output... 2. Search conversation history (last 100 messages) for: - Messages containing "/schovi:research" command (priority) - Messages containing "/schovi:analyze" command (legacy) - Messages with research sections ("## 🔬 Research:", "## 📋 Problem/Topic Summary", etc.) - Messages with analysis sections ("## 🎯 1. PROBLEM SUMMARY", etc.) - File:line references in recent messages 3. If research/analysis found: ✅ **[Create-Spec]** Found research from [N messages ago] Extract same content as Option A (research or analysis format) 4. If NOT found: ⚠️ **[Create-Spec]** No research found in recent conversation Ask user to: 1. Run: /schovi:research --input [input] first 2. Provide research file: /schovi:plan --input ./research-[id].md 3. Create simple spec: /schovi:plan --from-scratch "description" HALT EXECUTION 5. Verify content quality (same checks as Option A) ``` #### Option C: From Scratch (--from-scratch flag provided) ``` 1. Acknowledge mode: ✨ **[Create-Spec]** Creating spec from scratch... 2. Parse provided description from --from-scratch argument 3. Use AskUserQuestion tool for interactive requirements gathering: Q1: "What is the primary goal of this task?" Options: "Bug fix", "New feature", "Refactoring", "Technical debt", "Other" Q2: "Which components or areas will be affected?" Free text input Q3: "What are the key requirements or acceptance criteria?" Free text input (bullet points encouraged) Q4: "Any known constraints or risks?" (Optional) Free text input 4. Acknowledge collected info: ✅ **[Create-Spec]** Requirements collected 5. Prepare minimal spec data: - Title: From description - Goal: From Q1 - Affected areas: From Q2 (high-level, no file:line refs) - Acceptance criteria: From Q3 - Constraints/risks: From Q4 6. Template type: "minimal" (no flows, no solution comparisons) 7. Skip enrichment step (from-scratch intentionally lacks technical detail) ``` --- ### Step 1.3: Optional Context Enrichment (If Analysis Lacks File:Line References) **Skip this step if:** - From-scratch mode is active - Analysis already has sufficient file:line references **If analysis is vague (missing specific file locations):** ``` 1. Detect gaps: - Count file:line references in analysis - If < 3 references found → Analysis may be too vague 2. Ask user for permission: ⚠️ **[Create-Spec]** The analysis appears to lack specific file locations. Options: 1. Enrich via quick codebase search (20-40 seconds, finds exact files) 2. Skip enrichment (spec will have high-level tasks) 3. Manually provide file locations Which would you prefer? [1/2/3] 3. If user chooses option 1 (Enrich): ⏳ **[Create-Spec]** Enriching analysis with file locations... Use Task tool with Explore subagent (quick mode): - Search for components mentioned in analysis - Find file locations for affected areas - Add file:line references to analysis ✅ **[Create-Spec]** Enrichment complete ([N] file references added) 4. If user chooses option 2 (Skip): ⚠️ **[Create-Spec]** Proceeding without enrichment (spec will be high-level) 5. If user chooses option 3 (Manual): Ask user to provide file locations, then merge with analysis ``` --- ### Step 1.4: Detect User's Chosen Approach (If Multiple Solutions in Analysis) **If analysis contains multiple solution options:** ``` 1. Search for user preference in: - User messages after analysis - Jira comments (if from Jira) - File content (if from file) 2. Look for patterns: - "Let's go with Option [N]" - "I prefer Option [N]" - "Option [N] makes most sense" 3. If preference found: ✅ **[Create-Spec]** Detected preference: Option [N] - [Solution Name] 4. If preference NOT found: ⚠️ **[Create-Spec]** Multiple options available, no clear preference Use AskUserQuestion tool: "Which approach should I use for the spec?" Options (from analysis): - Option 1: [Name] - [Brief description] - Option 2: [Name] - [Brief description] - Option 3: [Name] - [Brief description] Wait for user selection 5. Confirm selection: 🎯 **[Create-Spec]** Selected approach: Option [N] - [Solution Name] ``` **If single approach or from-scratch mode:** - Skip selection step - Use the single approach or minimal template --- ### Step 1.5: Work Folder Resolution Use lib/work-folder.md: ``` Configuration: mode: "auto-detect" identifier: [Jira ID from analysis, or null] description: [Problem title from analysis] workflow_type: "full" current_step: "plan" custom_work_dir: [work_dir from arguments, or null] Output (store for later phases): work_folder: [path from library, e.g., ".WIP/EC-1234-feature"] metadata_file: [path from library, e.g., ".WIP/EC-1234-feature/.metadata.json"] output_file: [path from library, e.g., ".WIP/EC-1234-feature/plan-EC-1234.md"] identifier: [identifier from library] is_new: [true/false from library] ``` --- **Phase 1 Validation Checkpoint:** ``` - [ ] Input type validated (analysis file / conversation / from-scratch) - [ ] If raw input: STOPPED with guidance (not proceeded) - [ ] If valid: Analysis content extracted - [ ] Analysis quality checked (file:line refs present or enriched) - [ ] Enrichment decision made (yes/no/manual/skipped) - [ ] Chosen approach identified (if multiple options) - [ ] Work folder resolved (if applicable) ``` --- ## PHASE 1.5: LOAD FRAGMENT CONTEXT (if fragments exist) **Objective**: Load existing fragment registry and details to pass to spec-generator for acceptance criteria traceability. **Use lib/fragment-loader.md**: ### Step 1.5.1: Check if fragments exist (Operation 1) ``` work_folder: [work_folder from Phase 1] ``` **If fragments don't exist**: - Skip this phase, proceed to Phase 2 - Spec generation works without fragment context **If fragments exist**: - Continue to next steps ### Step 1.5.2: Load fragment registry (Operation 2) ``` work_folder: [work_folder path] ``` **Parse registry for**: - Count of assumptions (A-#) - Count of risks (R-#) - Count of metrics (M-#) **Store**: - `fragments_exist`: true - `assumption_count`: N - `risk_count`: N - `metric_count`: N ### Step 1.5.3: Load all assumptions (Operation 4) ``` work_folder: [work_folder] fragment_type: "A" ``` **For each assumption**: - Extract ID (A-1, A-2, ...) - Extract statement - Extract current status (pending, validated, failed) **Store**: - `assumptions_list`: [ {id: "A-1", statement: "...", status: "validated"}, {id: "A-2", statement: "...", status: "pending"} ] ### Step 1.5.4: Load all risks (Operation 4) ``` work_folder: [work_folder] fragment_type: "R" ``` **For each risk**: - Extract ID (R-1, R-2, ...) - Extract description - Extract impact/probability **Store**: - `risks_list`: [ {id: "R-1", description: "...", impact: "High", probability: "Medium"}, {id: "R-2", description: "...", impact: "Medium", probability: "Low"} ] ### Step 1.5.5: Load all metrics (Operation 4) ``` work_folder: [work_folder] fragment_type: "M" ``` **For each metric**: - Extract ID (M-1, M-2, ...) - Extract description - Extract target **Store**: - `metrics_list`: [ {id: "M-1", description: "...", target: "p95 < 200ms"}, {id: "M-2", description: "...", target: "< 0.1% error rate"} ] **After Phase 1.5**: - Fragment context loaded (if exists) - Ready to pass summaries to spec-generator --- ## PHASE 2: SPEC GENERATION ### Step 2.1: Prepare Input Context for Spec Generator Build structured input context from analysis extraction: ```markdown ## Input Context ### Problem Summary [Problem description from analysis - 2-4 sentences] ### Chosen Approach [If multiple options existed: "Option [N]: [Name]"] [Detailed approach description from analysis] ### Technical Details - Affected files: [List with file:line references from analysis] - User flow: [Flow description if present] - Data flow: [Flow description if present] - Dependencies: [List of dependencies if identified] ### Fragment Context (if fragments_exist == true) **Validated Assumptions** (from research): [For each in assumptions_list:] - [id]: [statement] - Status: [status] Example: - A-1: Database supports transactions - Status: ✅ Validated - A-2: Frontend handles async responses - Status: ✅ Validated - A-3: External API supports webhooks - Status: ⏳ Pending **Identified Risks** (from research): [For each in risks_list:] - [id]: [description] - Impact: [impact], Probability: [probability] Example: - R-1: Database migration may cause downtime - Impact: High, Probability: Medium - R-2: Caching layer consistency issues - Impact: Medium, Probability: Low **Defined Metrics** (from research): [For each in metrics_list:] - [id]: [description] - Target: [target] Example: - M-1: API response time - Target: p95 < 200ms - M-2: Error rate during rollout - Target: < 0.1% **Traceability Guidance**: Create acceptance criteria that: 1. Validate pending assumptions (link with "validates: A-#") 2. Mitigate identified risks (link with "mitigates: R-#") 3. Verify metrics are met (link with "verifies: M-#") [If fragments_exist == false:] No fragment context available. Spec generator will create acceptance criteria without fragment linkage. ### User Notes [Any user preferences, comments, or special requirements] ### Metadata - Jira ID: [ID or N/A] - Created date: [Today's date in YYYY-MM-DD format] - Created by: Claude Code - Template type: [full or minimal] - Fragments available: [true/false] ``` **Template type selection:** - **"full"**: When detailed analysis exists (file:line refs, flows, multiple options considered) - **"minimal"**: When from-scratch mode or simple tasks without deep analysis ### Step 2.2: Spawn Spec Generator Subagent ``` ⏳ **[Create-Spec]** Generating implementation specification... ``` Use Task tool to spawn spec-generator subagent: ``` Task tool parameters: subagent_type: "schovi:spec-generator:spec-generator" description: "Generate implementation spec" prompt: """ [Full input context from Step 2.1, formatted as markdown with all sections] """ ``` **Important**: Use three-part naming format `schovi:spec-generator:spec-generator` for proper subagent resolution. ### Step 2.3: Receive and Validate Spec The subagent will return spec with visual header/footer: ```markdown ╭─────────────────────────────────────────────╮ │ 📋 SPEC GENERATOR │ ╰─────────────────────────────────────────────╯ [FULL SPEC CONTENT - YAML frontmatter + all sections] ╭─────────────────────────────────────────────╮ ✅ Spec generated | ~[X] tokens | [Y] lines ╰─────────────────────────────────────────────╯ ``` **Validation checks:** - [ ] Spec has YAML frontmatter with title, status, jira_id - [ ] Decision rationale present (full) or goal statement (minimal) - [ ] Implementation tasks are specific and actionable with checkboxes - [ ] Acceptance criteria are testable with checkboxes - [ ] Testing strategy included - [ ] File references use `file:line` format where applicable - [ ] Total spec is under 3000 tokens - [ ] Markdown formatting is valid **If validation fails:** ``` ⚠️ **[Create-Spec]** Spec validation failed: [Issue description] Regenerating with more specific guidance... ``` Re-invoke Task tool with additional clarification in prompt. **If subagent fails completely:** ``` ❌ **[Create-Spec]** Spec generation failed: [Error message] Cannot proceed without specification. Please check: - Analysis content is complete - Technical details are present - File references are available Would you like to: 1. Try from-scratch mode: /schovi:plan --from-scratch "description" 2. Provide more analysis detail 3. Create spec manually ``` HALT EXECUTION - Do not attempt fallback generation in main context. **If successful:** ``` ✅ **[Create-Spec]** Specification generated ([X] lines, [Y] tasks, [Z] criteria) ``` Extract spec content (strip visual header/footer) and store for Phase 3 output handling. --- ## PHASE 3: OUTPUT HANDLING Use lib/output-handler.md: ``` Configuration: content: [Generated spec from Phase 2] content_type: "plan" command_label: "Create-Spec" flags: terminal_output: [terminal_output from argument parsing] file_output: [file_output from argument parsing] jira_posting: [jira_posting from argument parsing] file_config: output_path: [output_path from arguments, or null for auto] default_basename: "plan" work_folder: [work_folder from Step 1.5, or null] jira_id: [from analysis, or null] workflow_step: "plan" jira_config: jira_id: [from analysis, or null] cloud_id: "productboard.atlassian.net" jira_title: "Implementation Specification" jira_author: "Claude Code" Output (store result for Phase 4): output_result: { terminal_displayed: [true/false], file_created: [true/false], file_path: [path or null], jira_posted: [true/false], metadata_updated: [true/false] } ``` --- ## PHASE 3.5: CREATE AC/EC FRAGMENTS (if fragments exist) **Objective**: Parse spec output for acceptance criteria and exit criteria, create fragment files for traceability. **If `fragments_exist == false` from Phase 1.5**: - Skip this phase, proceed to Phase 4 - Spec works without fragments **If `fragments_exist == true`**: **Use lib/fragment-loader.md**: Parse spec output (from Phase 2) for: 1. **Acceptance Criteria** 2. **Exit Criteria** (phase gates) ### Step 3.5.1: Create Acceptance Criteria Fragments **Parse spec** for acceptance criteria section: - Look for lines starting with "- [ ]" under "Acceptance Criteria" - Extract criterion text - Extract fragment references: `*(validates: A-#, mitigates: R-#, verifies: M-#)*` **For each AC**: **Get next AC number** (Operation 11): ``` work_folder: [work_folder] fragment_type: "AC" ``` Returns next_number (e.g., 1, 2, 3, ...) **Create AC fragment** (Operation 7): ``` work_folder: [work_folder] fragment_type: "AC" fragment_number: [next_number] fragment_data: { statement: [criterion text], validates: [A-IDs extracted from references], mitigates: [R-IDs extracted from references], verifies: [M-IDs extracted from references], verification_method: [extracted from spec if available], stage: "plan", timestamp: [current_timestamp] } ``` **Get current timestamp**: ```bash date -u +"%Y-%m-%dT%H:%M:%SZ" ``` **Result**: New fragment file created (e.g., `fragments/AC-1.md`, `fragments/AC-2.md`, ...) ### Step 3.5.2: Create Exit Criteria Fragments **Parse spec** for exit criteria by phase: - Look for exit criteria in implementation plan (usually in phases or deployment plan) - Extract criterion text - Extract phase name - Extract which ACs it validates **For each EC**: **Get next EC number** (Operation 11): ``` work_folder: [work_folder] fragment_type: "EC" ``` **Create EC fragment** (Operation 7): ``` work_folder: [work_folder] fragment_type: "EC" fragment_number: [next_number] fragment_data: { statement: [criterion text], phase: [phase name - e.g., "Phase 1", "Pre-deployment"], validates: [AC-IDs this criterion proves], verification_method: [how to verify - e.g., command, test], stage: "plan", timestamp: [current_timestamp] } ``` **Result**: New fragment file created (e.g., `fragments/EC-1.md`, `fragments/EC-2.md`, ...) ### Step 3.5.3: Update Fragment Registry (Operation 9) **Update registry** with all new fragments: - New acceptance criteria added (AC-1, AC-2, ...) - New exit criteria added (EC-1, EC-2, ...) - Summary counts updated **Update**: ``` work_folder: [work_folder] identifier: [identifier] updates: [all AC and EC fragment updates from above steps] ``` **Result**: `fragments.md` registry updated with AC/EC fragments **If fragment creation fails**: - Log warning but don't block command - Continue to Phase 4 --- ## PHASE 4: COMPLETION & NEXT STEPS Use lib/completion-handler.md: ``` Configuration: command_type: "plan" command_label: "Create-Spec" summary_data: problem: [One-line problem summary from analysis or from-scratch input] output_files: [file_path from output_result if file_created] jira_posted: [jira_posted from output_result] jira_id: [from analysis or null] work_folder: [work_folder from Step 1.5 or null] terminal_only: [true if file_output was false] command_specific_data: spec_title: [Title from generated spec] template: "Full" | "Minimal" [from Phase 2] task_count: [Count of implementation tasks in spec] criteria_count: [Count of acceptance criteria in spec] test_count: [Count of test scenarios in spec] This will: - Display completion summary box - Suggest next steps (review spec, start implementation, share with team) - Wait for user direction ``` --- ## QUALITY GATES CHECKLIST Before presenting the spec, verify ALL of these are complete: ### Input Validation (Phase 1) - [ ] Input type classified correctly (analysis file, conversation, from-scratch, or raw) - [ ] If raw input: STOPPED with clear guidance message (not proceeded to spec generation) - [ ] If valid input: Analysis content successfully extracted - [ ] User's chosen approach identified (or prompted if multiple options) - [ ] Enrichment decision made (if applicable): yes/no/manual/skipped ### Fragment Loading (Phase 1.5, if applicable) - [ ] Fragment existence checked (if work folder available) - [ ] If fragments exist: Assumptions loaded (A-#) - [ ] If fragments exist: Risks loaded (R-#) - [ ] If fragments exist: Metrics loaded (M-#) - [ ] Fragment context passed to spec-generator (if applicable) ### Spec Generation (Phase 2) - [ ] Spec generated via spec-generator subagent (context isolated) - [ ] Spec contains title and metadata - [ ] Decision rationale or goal statement present - [ ] Implementation tasks are specific and actionable (checkboxes) - [ ] Acceptance criteria are testable and clear - [ ] If fragments provided: Acceptance criteria reference fragment IDs (validates: A-#, mitigates: R-#, verifies: M-#) - [ ] Testing strategy included (unit/integration/manual) - [ ] Risks documented (if applicable for full template) - [ ] File references use `file:line` format where applicable ### Output Handling (Phase 3) - [ ] Terminal output displayed (unless --quiet) - [ ] File written to correct path (unless --no-file) - [ ] Jira posted successfully (if --post-to-jira flag) - [ ] All output operations confirmed with success messages - [ ] Error handling executed for any failed operations ### Fragment Creation (Phase 3.5, if applicable) - [ ] If fragments exist: Acceptance criteria fragments created (AC-1.md, AC-2.md, ...) - [ ] If fragments exist: Exit criteria fragments created (EC-1.md, EC-2.md, ...) - [ ] If fragments exist: Fragment registry updated with AC/EC counts - [ ] Fragment IDs properly linked to assumptions/risks/metrics ### Quality - [ ] Spec is actionable (can be implemented from it) - [ ] Spec is complete (all required sections present) - [ ] Spec is clear (no ambiguous requirements) - [ ] Spec matches chosen approach from analysis --- ## INTERACTION GUIDELINES **Communication Style**: - Be clear and concise - spec generation is straightforward - Use visual formatting (boxes, emojis) for status updates - Provide helpful next steps after completion - Always confirm file paths and operations **Handling Errors**: - If input source fails, offer alternatives - If file write fails, try alternate path or terminal-only - If Jira post fails, confirm file was still saved locally - Never fail completely - always provide partial output **Flexibility**: - Support multiple input sources (conversation, Jira, file, scratch) - Support multiple output destinations (terminal, file, Jira) - Handle both full and minimal spec templates - Work with or without Jira integration **Proactive Guidance**: After creating spec, suggest: - "Need me to start the implementation workspace?" - "Want me to break down any section further?" - "Should I create implementation tasks in Jira?" --- **Command Version**: 2.0 (Fragment System Integration) **Last Updated**: 2025-11-08 **Dependencies**: - `lib/argument-parser.md` - `lib/output-handler.md` - `lib/completion-handler.md` - `lib/fragment-loader.md` (NEW: Fragment loading and creation) - `schovi/agents/spec-generator/AGENT.md` - `schovi/templates/spec/full.md` **Changelog**: v2.0 - Added fragment system integration: loads A/R/M fragments, passes to spec-generator, creates AC/EC fragments --- ## 🚀 BEGIN WORKFLOW Start with Argument Parsing, then proceed to Phase 1: Input Validation & Analysis Extraction.