aios-core
Version:
Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework
357 lines (264 loc) • 10 kB
Markdown
# triage-github-issues.md
**Task**: GitHub Issues Triage & Prioritization
**Purpose**: Analyze open GitHub issues, classify by type/severity/effort, prioritize based on impact, and recommend resolution order to the user.
**When to use**: Periodically or when user asks to review the issue backlog, via `@devops *triage-issues` or user request like "what issues should we resolve next?".
## Execution Modes
**Choose your execution mode:**
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
- Fetch, classify, and present prioritized list
- Minimal user interaction
- **Best for:** Quick overview of issue backlog
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
- Present classification, ask user for priority adjustments
- Discuss trade-offs between quick wins vs high-impact
- **Best for:** Sprint planning, deciding next work
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
- Deep analysis of each issue with cross-references
- Dependency mapping between issues
- **Best for:** Major backlog grooming sessions
**Parameter:** `mode` (optional, default: `interactive`)
## Task Definition (AIOS Task Format V1.0)
```yaml
task: triageGithubIssues()
responsavel: Gage (Operator)
responsavel_type: Agente
atomic_layer: Organism
**Entrada:**
- campo: filters
tipo: object
origem: User Input
obrigatorio: false
validacao: |
Optional filters: { state: 'open', labels: [], assignee: '', limit: 30 }
default: { state: 'open', limit: 30 }
- campo: mode
tipo: string
origem: User Input
obrigatorio: false
validacao: yolo|interactive|pre-flight
**Saida:**
- campo: triage_report
tipo: object
destino: User Display
persistido: false
formato: |
Tabela priorizada com: issue#, titulo, tipo, severidade, esforco, recomendacao
- campo: recommended_next
tipo: array
destino: User Display
persistido: false
formato: |
Top 3-5 issues recomendados para resolver em ordem
```
## Pre-Conditions
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
**Checklist:**
```yaml
pre-conditions:
- [ ] GitHub CLI authenticated (gh auth status)
tipo: pre-condition
blocker: true
validacao: |
Run: gh auth status
Must show authenticated user
error_message: "GitHub CLI not authenticated. Run: gh auth login"
- [ ] Repository has GitHub remote configured
tipo: pre-condition
blocker: true
validacao: |
Run: git remote -v
Must show github.com remote
error_message: "No GitHub remote found. Add with: git remote add origin <url>"
```
## Workflow Steps
### Phase 1: Fetch Issues
```bash
# Fetch all open issues with labels and metadata
gh issue list --state open --limit 50 --json number,title,labels,createdAt,updatedAt,comments,assignees,milestone
# Also check for stale issues (>90 days without activity)
gh issue list --state open --limit 50 --json number,title,updatedAt --jq '.[] | select(.updatedAt < (now - 7776000 | todate))'
```
### Phase 2: Classify Each Issue
For each issue, determine:
| Dimension | Values | How to Determine |
|-----------|--------|-----------------|
| **Type** | BUG, FEATURE, ENHANCEMENT, DOCS, CHORE, SECURITY | From labels + title keywords + issue body |
| **Severity** | P0-Critical, P1-High, P2-Medium, P3-Low, P4-Cosmetic | Impact on users, workaround availability |
| **Effort** | XS (<1h), S (1-4h), M (4-8h), L (1-2d), XL (>2d) | Files affected, complexity, research needed |
| **Impact** | HIGH, MEDIUM, LOW | Users affected x frequency x severity |
| **Quick Win** | YES/NO | Effort <= S AND Severity >= P2 |
**Classification Heuristics:**
```yaml
type_detection:
BUG: title contains "bug", "broken", "error", "fix", "crash", "fail"
SECURITY: title contains "security", "vulnerability", "CVE", labels include "security"
DOCS: title contains "docs", "documentation", "readme", labels include "documentation"
CHORE: title contains "chore", "cleanup", "refactor", "rename", "update"
FEATURE: title contains "feat", "add", "implement", "new"
ENHANCEMENT: title contains "improve", "enhance", "optimize", "better"
severity_detection:
P0: labels include "critical", body mentions "production down" or "data loss"
P1: labels include "high", "important", type is SECURITY
P2: labels include "medium", type is BUG without workaround
P3: labels include "low", type is ENHANCEMENT
P4: type is DOCS or CHORE with no user impact
effort_estimation:
- Read issue body for scope indicators
- Check if issue references specific files/modules
- Check if similar issues were resolved (time taken)
- Consider: research needed? multiple files? tests required? installer changes?
```
### Phase 3: Prioritize
**Priority Score Formula:**
```
priority_score = (severity_weight * 3) + (impact_weight * 2) + (quick_win_bonus) - (effort_penalty)
severity_weight: P0=10, P1=8, P2=5, P3=3, P4=1
impact_weight: HIGH=10, MEDIUM=5, LOW=2
quick_win_bonus: YES=5, NO=0
effort_penalty: XS=0, S=1, M=3, L=5, XL=8
```
**Priority Tiers:**
| Tier | Score Range | Action |
|------|------------|--------|
| **NOW** | >= 30 | Resolve immediately (P0/P1, security) |
| **NEXT** | 20-29 | Resolve in current sprint |
| **SOON** | 10-19 | Schedule for next sprint |
| **BACKLOG** | < 10 | Keep in backlog, review monthly |
### Phase 4: Present to User
**Output Format:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GitHub Issues Triage Report
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Repository: {owner}/{repo}
Open Issues: {count}
Date: {date}
NOW (resolve immediately):
#123 [BUG/P1] Agent files not recognized by Copilot S ← Quick Win
#456 [SECURITY/P0] Exposed credentials in config M
NEXT (current sprint):
#789 [BUG/P2] Submodule blocks push after merge M
#101 [ENHANCEMENT/P2] Add batch rename support S ← Quick Win
SOON (next sprint):
#202 [FEATURE/P3] English README L
#303 [DOCS/P3] Update API documentation S
BACKLOG:
#404 [CHORE/P4] Remove deprecated methods XS
...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Recommendation: Start with #{top_issue} ({reason}).
Pick an issue number to investigate, or say "resolve #N".
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
### Phase 5: User Decision
**elicit: true**
Present the triage report and wait for user to:
1. Select an issue to investigate → hand off to `*resolve-issue {number}`
2. Adjust priorities → re-sort and present again
3. Close stale issues → `gh issue close {number} --comment "Closing as stale"`
4. Request more detail on specific issue → `gh issue view {number}`
## Post-Conditions
**Purpose:** Validate execution success AFTER task completes
**Checklist:**
```yaml
post-conditions:
- [ ] All open issues classified with type, severity, and effort
tipo: post-condition
blocker: false
validacao: |
Every issue in report has Type, Severity, and Effort columns filled
- [ ] Priority ranking presented to user
tipo: post-condition
blocker: true
validacao: |
User has seen the prioritized triage report
- [ ] User has selected next action (resolve, close, or defer)
tipo: post-condition
blocker: false
validacao: |
User has made a decision on at least one issue
```
## Acceptance Criteria
**Purpose:** Definitive pass/fail criteria for task completion
**Checklist:**
```yaml
acceptance-criteria:
- [ ] Triage report covers all open issues (or up to limit)
tipo: acceptance-criterion
blocker: true
- [ ] Each issue has type, severity, effort, and priority tier
tipo: acceptance-criterion
blocker: true
- [ ] Quick wins are clearly identified
tipo: acceptance-criterion
blocker: true
- [ ] User-facing output is a clean, scannable table
tipo: acceptance-criterion
blocker: true
```
## Tools
**External/shared resources used by this task:**
- **Tool:** gh (GitHub CLI)
- **Purpose:** Fetch issues, labels, comments, close stale issues
- **Source:** System CLI
- **Required:** true
- **Tool:** git
- **Purpose:** Detect repository remote URL
- **Source:** System CLI
- **Required:** true
## Error Handling
**Strategy:** graceful-fallback
**Common Errors:**
1. **Error:** GitHub CLI not authenticated
- **Cause:** `gh` not logged in
- **Resolution:** Run `gh auth login`
- **Recovery:** Prompt user to authenticate
2. **Error:** Rate limit exceeded
- **Cause:** Too many API calls
- **Resolution:** Wait and retry, or use `--limit` to reduce scope
- **Recovery:** Present partial results
3. **Error:** No open issues
- **Cause:** Repository has no open issues
- **Resolution:** Report clean backlog
- **Recovery:** Suggest checking closed issues or creating new ones
## Performance
**Expected Metrics:**
```yaml
duration_expected: 1-3 min
cost_estimated: $0.001-0.005
token_usage: ~2,000-5,000 tokens
```
## Metadata
```yaml
story: N/A (operational task)
version: 1.0.0
dependencies:
tasks: []
checklists: []
templates: []
tools:
- gh (GitHub CLI)
- git
tags:
- devops
- issue-management
- triage
- backlog
created_at: 2026-02-21
updated_at: 2026-02-21
related_tasks:
- resolve-github-issue.md
```
## Integration with @devops Agent
Called via `@devops *triage-issues` command or user request to analyze the issue backlog.
**Handoff:** When user selects an issue to resolve, hand off to `*resolve-issue {number}`.