Create GitHub Issue
Acts as an experienced Product Owner to create well-structured GitHub issues using the repository's predefined templates.
Core Workflow
Follow these steps in order:
1. Discover Available Templates
ls .github/ISSUE_TEMPLATE/*.yaml .github/ISSUE_TEMPLATE/*.yml
2. Read Templates Dynamically
CRITICAL: ALWAYS read the actual template files before creating an issue. Never use cached or assumed template structures.
# Read each template to understand: # - Template name and description # - Required and optional fields # - Default labels assigned by template # - Field validation requirements
Use the Read tool to load templates from .github/ISSUE_TEMPLATE/.
3. Analyze User Description
Based on the user's description (in English or Spanish), classify the issue:
- •Defect (defect.yaml): Bugs, errors, things not working as expected
- •Feature (feature.yaml): New functionality, enhancements within an EPIC
- •Task (task.yaml): Technical tasks, maintenance, refactoring, library updates
- •Spike (spike.yaml): Timeboxed research, investigation, unknowns to explore
- •Epic (epic.yml): Large initiatives, wide areas of functionality
- •UX (ux.yaml): User experience improvements, interface issues, usability problems
Note: Epic and Feature templates are marked "Product team use only", while Defect, Task, and Spike are "Engineering team use". Consider this when selecting templates.
4. Generate English Title
Create a concise, descriptive title in English. If the user provided Spanish input, translate the title.
5. Select Feature Label
Analyze the description content and select the most appropriate dotCMS : [Feature] label. See references/feature-labels.md for complete label list and selection logic.
Important Distinctions:
- •Edit Content/Contentlet Editor issues → Use
dotCMS : New Edit Contentlet(specific) - •General content operations (creation, types, management) → Use
dotCMS : Content Management(general)
If no clear match, default to dotCMS : Content Management.
6. Determine Technology
Based on the description, set Technology field:
- •Front-end: UI/UX work, Angular components, admin interface, user-facing features
- •Java: Backend services, APIs, core functionality, server-side logic
- •Platform: Infrastructure, DevOps, system-wide changes
- •Go-To-Market: Marketing, sales, business features
Most common for engineering: Front-end or Java.
6.5. Ask for Team Assignment
CRITICAL: Always ask the user which team should be assigned to this issue using the AskUserQuestion tool.
Available teams:
- •Falcon
- •Maintenance
- •Scout
- •Platform
Use the AskUserQuestion tool with these exact options:
{
"questions": [{
"question": "Which team should be assigned to this issue?",
"header": "Team",
"multiSelect": false,
"options": [
{"label": "Falcon (Recommended)"},
{"label": "Maintenance"},
{"label": "Scout"},
{"label": "Platform"}
]
}]
}
Extract the team name from the user's response and use it in step 8.
### 7. Build Issue Body
Based on the template structure read in step 2, construct the issue body in markdown format. Each template has specific fields - build the body to match that structure.
**Common Template Structures**:
**Task Template** (task.yaml):
```markdown
## Description
[Clear explanation of what needs to be done]
## Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Criterion 3
## Priority
[High/Medium/Low]
## Additional Context
[Any supporting information]
Defect Template (defect.yaml):
## Problem Description [What's broken or not working] ## Steps to Reproduce 1. Step 1 2. Step 2 3. Step 3 ## Expected Behavior [What should happen] ## Actual Behavior [What actually happens] ## Severity [Critical/High/Medium/Low] ## Additional Context [Screenshots, logs, environment details]
Spike Template (spike.yaml):
## Research Goal [What needs to be investigated] ## Questions to Answer - [ ] Question 1 - [ ] Question 2 ## Time Box [Duration, e.g., "2-3 days"] ## Success Criteria [How we know the spike is complete]
8. Create Issue with GitHub CLI
CRITICAL: Do NOT use --template flag. It cannot be combined with --title and --body in non-interactive mode.
gh issue create \ --repo "dotCMS/core" \ --title "[Generated English Title]" \ --body "[Markdown body constructed in step 7]" \ --label "[Template Labels],[Additional Labels]"
Template Labels: Use labels from the template file you read
Additional Labels to Apply:
- •Team Assignment: Add
Team : [Selected Team]using the team selected in step 6.5 - •Feature Label: Add selected
dotCMS : [Feature]label
Label Format Examples (replace [Team] with selected team: Falcon, Maintenance, or Scout):
- •Defect:
--label "Triage,OKR : Customer Support,Team : [Team],dotCMS : [Feature]" - •Feature:
--label "Team : [Team],dotCMS : [Feature]" - •Task:
--label "Triage,Team : [Team],dotCMS : [Feature]" - •Spike:
--label "Team : [Team],dotCMS : [Feature]" - •Epic:
--label "Team : [Team],dotCMS : [Feature]" - •UX:
--label "Team : UX,Team : [Team],dotCMS : [Feature]"
9. Fill Content Fields
General Guidelines:
- •All content should be in English (translate from Spanish if needed)
- •Be concise and useful
- •Focus on the most important aspects
- •Use concrete acceptance criteria with checkboxes (format:
- [ ] Item) - •Include relevant links when available
Field Population Patterns:
- •Description/Problem: Clear, specific explanation (2-4 sentences)
- •Acceptance Criteria: Checkbox list with measurable, testable criteria
- •Steps to Reproduce: Numbered list for bugs
- •Priority/Severity: Choose appropriate level based on impact
- •Additional Context: Include only relevant supporting information
- •Links: Add Slack threads, Freshdesk tickets, Figma designs when available
10. Confirm Creation
After issue creation:
- •Provide the issue URL to the user
- •Confirm the following were set:
- •Type label (based on selected template)
- •Team label applied (Falcon, Maintenance, or Scout)
- •Feature label applied
- •Technology context (Front-end/Java/Platform) mentioned in description if relevant
Important Notes
- •Always read templates first: Template structures may change over time - never assume field names or structure
- •No --template flag: Do NOT use
--templatewithgh issue create- it's incompatible with--titleand--bodyin non-interactive mode - •Build body manually: Construct the markdown body based on the template structure you read
- •Translation: Accept Spanish input but create all issues in English
- •Label automation: Apply all labels automatically without asking for user confirmation
- •Feature label selection: Use semantic analysis to select the most appropriate feature label
- •Project assignment: Issues are automatically added to project
dotCMS/7via template configuration
Authorization
If project assignment fails, may need to refresh GitHub CLI auth:
gh auth refresh -s read:project -s project --hostname github.com