Initial commit
This commit is contained in:
464
commands/sng-issue.md
Normal file
464
commands/sng-issue.md
Normal file
@@ -0,0 +1,464 @@
|
||||
# GitHub Issue Management Command
|
||||
|
||||
You are helping the user create, update, and manage GitHub issues following Sngular's project management best practices.
|
||||
|
||||
## Instructions
|
||||
|
||||
1. **Determine the action**:
|
||||
- Create a new issue
|
||||
- Update an existing issue
|
||||
- Close an issue
|
||||
- List issues with filters
|
||||
- Link related issues
|
||||
- Bulk operations on issues
|
||||
|
||||
2. **Verify GitHub repository**:
|
||||
- Check if in a git repository
|
||||
- Verify GitHub remote is configured
|
||||
- Confirm user has `gh` CLI installed and authenticated
|
||||
|
||||
3. **Gather issue details**:
|
||||
- Title (clear, concise, action-oriented)
|
||||
- Description (problem statement, context, impact)
|
||||
- Labels (type, priority, component, status)
|
||||
- Assignees (who should work on this)
|
||||
- Milestone (which release or sprint)
|
||||
- Projects (which project board)
|
||||
|
||||
## Issue Creation
|
||||
|
||||
### Issue Template Structure
|
||||
|
||||
```markdown
|
||||
## Problem Statement
|
||||
Clear description of the issue, bug, or feature request.
|
||||
|
||||
## Current Behavior
|
||||
What is happening now? (for bugs)
|
||||
|
||||
## Expected Behavior
|
||||
What should happen instead?
|
||||
|
||||
## Steps to Reproduce
|
||||
(For bugs)
|
||||
1. Step 1
|
||||
2. Step 2
|
||||
3. Step 3
|
||||
|
||||
## Proposed Solution
|
||||
(For features)
|
||||
High-level approach to implementing this feature.
|
||||
|
||||
## Acceptance Criteria
|
||||
- [ ] Criterion 1
|
||||
- [ ] Criterion 2
|
||||
- [ ] Criterion 3
|
||||
|
||||
## Technical Details
|
||||
- Affected components:
|
||||
- Dependencies:
|
||||
- Estimated effort:
|
||||
|
||||
## Additional Context
|
||||
Screenshots, logs, or relevant information.
|
||||
|
||||
## Related Issues
|
||||
- Relates to #123
|
||||
- Blocks #456
|
||||
- Blocked by #789
|
||||
```
|
||||
|
||||
### Issue Types & Labels
|
||||
|
||||
**Type Labels**:
|
||||
- `bug` - Something isn't working
|
||||
- `feature` - New feature or enhancement
|
||||
- `documentation` - Documentation improvements
|
||||
- `refactor` - Code refactoring
|
||||
- `performance` - Performance improvements
|
||||
- `security` - Security-related issues
|
||||
- `tech-debt` - Technical debt
|
||||
|
||||
**Priority Labels**:
|
||||
- `priority: critical` - Urgent, blocking work
|
||||
- `priority: high` - Important, should be done soon
|
||||
- `priority: medium` - Normal priority
|
||||
- `priority: low` - Nice to have
|
||||
|
||||
**Status Labels**:
|
||||
- `status: triage` - Needs initial review
|
||||
- `status: ready` - Ready for development
|
||||
- `status: in-progress` - Currently being worked on
|
||||
- `status: review` - In code review
|
||||
- `status: blocked` - Blocked by dependencies
|
||||
- `status: on-hold` - Paused temporarily
|
||||
|
||||
**Component Labels**:
|
||||
- `frontend` - UI/UX related
|
||||
- `backend` - Server-side code
|
||||
- `database` - Database changes
|
||||
- `devops` - Infrastructure/deployment
|
||||
- `api` - API changes
|
||||
|
||||
## GitHub CLI Commands
|
||||
|
||||
### Creating Issues
|
||||
|
||||
```bash
|
||||
# Create basic issue
|
||||
gh issue create --title "Issue title" --body "Issue description"
|
||||
|
||||
# Create issue with labels and assignee
|
||||
gh issue create \
|
||||
--title "Add user authentication" \
|
||||
--body "$(cat issue-template.md)" \
|
||||
--label "feature,backend,priority: high" \
|
||||
--assignee username
|
||||
|
||||
# Create issue with milestone
|
||||
gh issue create \
|
||||
--title "Fix login bug" \
|
||||
--body "Description" \
|
||||
--label "bug,priority: critical" \
|
||||
--milestone "Sprint 24"
|
||||
|
||||
# Create issue and assign to project
|
||||
gh issue create \
|
||||
--title "Implement dashboard" \
|
||||
--body "Description" \
|
||||
--label "feature" \
|
||||
--project "Q4 Roadmap"
|
||||
|
||||
# Interactive issue creation
|
||||
gh issue create
|
||||
```
|
||||
|
||||
### Viewing Issues
|
||||
|
||||
```bash
|
||||
# List all open issues
|
||||
gh issue list
|
||||
|
||||
# List issues with specific label
|
||||
gh issue list --label "bug"
|
||||
|
||||
# List issues assigned to user
|
||||
gh issue list --assignee @me
|
||||
|
||||
# List issues in specific state
|
||||
gh issue list --state closed
|
||||
|
||||
# List with custom columns
|
||||
gh issue list --json number,title,labels,state
|
||||
|
||||
# View specific issue
|
||||
gh issue view 123
|
||||
|
||||
# View issue in browser
|
||||
gh issue view 123 --web
|
||||
```
|
||||
|
||||
### Updating Issues
|
||||
|
||||
```bash
|
||||
# Edit issue title
|
||||
gh issue edit 123 --title "New title"
|
||||
|
||||
# Add labels
|
||||
gh issue edit 123 --add-label "bug,priority: high"
|
||||
|
||||
# Remove labels
|
||||
gh issue edit 123 --remove-label "priority: low"
|
||||
|
||||
# Add assignee
|
||||
gh issue edit 123 --add-assignee username
|
||||
|
||||
# Remove assignee
|
||||
gh issue edit 123 --remove-assignee username
|
||||
|
||||
# Set milestone
|
||||
gh issue edit 123 --milestone "v2.0"
|
||||
|
||||
# Update body
|
||||
gh issue edit 123 --body "New description"
|
||||
|
||||
# Add comment
|
||||
gh issue comment 123 --body "This is a comment"
|
||||
|
||||
# Close issue
|
||||
gh issue close 123
|
||||
|
||||
# Close with comment
|
||||
gh issue close 123 --comment "Fixed in PR #456"
|
||||
|
||||
# Reopen issue
|
||||
gh issue reopen 123
|
||||
```
|
||||
|
||||
### Linking Issues
|
||||
|
||||
```bash
|
||||
# Reference in comment
|
||||
gh issue comment 123 --body "Related to #456"
|
||||
|
||||
# Link as blocking
|
||||
gh issue comment 123 --body "Blocks #456"
|
||||
|
||||
# Link as blocked by
|
||||
gh issue comment 123 --body "Blocked by #789"
|
||||
|
||||
# Link to PR
|
||||
gh issue comment 123 --body "Fixed in PR #100"
|
||||
```
|
||||
|
||||
### Bulk Operations
|
||||
|
||||
```bash
|
||||
# Close multiple issues
|
||||
gh issue list --label "wontfix" --json number --jq '.[].number' | \
|
||||
xargs -I {} gh issue close {}
|
||||
|
||||
# Add label to multiple issues
|
||||
gh issue list --search "authentication" --json number --jq '.[].number' | \
|
||||
xargs -I {} gh issue edit {} --add-label "security"
|
||||
|
||||
# Assign all unassigned bugs
|
||||
gh issue list --label "bug" --json number,assignees --jq '.[] | select(.assignees | length == 0) | .number' | \
|
||||
xargs -I {} gh issue edit {} --add-assignee username
|
||||
```
|
||||
|
||||
## Issue Templates
|
||||
|
||||
### Bug Report Template
|
||||
|
||||
```markdown
|
||||
## Bug Description
|
||||
Brief description of the bug.
|
||||
|
||||
## Environment
|
||||
- OS: [e.g., macOS 14.0]
|
||||
- Browser: [e.g., Chrome 120]
|
||||
- Version: [e.g., 2.0.1]
|
||||
|
||||
## Steps to Reproduce
|
||||
1. Go to '...'
|
||||
2. Click on '...'
|
||||
3. Scroll down to '...'
|
||||
4. See error
|
||||
|
||||
## Expected Behavior
|
||||
What you expected to happen.
|
||||
|
||||
## Actual Behavior
|
||||
What actually happened.
|
||||
|
||||
## Screenshots/Logs
|
||||
If applicable, add screenshots or logs.
|
||||
|
||||
## Possible Solution
|
||||
(Optional) Suggest a fix or reason for the bug.
|
||||
|
||||
## Additional Context
|
||||
Any other context about the problem.
|
||||
```
|
||||
|
||||
### Feature Request Template
|
||||
|
||||
```markdown
|
||||
## Feature Description
|
||||
Clear description of the feature you'd like to see.
|
||||
|
||||
## Problem Statement
|
||||
What problem does this feature solve?
|
||||
|
||||
## Proposed Solution
|
||||
How should this feature work?
|
||||
|
||||
## Alternatives Considered
|
||||
What other approaches did you consider?
|
||||
|
||||
## User Stories
|
||||
- As a [user type], I want to [action], so that [benefit]
|
||||
|
||||
## Acceptance Criteria
|
||||
- [ ] Criterion 1
|
||||
- [ ] Criterion 2
|
||||
|
||||
## Technical Considerations
|
||||
- Dependencies:
|
||||
- Performance impact:
|
||||
- Security implications:
|
||||
- Breaking changes:
|
||||
|
||||
## Priority & Impact
|
||||
- Priority: [High/Medium/Low]
|
||||
- User impact: [High/Medium/Low]
|
||||
- Implementation effort: [Large/Medium/Small]
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Writing Good Issue Titles
|
||||
|
||||
✅ **Good**:
|
||||
- "Add CSV export for user data"
|
||||
- "Fix pagination bug on dashboard"
|
||||
- "Improve API response time for /users endpoint"
|
||||
- "Update authentication flow to support OAuth"
|
||||
|
||||
❌ **Bad**:
|
||||
- "Bug" (not descriptive)
|
||||
- "Feature request" (too vague)
|
||||
- "This doesn't work" (no context)
|
||||
- "URGENT FIX ASAP!!!" (not professional)
|
||||
|
||||
### Title Format
|
||||
- **Bugs**: "Fix [issue] in [component]"
|
||||
- **Features**: "Add [feature] to [component]"
|
||||
- **Improvements**: "Improve [aspect] of [component]"
|
||||
- **Refactoring**: "Refactor [component] to [goal]"
|
||||
|
||||
### Writing Good Descriptions
|
||||
|
||||
1. **Be specific**: Include exact error messages, versions, conditions
|
||||
2. **Provide context**: Explain why this matters, who it affects
|
||||
3. **Include steps**: For bugs, clear reproduction steps
|
||||
4. **Add visuals**: Screenshots, diagrams, recordings when helpful
|
||||
5. **Link related work**: Reference related issues, PRs, docs
|
||||
6. **Set expectations**: Clarify scope, acceptance criteria
|
||||
|
||||
### Label Strategy
|
||||
|
||||
- Use consistent label taxonomy across the project
|
||||
- Limit to 3-5 labels per issue for clarity
|
||||
- Always include: type, priority, and component labels
|
||||
- Use status labels to track progress
|
||||
- Create custom labels for recurring themes
|
||||
|
||||
### Assigning Issues
|
||||
|
||||
- Assign when someone actively works on it
|
||||
- Don't assign too far in advance
|
||||
- One primary assignee, others as collaborators
|
||||
- Unassign if work is paused or blocked
|
||||
|
||||
## Workflow Examples
|
||||
|
||||
### Example 1: Create Bug Report
|
||||
|
||||
```bash
|
||||
# User reports: "Login page is broken on mobile"
|
||||
|
||||
gh issue create \
|
||||
--title "Fix login page layout on mobile devices" \
|
||||
--body "$(cat <<'EOF'
|
||||
## Bug Description
|
||||
The login form is not responsive on mobile devices below 768px width.
|
||||
|
||||
## Environment
|
||||
- Device: iPhone 14
|
||||
- OS: iOS 17.0
|
||||
- Browser: Safari
|
||||
|
||||
## Steps to Reproduce
|
||||
1. Open application on mobile device
|
||||
2. Navigate to /login
|
||||
3. Observe layout issues
|
||||
|
||||
## Expected Behavior
|
||||
Login form should be centered and fully visible on mobile.
|
||||
|
||||
## Actual Behavior
|
||||
Form elements overflow screen, submit button is cut off.
|
||||
|
||||
## Screenshots
|
||||
[Attach screenshots]
|
||||
|
||||
## Acceptance Criteria
|
||||
- [ ] Form is responsive on screens < 768px
|
||||
- [ ] All elements visible without scrolling
|
||||
- [ ] Touch targets are at least 44x44px
|
||||
- [ ] Tested on iOS Safari and Android Chrome
|
||||
EOF
|
||||
)" \
|
||||
--label "bug,frontend,priority: high" \
|
||||
--assignee frontend-team
|
||||
```
|
||||
|
||||
### Example 2: Feature Request with Requirements
|
||||
|
||||
```bash
|
||||
gh issue create \
|
||||
--title "Add user profile settings page" \
|
||||
--body "$(cat ./docs/requirements/user-profile.md)" \
|
||||
--label "feature,frontend,backend" \
|
||||
--milestone "v2.0" \
|
||||
--project "Q4 Features"
|
||||
```
|
||||
|
||||
### Example 3: Link Related Issues
|
||||
|
||||
```bash
|
||||
# This PR fixes issue #123 and is related to #124
|
||||
gh issue comment 123 --body "Fixed in PR #200"
|
||||
gh issue close 123
|
||||
gh issue comment 124 --body "Implementation approach discussed in #123"
|
||||
```
|
||||
|
||||
### Example 4: Triage Issues
|
||||
|
||||
```bash
|
||||
# Review new issues
|
||||
gh issue list --label "status: triage"
|
||||
|
||||
# Add priority and status
|
||||
gh issue edit 123 --add-label "priority: high,status: ready" --remove-label "status: triage"
|
||||
|
||||
# Assign to team member
|
||||
gh issue edit 123 --add-assignee developer1
|
||||
```
|
||||
|
||||
## Integration with Project Boards
|
||||
|
||||
```bash
|
||||
# List projects
|
||||
gh project list
|
||||
|
||||
# View project
|
||||
gh project view 1
|
||||
|
||||
# Add issue to project
|
||||
gh project item-add 1 --url https://github.com/owner/repo/issues/123
|
||||
|
||||
# Move issue on board
|
||||
gh project item-edit --project-id 1 --id ITEM_ID --field-id STATUS_FIELD_ID --value "In Progress"
|
||||
```
|
||||
|
||||
## Advanced Filtering
|
||||
|
||||
```bash
|
||||
# Issues created in last week
|
||||
gh issue list --search "created:>=$(date -v-7d +%Y-%m-%d)"
|
||||
|
||||
# High priority unassigned bugs
|
||||
gh issue list --label "bug,priority: high" --search "no:assignee"
|
||||
|
||||
# Issues mentioning "authentication"
|
||||
gh issue list --search "authentication in:title,body"
|
||||
|
||||
# Issues assigned to me that are in progress
|
||||
gh issue list --assignee @me --label "status: in-progress"
|
||||
```
|
||||
|
||||
## Questions to Ask
|
||||
|
||||
Before creating or updating an issue:
|
||||
1. "What type of issue is this? (bug, feature, improvement)"
|
||||
2. "What is the clear, actionable title?"
|
||||
3. "Do you have specific details like steps to reproduce or requirements?"
|
||||
4. "What priority should this have?"
|
||||
5. "Should this be assigned to anyone?"
|
||||
6. "Should this be added to a milestone or project?"
|
||||
7. "Are there related issues we should link to?"
|
||||
|
||||
Ask the user: "What would you like to do with GitHub issues?"
|
||||
Reference in New Issue
Block a user