Issue triage & priority

Have agents suggest type labels, priority, and owning queue from symptoms, blast radius, and repro steps—and list information still missing.

Separate bug, enhancement, docs, support questions, and security disclosure paths; when version, environment, or logs are missing, emit a follow-up checklist instead of guessing.

Encode the priority matrix in the SKILL—e.g. P0 full outage, P1 core path degraded, P2 workaround exists, P3 nice-to-have—with mapped response targets.

Duplicates should be merged or linked to a primary ticket; stale-version issues should point to upgrade paths and EOL policy.

  • Component labels align with code owners or on-call rotations.
  • Regression: mark release-blocking vs main-only.
  • Bots: separate auto-close rules from “needs author feedback” stalls.

Brief

This skill breaks “read ticket → label → prioritize → route → list gaps” into executable steps; agent output should be structured guidance you can paste into a tracker, not unverified root-cause claims.

  • Classify first: type and area labels drive routing and templates before scheduling.
  • Then prioritize: map impact × urgency to P0–P3 with the team’s first-response SLA.
  • Finally ask: when information is thin, list the minimum repro set (version, environment, logs, expected vs actual) instead of a vague “cannot reproduce.”

Sample agent output—paste directly into an issue comment:

## Triage suggestion (issue-triage)

type: bug
priority: P1
area: checkout
sla_first_response: ≤ 1h (24/7)

### Missing information—please provide:
1. Version and deployment environment (prod / staging / commit SHA)
2. Repro steps plus expected vs actual behavior
3. Relevant error logs or request_id / trace_id

### Similar issues (duplicate check):
- #1234 Payment page 500 error (2024-11) — check if same root cause

Label taxonomy

Type: bug (behavior vs spec), enhancement (capability/UX), documentation (missing/wrong docs), support (how-to, may become docs or close), security (use disclosure workflow—no exploit details in public tickets).

Area: align with repo modules, service names, or CODEOWNERS; for cross-team issues use multiple area labels and name the primary owner in the description.

Batch-create label taxonomy with GitHub CLI:

# Batch-create type labels
gh label create "type:bug"          --color "d73a4a" --repo org/repo
gh label create "type:enhancement"  --color "a2eeef" --repo org/repo
gh label create "type:documentation"--color "0075ca" --repo org/repo
gh label create "type:security"     --color "e4e669" --repo org/repo

# Batch-create priority labels
gh label create "priority:P0" --color "b60205" --repo org/repo
gh label create "priority:P1" --color "d93f0b" --repo org/repo
gh label create "priority:P2" --color "fbca04" --repo org/repo
gh label create "priority:P3" --color "0e8a16" --repo org/repo

# Label an existing issue
gh issue edit 1234 --add-label "type:bug,priority:P1,area:checkout" --repo org/repo

# Bulk-label by existing tag (requires jq)
gh issue list --label "needs-triage" --json number   | jq '.[].number'   | xargs -I{} gh issue edit {} --add-label "priority:P2"

Severity decision tree—conditions for each level (can be embedded in issue templates):

# Severity pseudocode (encode as rules in the SKILL)
def classify_severity(issue):
    if issue.affects_payment or issue.affects_auth:
        if issue.no_workaround and issue.affects_all_users:
            return "P0"  # Core transaction fully down
        elif issue.affects_majority:
            return "P1"  # Core path severely degraded > 20% of users
    if issue.has_workaround:
        return "P2"      # Workaround exists or non-primary path
    if issue.is_enhancement or issue.affects_edge_case:
        return "P3"      # Improvement / edge case
    return "P2"          # Default fallback
  • Platform/env labels: os:windows, browser:safari, region:us, etc. as separate labels for repro filtering.
  • Customer/tenant tiers: reflect contract SLAs via labels or custom fields so rules engines can match.

SLA & response targets

The table below is an example—replace with your org’s real numbers (business hours vs 24/7, time zones, holidays).

Priority Typical meaning First response (example) Fix/mitigation target (example)
P0 Production-wide or core commerce down, no viable workaround ≤ 15 minutes Work until restored or explicit degradation path
P1 Severe core-path degradation, most users affected ≤ 1 hour Mitigate same day + follow-up root-cause fix
P2 Workaround exists or non-primary path defect ≤ 1 business day Schedule in iteration; note regression risk
P3 Improvements, edge cases, pure optimizations As capacity allows Visible on backlog

