--- tags: ["workflow", "issue", "task", "bug", "spike", "conversational"] description: "Create standalone work items (TASK, BUG, or SPIKE) with AI-assisted type detection" argument-hint: "[\"description\"]" allowed-tools: ["Read", "Write", "Edit", "Glob", "Grep", "TodoWrite"] model: claude-sonnet-4-5 references_guidelines: - docs/development/workflows/task-workflow.md # Task implementation workflow - docs/development/workflows/bug-workflow.md # Bug fix workflow - docs/development/workflows/spike-workflow.md # Spike exploration workflow - docs/development/workflows/pm-workflows.md # PM artifact hierarchy --- # /issue Command **WHAT**: Create standalone work items (TASK, BUG, or SPIKE) through natural conversation. **WHY**: Single entry point for all standalone work items with AI-assisted type detection and optional spec linkage. **HOW**: Describe what you need, AI detects type, confirms with you, optionally links to spec, creates issue directory and skeleton file. ## Usage ```bash /issue # Start conversation /issue "Login crashes on Safari" # AI detects: BUG /issue "Add CSV export feature" # AI detects: TASK /issue "GraphQL vs REST?" # AI detects: SPIKE ``` ## ID Format **All issues use numeric IDs.** Type is determined by which file exists in the directory: ``` pm/issues/001-feature-name/TASK.md → Task (type from file) pm/issues/002-bug-name/BUG.md → Bug (type from file) pm/issues/003-spike-name/SPIKE.md → Spike (type from file) pm/issues/PROJ-123-name/TASK.md → External (Jira) task ``` This unified scheme: - Single counter for all local issues - External IDs (PROJ-123) work seamlessly - Type always determined from file, not ID prefix ## Type Detection AI detects issue type from description keywords: | Type | Keywords | Purpose | |------|----------|---------| | **BUG** | fix, broken, crash, error, regression, doesn't work, fails | Something is broken | | **SPIKE** | should we, which, can we, explore, vs, compare, evaluate, feasibility | Technical exploration | | **TASK** | add, implement, create, build, enhance (default) | New feature or enhancement | User can always override the detected type. ## Execution Flow ### 1. Gather Description If no description provided, ask: > "What do you need to do? Describe the work item." ### 2. Detect Type Analyze description for keywords: - BUG indicators: "fix", "broken", "crash", "error", "regression", "fails", "doesn't work" - SPIKE indicators: "should we", "which", "can we", "explore", "vs", "compare", "feasibility" - TASK: default if no BUG/SPIKE indicators Present detection: > "This sounds like a **BUG**. Create as issue 001? (yes / task / spike)" ### 3. Determine Next Issue Number ```bash # Count ALL existing issues (single counter) ls pm/issues/ | grep -E '^[0-9]{3}-' | sort -n | tail -1 # Extract number, increment for next ID # Format: 001, 002, 003, ... ``` ### 4. Ask About Spec Linkage > "Link to an existing spec? (no / SPEC-001 / SPEC-002 / ...)" If specs exist, list them. If user selects one, add `spec: SPEC-###` to frontmatter. ### 5. Conversational Details Based on type, gather required information using the appropriate template: **For TASK** (templates/task-template.md): - Description (already have from initial input) - Acceptance criteria - Technical notes (optional) **For BUG** (templates/bug-template.md): - Description (already have) - Steps to reproduce - Expected vs actual behavior - Severity (critical/high/medium/low) **For SPIKE** (templates/spike-template.md): - Questions to answer - Time box (max hours) - Deadline (optional) - Number of approaches to explore ### 6. Create Issue Create directory and file: ``` pm/issues/###-{slug}/ └── {TYPE}.md # TASK.md, BUG.md, or SPIKE.md (determines type) ``` **ID format**: 3-digit zero-padded number (001, 002, ...) **Slug**: kebab-case from description (max 50 chars) ### 7. Next Steps **For TASK/BUG:** > "Created issue 001 (task). Next: `/plan 001` to create implementation plan." **For SPIKE:** > "Created issue 001 (spike). Next: `/plan 001` to create exploration plans." If linked to spec, also update SPEC.md Tasks section. ## Example ``` User: /issue "Login page crashes when clicking submit on Safari mobile" AI: This sounds like a **BUG** - a crash that needs fixing. Create as issue 001? (yes / task / spike) User: yes AI: Link to an existing spec? - SPEC-001: User Authentication - SPEC-002: Mobile Experience - no (standalone) User: SPEC-001 AI: Let me gather a few more details for the bug report. Steps to reproduce? User: 1. Open login page on Safari iOS 2. Enter valid credentials 3. Click Submit button 4. Page crashes AI: Expected vs actual behavior? User: Expected: Login succeeds. Actual: White screen crash. AI: Severity? (critical / high / medium / low) User: high AI: Created issue 001 (bug): Login Safari Crash 📁 pm/issues/001-login-safari-crash/BUG.md 🔗 Linked to SPEC-001: User Authentication Next: /plan 001 ``` ## File Structure ``` pm/issues/ ├── 001-csv-export/ │ └── TASK.md # Type = task (from file) ├── 002-login-safari-crash/ │ └── BUG.md # Type = bug (from file) ├── 003-graphql-vs-rest/ │ └── SPIKE.md # Type = spike (from file) └── PROJ-123-oauth/ └── TASK.md # External Jira task ``` ## Type Detection from Files Commands detect issue type by which file exists: ```bash # In pm/issues/###-name/ directory: if [ -f "TASK.md" ]; then type="task" elif [ -f "BUG.md" ]; then type="bug" elif [ -f "SPIKE.md" ]; then type="spike" fi ``` This enables: - Numeric IDs for all local issues - External IDs (PROJ-123) work without modification - Type always authoritative from file content ## Integration **Workflow position:** ``` /issue → /plan {ID} → /implement {ID} → /complete {ID} ``` **Spec linkage:** - Standalone issues work without a spec - Linked issues appear in SPEC.md Tasks section - `spec: SPEC-###` in issue frontmatter enables traceability **Related commands:** - `/spec` - Create feature specs with multiple tasks (top-down) - `/plan` - Create implementation plan for any issue type - `/implement` - Execute plan phases - `/complete` - Complete issue per workflow requirements