Files
gh-schovi-claude-schovi-schovi/commands/plan.md
2025-11-30 08:54:26 +08:00

31 KiB

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)

╭─────────────────────────────────────────────────────────────────╮
│ ❌ 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)

╭─────────────────────────────────────────────────────────────────╮
│ ❌ 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:

╭─────────────────────────────────────────────╮
│ 📋 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:

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.