Skip to content

Commit 3d1ae6e

Browse files
committed
Create chapter about rust-lang/rust issue triaging
This explains some of the existing processes around triage, and how I do it.
1 parent e524b56 commit 3d1ae6e

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
- [Release Process](./release/process.md)
104104
- [Rollup Procedure](./release/rollups.md)
105105
- [Triage Procedure](./release/triage-procedure.md)
106+
- [Issue Triaging](./release/issue-triaging.md)
106107
- [Triaging Crater Runs](./release/crater.md)
107108
- [Archive](./archive/README.md)
108109
- [Friends of the Tree](./archive/fott.md)

src/release/issue-triaging.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Issue triaging
2+
3+
This page is about the `rust-lang/rust` repository. Other repositories may have different processes.
4+
5+
Tracking issues (label `C-tracking-issue`) don't fit into this procedure and are treated differently.
6+
7+
## Motivation
8+
9+
The `rust-lang/rust` repository has thousands of issues and hundreds of people working on it.
10+
It is impossible for all people to check and solve issues. The goals of triaging are connecting
11+
issues to the relevant people, and helping them be more effective at fixing the issue.
12+
13+
In practice, it is unrealistic for all issues to be solved quickly and found the by right people.
14+
Through applications of labels we make the issue tracker more searchable for future reference,
15+
so that people in the future have an easier time finding related issues or issues they are interested
16+
in working on.
17+
18+
Triaging can be done by **everyone**, no matter your permissions. We encourage everyone to help here,
19+
as triaging work is highly parallelizable and easy to get started with.
20+
21+
## Initial triaging
22+
23+
When an issue is opened, it gets the `needs-triage` label. This ensures that every issue gets an initial
24+
look and that no issue is forgotten, or that when it is forgotten, it is at least visibly forgotten by still having the label.
25+
26+
`needs-triage` is an initial checkpoint. The effort needed to get an issue past the label should be minimal.
27+
28+
To do the initial triage and remove the `needs-triage` label, the following conditions should be fulfilled/considered.
29+
It's okay if not all of these are always considered, treat it as guideline, not a hard check list. It is also not exhaustive.
30+
31+
- The issue should make sense, that is it should present a problem.
32+
- For example, if an issue is a question about Rust in general, the issue should be closed and the user redicted to URLO/Discord.
33+
You can of course answer the question too :) (but make sure to mention that the user should go to URLO/Discord next time).
34+
- Add appropriate labels ([Labels](#labels))
35+
- Specifically, `T-*` and `C-*` are the most relevant
36+
- If the issue contains no reproduction but needs one, ask for one and add the `S-needs-repro` label
37+
- If the issue could benefit from bisecting the regression, add `E-needs-bisection` (or do the bisection yourself)
38+
- Does this issue require nightly? Add `requires-nightly`.
39+
- Is the issue a regression? Apply the `regression-untriaged` label (or figure out what regression it is exactly)
40+
- If you happen to know people who this issue is relevant to, ping them.
41+
- For example, write `cc @ThatPerson` if `ThatPerson` has been working a lot on the problematic feature recently
42+
- Does this issue require incomplete or internal features? Add `requires-{incomplete,internal}-features`.
43+
44+
For applying and removing labels, unprivileged users can use rustbot.
45+
For example, `@rustbot label +T-compiler +C-bug +A-linkage +O-macos -needs-triage`.
46+
47+
To see a list of all labels, check out the "labels" page next to the search bar in the issue tracker.
48+
49+
## Further triaging
50+
51+
For issues that have been through the initial triaging step (that is, don't have the `needs-triage` label anymore), there are usually
52+
still things that can be improved. There are often many more labels that could be applied (using rustbot again if you don't have privileges).
53+
54+
Additionally, old (there is no clear definition of old yet, but something on the order of months) `S-needs-repro` issues can be closed
55+
if there is no way to make progress without a reproduction. This requires privileges, but if you don't have them, you can just link the issue
56+
on Zulip (for example in `t-release/triage` or `general`) and someone with privileges can close it for you.
57+
58+
Another useful thing to do is go through `E-needs-mcve` and `E-needs-bisection` issues and creating minimizations or bisecting the issue
59+
(using [cargo-bisect-rustc](`https://github.com/rust-lang/cargo-bisect-rustc`)). When you provide one, you can also remove the label
60+
using rustbot (`@rustbot label -E-needs-bisection`).
61+
62+
## Labels
63+
64+
There are many different labels that can be applied to issues.
65+
66+
- `needs-triage`: signals that an issue is new and needs initial triage
67+
- `T-*`: Specifies the team or teams that this issue is relevant to, for example compiler, types or libs
68+
- `C-*`: Specifies the category of the label, for example a bug, tracking issue or discussion
69+
- `O-*`: For platform-specific issues, specifies the platform (architecture or operating system). For example macos, aarch64, windows
70+
- `A-*`: The areas that the issue is relevant to, for example linkage, patterns, diagnostics
71+
- `F-*`: When the issue concerns a specific (usually unstable) feature
72+
- `requires-nightly`: This issue is not relevant to the stable compiler
73+
- `requires-{incomplete,internal}-features`: This issue requires an incomplete or internal feature. The latter often means that the issue
74+
should be closed in accordance with compiler [MCP 620](https://github.com/rust-lang/compiler-team/issues/620).
75+
- `regression-*`: Labels for tracking issues that are regressions.
76+
- `D-*`: Labels for diagnostics issue.
77+
- `I-*`: Different labels about the nature (originally, importance) of a bug. For example ICE, slow code, heavy code, crashes, unsoundness.
78+
- `P-*`: Priority labels. Applied using the [Compiler Prioritization procedure](../compiler/prioritization.md)
79+
- `S-*`: The status of an issue, for example S-needs-repro.
80+
- `E-*`: Calls for participation, for example to minimize an issue (E-needs-mcve) or because there is mentoring available (E-mentor).

0 commit comments

Comments
 (0)