|
| 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