Periodic triage meeting agenda template (recommended weekly, 30 minutes):

# Issue Triage Weekly Agenda (Tuesdays 10:00, 30 min)

## 1. New ticket scan (10 min)
- Review issues opened since last week without labels:
  gh issue list --label "needs-triage" --limit 20
- Per ticket: confirm type / priority / area / completeness

## 2. P0/P1 status update (5 min)
- Confirm all P0/P1 issues have an assignee and a recent update
- Escalate or close any past-SLA items

## 3. Stale issue handling (5 min)
- Review "needs-info" issues with no reply for 14+ days:
  gh issue list --label "status:needs-info" --state open
- Decide: follow up / close / downgrade

## 4. Regression and release blockers (5 min)
- Confirm "regression" issues that may block the current release
- Sync with release captain

## 5. Action items (5 min)
- Record owners and due dates

SLA means “someone owns and updates status,” not “fully fixed.” Separate delivery dates via milestones/fields so response SLA is not confused with fix promises.

Triage flow

  [ New issue / synced external ticket ]
        │
        ▼
  ┌─────────────┐     Read title/body: security? → private channel
  │ Type & safety │──── Else: bug / enhancement / docs / support
  └─────────────┘
        │
        ▼
  ┌─────────────┐     Blast radius: users, data risk, revenue/compliance
  │ Priority P0–P3 │──── Compare to SKILL matrix + current events (e.g. deploy)
  └─────────────┘
        │
        ▼
  ┌─────────────┐     Area label + queue / CODEOWNERS / on-call table
  │ Route & assign │──── Cross-team: split tasks or mark dependencies
  └─────────────┘
        │
        ▼
  ┌─────────────┐     Missing repro, version, logs → follow-up checklist
  │ Completeness  │──── Enough detail → ready / needs repro validation
  └─────────────┘

Whenever a step looks like a duplicate, list similar issue links and merge suggestions before adding noise to the queue.

Merges, regressions, bots

  • Keep component labels aligned with owners/on-call; bulk-migrate renames so dashboards do not break.
  • Regression: use labels or milestones for release-blocking vs main-only; don’t open multiple tickets for the same red CI build.
  • Bots: document stale auto-close preconditions, exemption labels, and what happens when “needs author feedback” sits idle past N days.

Stale Bot configuration example (.github/stale.yml):

# .github/stale.yml
daysUntilStale: 30        # 30 days inactive → apply stale label
daysUntilClose: 14        # 14 more days without reply → close
staleLabel: "stale"
exemptLabels:             # These labels never go stale
  - "priority:P0"
  - "priority:P1"
  - "pinned"
  - "security"
staleIssueMessage: |
  This issue has been inactive for 30 days.
  If it is still relevant, please reply with updated environment info;
  otherwise it will be closed in 14 days.
closeIssueMessage: |
  This issue was closed automatically due to inactivity.
  If the problem persists, please reopen with full reproduction steps.
# PR-specific (more lenient)
daysUntilStalePr: 60
daysUntilClosePr: 30
stalePrMessage: "This PR has been inactive for 60 days. Please update or close it."

Draft generator

Pick type, priority, and missing fields to generate YAML you can paste into an issue body or internal template (rename fields to match your system).

Missing information

The script only concatenates structure; for security, do not paste exploit details in public repos. Prefix with # issue-triage for searchability.

---
name: issue-triage
description: Classify issues and suggest labels, priority, and follow-up questions
model: claude-sonnet-4-5
---

# Classification rules
type_labels: [bug, enhancement, documentation, support, security]
priority_labels: [P0, P1, P2, P3]

# Priority matrix
P0: Production core path fully down, no workaround, ≤15 min response
P1: Core path degraded >20% of users, ≤1h response
P2: Workaround exists or non-primary path, ≤1 business day response
P3: Improvement / edge case / optimization, as capacity allows

# Output format
output:
  - Suggested labels: type / priority / area
  - Missing info: repro steps, version, logs
  - Possible duplicate: primary issue link
  - SLA first-response target

# Security issue handling
security_channel: security@example.com (no exploit details in public issues)

# Follow-up template (use when info is insufficient)
info_request_template: |
  Please add the following so we can reproduce:
  1. Version and deployment environment
  2. Complete reproduction steps
  3. Expected vs actual behavior
  4. Relevant error logs or trace_id

All skills More skills