Triage Bugs
Overview
Classify and prioritize a batch of bug reports using a consistent severity matrix and priority framework. The output is a structured, actionable bug triage that enables sprint planning, on-call prioritization, and resource allocation decisions.
Workflow
Read project context — Check .chalk/docs/ for:
- Architecture docs (to map bugs to components)
- Previous triage reports for consistency
- Team structure or component ownership docs
- Any existing severity definitions the team uses
Gather bug reports — From $ARGUMENTS and conversation context:
- If a list of bugs is provided in conversation, use those
- If a file or document is referenced, read it
- If pointed to an issue tracker, read available bug details
- For each bug, extract: title, description, reproduction steps, environment, reporter, date reported
Check reproduction status — For each bug, determine:
- Reproduced: Steps provided and confirmed working
- Partially reproduced: Steps provided but inconsistent results
- Not reproduced: No reproduction steps or unable to reproduce
- Not attempted: Reproduction has not been tried yet
- Bugs without reproduction status should be flagged — triaging unreproduced bugs is guesswork
Assign severity — Using the severity matrix below, classify each bug:
- Critical (SEV-1): Data loss, security vulnerability, complete feature outage for all users
- High (SEV-2): Major feature broken with no workaround, significant data corruption risk, affects majority of users
- Medium (SEV-3): Feature broken but workaround exists, affects subset of users, degraded experience
- Low (SEV-4): Cosmetic issue, minor inconvenience, affects edge case usage, has easy workaround
Calculate priority — Priority combines severity with business context:
- User Impact: How many users are affected? (all, most, some, few)
- Frequency: How often does it occur? (every time, often, sometimes, rarely)
- Workaround: Is there a workaround? (none, difficult, easy)
- Priority = Severity adjusted by impact, frequency, and workaround availability
- A medium-severity bug that hits every user with no workaround may be higher priority than a high-severity bug that affects 1% of users rarely
Map to components — For each bug:
- Identify the affected system component or module
- Suggest the owning team or area of expertise
- Note if the bug crosses component boundaries (these are often harder to fix)
Estimate effort — Provide a rough effort estimate:
- Small: Likely a straightforward fix, isolated change, low risk (< 1 day)
- Medium: Requires investigation, touches multiple files, moderate risk (1-3 days)
- Large: Requires significant investigation or architectural change, high risk (3+ days)
- Unknown: Cannot estimate without further investigation
Group the results — Present the triaged bugs grouped by:
- Primary grouping: Severity (Critical first)
- Secondary grouping: Component
- Also provide a sprint fitness view: which bugs should go in the next sprint based on priority and effort
Determine the next file number — List files in .chalk/docs/engineering/ matching *_bug_triage*. Find the highest number and increment by 1.
Write the report — Save to .chalk/docs/engineering/<n>_bug_triage_<sprint_or_date>.md if requested, or present in conversation.
Confirm — Summarize: total bugs triaged, severity distribution, top 3 priority items, and any bugs that need more information before they can be properly triaged.
Filename Convention
<number>_bug_triage_<sprint_or_date>.md
Examples:
8_bug_triage_sprint_14.md
10_bug_triage_2024_q4.md
Bug Triage Format
# Bug Triage Report
Last updated: <YYYY-MM-DD>
Sprint/Period: <sprint name or date range>
Triaged by: <agent or person>
## Summary
| Severity | Count | Action |
|----------|-------|--------|
| Critical (SEV-1) | <n> | Fix immediately |
| High (SEV-2) | <n> | Fix this sprint |
| Medium (SEV-3) | <n> | Schedule for next sprint |
| Low (SEV-4) | <n> | Backlog |
| **Total** | **<n>** | |
| Reproduction Status | Count |
|-------------------|-------|
| Reproduced | <n> |
| Partially reproduced | <n> |
| Not reproduced | <n> |
| Not attempted | <n> |
## Critical (SEV-1)
### BUG-<id>: <Title>
| Field | Value |
|-------|-------|
| Severity | Critical |
| Priority | P0 |
| Component | <component> |
| Suggested Owner | <team or area> |
| Reproduction | Reproduced / Not reproduced |
| User Impact | All users / Most users |
| Frequency | Every time / Often |
| Workaround | None |
| Effort | Small / Medium / Large / Unknown |
**Description**: <1-2 sentence summary>
**Impact**: <What happens to users when this bug occurs>
**Recommendation**: <Fix immediately. Suggested approach if known.>
## High (SEV-2)
### BUG-<id>: <Title>
| Field | Value |
|-------|-------|
| ... | ... |
## Medium (SEV-3)
| Bug ID | Title | Component | Priority | Effort | Workaround |
|--------|-------|-----------|----------|--------|------------|
| BUG-<id> | <title> | <component> | P2 | Medium | <workaround summary> |
## Low (SEV-4)
| Bug ID | Title | Component | Priority | Effort |
|--------|-------|-----------|----------|--------|
| BUG-<id> | <title> | <component> | P3 | Small |
## By Component
| Component | Critical | High | Medium | Low | Total |
|-----------|----------|------|--------|-----|-------|
| <component> | <n> | <n> | <n> | <n> | <n> |
## Sprint Fitness
### Recommended for This Sprint
<Bugs that are high priority AND small/medium effort>
| Bug ID | Title | Severity | Effort | Rationale |
|--------|-------|----------|--------|-----------|
| BUG-<id> | <title> | Critical | Small | Data loss risk, quick fix |
### Needs More Information
<Bugs that cannot be properly prioritized without additional data>
| Bug ID | Title | What is Missing |
|--------|-------|-----------------|
| BUG-<id> | <title> | No reproduction steps |
Severity Matrix
| Severity |
Data Impact |
Feature Impact |
User Scope |
Examples |
| Critical |
Data loss or corruption |
Complete outage |
All users |
Payment processing fails, user data deleted, auth bypass |
| High |
Data integrity risk |
Major feature broken, no workaround |
Most users |
Cannot save documents, search returns wrong results |
| Medium |
No data impact |
Feature degraded, workaround exists |
Some users |
Slow page load, filter does not work but manual sort does |
| Low |
None |
Cosmetic or minor |
Few users |
Misaligned button, typo in error message, tooltip missing |
Priority Calculation
Priority is not the same as severity. Priority determines when to fix it.
|
No Workaround |
Difficult Workaround |
Easy Workaround |
| All/Most Users, Frequent |
P0 — Drop everything |
P1 — Fix this sprint |
P1 — Fix this sprint |
| All/Most Users, Rare |
P1 — Fix this sprint |
P2 — Next sprint |
P2 — Next sprint |
| Some/Few Users, Frequent |
P1 — Fix this sprint |
P2 — Next sprint |
P3 — Backlog |
| Some/Few Users, Rare |
P2 — Next sprint |
P3 — Backlog |
P3 — Backlog |
A Critical severity bug is always P0 regardless of this matrix.
Anti-patterns
- All bugs marked critical — If everything is critical, nothing is. A cosmetic alignment issue is not the same severity as data loss. Use the severity matrix honestly. Teams that over-classify lose the ability to distinguish real emergencies.
- No severity definition — Triaging without a shared severity matrix produces inconsistent results. Different people will classify the same bug differently. Always apply the defined matrix, not gut feeling.
- Triaging without reproduction status — A bug that cannot be reproduced cannot be reliably fixed or estimated. Flag unreproduced bugs and require reproduction before assigning them to a sprint. Guessing at severity for unreproduced bugs leads to wasted effort.
- Ignoring frequency and user impact — Severity alone does not determine priority. A high-severity bug that affects 0.01% of users once a month is lower priority than a medium-severity bug that hits every user daily.
- Not grouping by component — A triage report that is just a flat list does not help with assignment. Group by component so team leads can see their scope at a glance.
- Triaging in isolation — Bugs often cluster around the same root cause. Before marking 5 bugs as separate items, check whether they share a common component or trigger. Fixing the root cause may resolve multiple bugs.
- No effort estimation — Priority without effort context makes sprint planning impossible. A P1 bug that takes 2 weeks to fix needs different planning than a P1 bug that takes 2 hours.
- Stale triage — A triage report from 3 sprints ago is misleading. Bugs get fixed, new ones arrive, priorities shift. Re-triage regularly or mark the report with an expiration context.
1---2name: triage-bugs3description: Triage and prioritize bug reports when the user asks to classify bugs, prioritize a bug backlog, triage issues, or sort bugs by severity for sprint planning4---5
6# Triage Bugs
7
8## Overview
9
10Classify and prioritize a batch of bug reports using a consistent severity matrix and priority framework. The output is a structured, actionable bug triage that enables sprint planning, on-call prioritization, and resource allocation decisions.
11
12## Workflow
13
141. **Read project context** — Check `.chalk/docs/` for:
15 - Architecture docs (to map bugs to components)
16 - Previous triage reports for consistency
17 - Team structure or component ownership docs
18 - Any existing severity definitions the team uses
19
202. **Gather bug reports** — From `$ARGUMENTS` and conversation context:
21 - If a list of bugs is provided in conversation, use those
22 - If a file or document is referenced, read it
23 - If pointed to an issue tracker, read available bug details
24 - For each bug, extract: title, description, reproduction steps, environment, reporter, date reported
25
263. **Check reproduction status** — For each bug, determine:
27 - **Reproduced**: Steps provided and confirmed working
28 - **Partially reproduced**: Steps provided but inconsistent results
29 - **Not reproduced**: No reproduction steps or unable to reproduce
30 - **Not attempted**: Reproduction has not been tried yet
31 - Bugs without reproduction status should be flagged — triaging unreproduced bugs is guesswork
32
334. **Assign severity** — Using the severity matrix below, classify each bug:
34 - **Critical (SEV-1)**: Data loss, security vulnerability, complete feature outage for all users
35 - **High (SEV-2)**: Major feature broken with no workaround, significant data corruption risk, affects majority of users
36 - **Medium (SEV-3)**: Feature broken but workaround exists, affects subset of users, degraded experience
37 - **Low (SEV-4)**: Cosmetic issue, minor inconvenience, affects edge case usage, has easy workaround
38
395. **Calculate priority** — Priority combines severity with business context:
40 - **User Impact**: How many users are affected? (all, most, some, few)
41 - **Frequency**: How often does it occur? (every time, often, sometimes, rarely)
42 - **Workaround**: Is there a workaround? (none, difficult, easy)
43 - Priority = Severity adjusted by impact, frequency, and workaround availability
44 - A medium-severity bug that hits every user with no workaround may be higher priority than a high-severity bug that affects 1% of users rarely
45
466. **Map to components** — For each bug:
47 - Identify the affected system component or module
48 - Suggest the owning team or area of expertise
49 - Note if the bug crosses component boundaries (these are often harder to fix)
50
517. **Estimate effort** — Provide a rough effort estimate:
52 - **Small**: Likely a straightforward fix, isolated change, low risk (< 1 day)
53 - **Medium**: Requires investigation, touches multiple files, moderate risk (1-3 days)
54 - **Large**: Requires significant investigation or architectural change, high risk (3+ days)
55 - **Unknown**: Cannot estimate without further investigation
56
578. **Group the results** — Present the triaged bugs grouped by:
58 - Primary grouping: Severity (Critical first)
59 - Secondary grouping: Component
60 - Also provide a sprint fitness view: which bugs should go in the next sprint based on priority and effort
61
629. **Determine the next file number** — List files in `.chalk/docs/engineering/` matching `*_bug_triage*`. Find the highest number and increment by 1.
63
6410. **Write the report** — Save to `.chalk/docs/engineering/<n>_bug_triage_<sprint_or_date>.md` if requested, or present in conversation.
65
6611. **Confirm** — Summarize: total bugs triaged, severity distribution, top 3 priority items, and any bugs that need more information before they can be properly triaged.
67
68## Filename Convention
69
70```
71<number>_bug_triage_<sprint_or_date>.md
72```
73
74Examples:
75- `8_bug_triage_sprint_14.md`
76- `10_bug_triage_2024_q4.md`
77
78## Bug Triage Format
79
80```markdown
81# Bug Triage Report
82
83Last updated: <YYYY-MM-DD>
84Sprint/Period: <sprint name or date range>
85Triaged by: <agent or person>
86
87## Summary
88
89| Severity | Count | Action |
90|----------|-------|--------|
91| Critical (SEV-1) | <n> | Fix immediately |
92| High (SEV-2) | <n> | Fix this sprint |
93| Medium (SEV-3) | <n> | Schedule for next sprint |
94| Low (SEV-4) | <n> | Backlog |
95| **Total** | **<n>** | |
96
97| Reproduction Status | Count |
98|-------------------|-------|
99| Reproduced | <n> |
100| Partially reproduced | <n> |
101| Not reproduced | <n> |
102| Not attempted | <n> |
103
104## Critical (SEV-1)
105
106### BUG-<id>: <Title>
107
108| Field | Value |
109|-------|-------|
110| Severity | Critical |
111| Priority | P0 |
112| Component | <component> |
113| Suggested Owner | <team or area> |
114| Reproduction | Reproduced / Not reproduced |
115| User Impact | All users / Most users |
116| Frequency | Every time / Often |
117| Workaround | None |
118| Effort | Small / Medium / Large / Unknown |
119
120**Description**: <1-2 sentence summary>
121**Impact**: <What happens to users when this bug occurs>
122**Recommendation**: <Fix immediately. Suggested approach if known.>
123
124## High (SEV-2)
125
126### BUG-<id>: <Title>
127
128| Field | Value |
129|-------|-------|
130| ... | ... |
131
132## Medium (SEV-3)
133
134| Bug ID | Title | Component | Priority | Effort | Workaround |
135|--------|-------|-----------|----------|--------|------------|
136| BUG-<id> | <title> | <component> | P2 | Medium | <workaround summary> |
137
138## Low (SEV-4)
139
140| Bug ID | Title | Component | Priority | Effort |
141|--------|-------|-----------|----------|--------|
142| BUG-<id> | <title> | <component> | P3 | Small |
143
144## By Component
145
146| Component | Critical | High | Medium | Low | Total |
147|-----------|----------|------|--------|-----|-------|
148| <component> | <n> | <n> | <n> | <n> | <n> |
149
150## Sprint Fitness
151
152### Recommended for This Sprint
153<Bugs that are high priority AND small/medium effort>
154
155| Bug ID | Title | Severity | Effort | Rationale |
156|--------|-------|----------|--------|-----------|
157| BUG-<id> | <title> | Critical | Small | Data loss risk, quick fix |
158
159### Needs More Information
160<Bugs that cannot be properly prioritized without additional data>
161
162| Bug ID | Title | What is Missing |
163|--------|-------|-----------------|
164| BUG-<id> | <title> | No reproduction steps |
165```
166
167## Severity Matrix
168
169| Severity | Data Impact | Feature Impact | User Scope | Examples |
170|----------|------------|----------------|------------|----------|
171| Critical | Data loss or corruption | Complete outage | All users | Payment processing fails, user data deleted, auth bypass |
172| High | Data integrity risk | Major feature broken, no workaround | Most users | Cannot save documents, search returns wrong results |
173| Medium | No data impact | Feature degraded, workaround exists | Some users | Slow page load, filter does not work but manual sort does |
174| Low | None | Cosmetic or minor | Few users | Misaligned button, typo in error message, tooltip missing |
175
176## Priority Calculation
177
178Priority is not the same as severity. Priority determines when to fix it.
179
180| | No Workaround | Difficult Workaround | Easy Workaround |
181|---|---|---|---|
182| **All/Most Users, Frequent** | P0 — Drop everything | P1 — Fix this sprint | P1 — Fix this sprint |
183| **All/Most Users, Rare** | P1 — Fix this sprint | P2 — Next sprint | P2 — Next sprint |
184| **Some/Few Users, Frequent** | P1 — Fix this sprint | P2 — Next sprint | P3 — Backlog |
185| **Some/Few Users, Rare** | P2 — Next sprint | P3 — Backlog | P3 — Backlog |
186
187A Critical severity bug is always P0 regardless of this matrix.
188
189## Anti-patterns
190
191- **All bugs marked critical** — If everything is critical, nothing is. A cosmetic alignment issue is not the same severity as data loss. Use the severity matrix honestly. Teams that over-classify lose the ability to distinguish real emergencies.
192- **No severity definition** — Triaging without a shared severity matrix produces inconsistent results. Different people will classify the same bug differently. Always apply the defined matrix, not gut feeling.
193- **Triaging without reproduction status** — A bug that cannot be reproduced cannot be reliably fixed or estimated. Flag unreproduced bugs and require reproduction before assigning them to a sprint. Guessing at severity for unreproduced bugs leads to wasted effort.
194- **Ignoring frequency and user impact** — Severity alone does not determine priority. A high-severity bug that affects 0.01% of users once a month is lower priority than a medium-severity bug that hits every user daily.
195- **Not grouping by component** — A triage report that is just a flat list does not help with assignment. Group by component so team leads can see their scope at a glance.
196- **Triaging in isolation** — Bugs often cluster around the same root cause. Before marking 5 bugs as separate items, check whether they share a common component or trigger. Fixing the root cause may resolve multiple bugs.
197- **No effort estimation** — Priority without effort context makes sprint planning impossible. A P1 bug that takes 2 weeks to fix needs different planning than a P1 bug that takes 2 hours.
198- **Stale triage** — A triage report from 3 sprints ago is misleading. Bugs get fixed, new ones arrive, priorities shift. Re-triage regularly or mark the report with an expiration context.