Files
gh-sjnims-requirements-expe…/commands/create-stories.md
2025-11-30 08:57:33 +08:00

217 lines
6.1 KiB
Markdown

---
name: re:create-stories
description: Break down an epic into user stories following INVEST criteria and create story issues in GitHub Projects
allowed-tools: [AskUserQuestion, Bash, Read]
---
# Create User Stories
Break down a selected epic into user stories following INVEST criteria and create story issues in GitHub Projects as children of the epic issue.
## Instructions
Load the **user-story-creation** skill to access methodology, INVEST criteria, and templates.
### Step 1: Select Epic to Break Down
1. **List Available Epics:**
- Use `gh project item-list [project-number] --format json`
- Filter for Type = "Epic"
- If no epics: Suggest running `/re:identify-epics` first, exit
2. **Present Epic Menu:**
Use AskUserQuestion:
- Question: "Which epic would you like to break down into user stories?"
- Header: "Select Epic"
- Options: One option per epic (label = epic name, description = brief desc from issue)
- multiSelect: false
3. **Read Epic Issue:**
- Use `gh issue view [epic-issue-number] --repo [repo] --json body,title`
- Extract epic content for story creation
### Step 2: Story Discovery & Drafting
Using user-story-creation skill methodology:
**Analyze Epic for User Journeys:**
- What tasks do users need to complete?
- What scenarios or use cases exist?
- Do different user types need different stories?
**Draft Initial Stories:**
Suggest 5-15 user stories for the epic using standard format:
```
As a [user type],
I want [goal],
So that [benefit].
```
Present suggestions:
```
Based on the epic "[Epic Name]", here are suggested user stories:
**Core Functionality:**
1. As a [user], I want [goal], so that [benefit]
2. As a [user], I want [goal], so that [benefit]
**Supporting Features:**
3. As a [user], I want [goal], so that [benefit]
**Edge Cases & Enhancements:**
4. As a [user], I want [goal], so that [benefit]
These cover the main user journeys - would you like to add, remove, or modify any?
```
### Step 3: Story Refinement
Use AskUserQuestion:
- Question: "Which stories should we include?"
- Header: "Story Selection"
- Options: One per suggested story (label = short title, description = full story)
- multiSelect: true
Then ask:
- Question: "Any additional stories to add?"
- Header: "Add Stories"
- Options: Custom text input
### Step 4: INVEST Criteria Check
For each selected story, verify INVEST criteria:
- **Independent**: Can be completed separately
- **Negotiable**: Details open for discussion
- **Valuable**: Delivers user value
- **Estimable**: Team can estimate size
- **Small**: Fits in 1-5 days
- **Testable**: Has clear acceptance criteria
If story fails INVEST, suggest refinements:
- Too large? Suggest splitting
- Not valuable? Suggest reframing or removing
- Not testable? Suggest adding acceptance criteria
### Step 5: Add Acceptance Criteria
For each story, define acceptance criteria. Use format from user-story-creation skill:
**Given-When-Then format:**
```
- Given [context]
When [action]
Then [outcome]
```
**Or checklist format:**
```
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Criterion 3
```
For each story, present suggested acceptance criteria and ask user to confirm/refine.
### Step 6: Create Story Issues
For each finalized story:
1. **Compile Story Description:**
Use template from user-story-creation skill's references: `${CLAUDE_PLUGIN_ROOT}/skills/user-story-creation/references/story-template.md`:
```markdown
## User Story: [Short title]
### Story
As a [user type],
I want [goal],
So that [benefit].
### Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Criterion 3
### Notes
[Any assumptions or constraints]
**Parent:** [Link to Epic Issue #]
```
2. **Create Issue:**
- Use `gh issue create --repo [repo] --title "[Story short title]" --body "[story description]" --label "type:story"`
- Capture issue number and URL
3. **Add to Project:**
- Use `gh project item-add [project-number] --owner [owner] --url [issue-url]`
4. **Set Custom Fields:**
- Type: Story
- Status: Not Started
- Priority: (Inherit from epic or set during prioritization)
5. **Link to Epic (Parent):**
- Add comment to story: "Parent: #[epic-issue-number]"
### Step 7: Story Count Validation
Check total number of stories:
- If < 3: Might be too few, epic might be too small
- If > 20: Might be too many, epic might be too large
- Ideal range: 5-15 stories per epic
### Step 8: Next Story or Next Phase
After creating all stories for current epic, ask:
Use AskUserQuestion:
- Question: "What would you like to do next?"
- Header: "Next Step"
- Options:
- "Create stories for another epic" (description: "Select a different epic and create stories")
- "Prioritize stories" (description: "Use MoSCoW to prioritize these stories")
- "Create tasks for a story" (description: "Break down a story into tasks")
- "Done for now" (description: "Stop here")
- multiSelect: false
**Handle response:**
- "Create stories for another epic": Restart from Step 1
- "Prioritize stories": Execute `/re:prioritize`
- "Create tasks for a story": Execute `/re:create-tasks`
- "Done for now": Show success message
### Step 9: Success Message
Display:
```
✅ Created [N] user stories for epic #[epic-num]!
Stories:
- #[num] - [Story 1 title]
- #[num] - [Story 2 title]
...
Next Steps:
1. Run `/re:prioritize` to rank stories
2. Run `/re:create-tasks` to break down highest-priority story
3. Review stories and refine acceptance criteria
4. Use `/re:status` to see progress
Pro tip: Tackle stories one at a time - implement, test, ship, repeat!
```
## Error Handling
- If no epics exist: Guide to `/re:identify-epics`
- If epic has no content: Suggest updating epic issue first
- If story violates INVEST: Provide refinement suggestions
- If too many/few stories: Guidance on right-sizing
## Notes
- Use user-story-creation skill for INVEST criteria and methodology
- Each story follows standard "As a... I want... So that..." format
- Minimum 3-5 acceptance criteria per story
- Stories should be 1-5 days of work
- Split large stories using techniques from skill
- Ensure every story delivers user value