Issue Triaging - Rust Forge (original) (raw)

Rust Forge

Issue triaging

This page is about the rust-lang/rust repository. Other repositories under the rust-lang GitHub organization likely have different processes.

Tracking issues (issues labeled C-tracking-issue) don’t fit into this procedure and are treated differently.

Motivation

The rust-lang/rust repository has thousands of issues and hundreds of people working on it. It is impossible for all people to check and solve issues. The goals of triaging are to:

In practice, it is unrealistic for all issues to be solved quickly and found by right people. Through applications of labels we make the issue tracker more searchable for future reference, so that people in the future have an easier time finding related issues or issues they are interested in working on.

Triaging can be done by everyone, no matter if you have write access to rust-lang/rust or not. We encourage everyone to help here, as triaging work is highly parallelizable and easy to get started with.

Some actions that require write access to rust-lang/rust include:

If you don’t have write access but you assess that these actions should be done, you can just open a new topic in t-release/triage zulip channel, or add a comment linking to the issue in an existing topic in the t-release/triage channel.

Initial triaging

When an issue is opened, it usually receives the needs-triage label automatically. This is done so that untriaged issues are easily discovered and are filterable, to make sure that new issues receive an initial triaging pass (describe below). needs-triage is an initial checkpoint. The effort needed to get an issue past the label should be small.

To do the initial triage and remove the needs-triage label, the following conditions should be fulfilled/considered. It’s okay if not all of these are always considered. Treat this non-exhaustive list as a guideline, not a hard checklist:

Applying and removing labels

Users without write access to rust-lang/rust can use @rustbot to add or remove the labels allowed by the triagebot.toml configuration as a workaround.

Users with write access should change the labels directly to avoid sending a notification to everyone subscribed to the issue unnecessarily.

For example:

@rustbot label +T-compiler +C-bug +A-linkage +O-macos -needs-triage

To see a list of all labels, check out the “labels” page next to the search bar in the issue tracker.

Note that some labels may only be applied by users with write access to rust-lang/rust. Refer to the allow-unauthenticated list under [relabel] section in triagebot.toml to see what labels users without write access may use.

Labels

There are many different labels that can be applied to issues.

Creating labels

Triagebot needs to support `@rustbot label: xxx` usages terminated with a period or whitespace (as inline invocation), so the label name must consist of only alphanumeric or hyphen (`-`) or underscore (`_`) characters.

Relnotes issues

Release note issues will currently come with needs-triage by default. The triage for relnotes is usually best done if you have sufficient context. Leave them as-is if you don’t.

Internal Compiler Error (ICE) issue triage

For issues that include an Internal Compiler Error (ICE):

Further triaging

For issues that have been through the initial triaging step (that is, don’t have the needs-triage label anymore), there are usually still things that can be improved. There are often many more labels that could be applied (using rustbot again if you don’t have write access to rust-lang/rust).

Additionally, old (there is no clear definition of old yet, but something on the order of months) S-needs-repro issues can be closed if there is no way to make progress without a reproduction. This requires write access to rust-lang/rust, but if you don’t have them, you can just link the issue on Zulip (for example in t-release/triage or general) and someone with write access can close it for you.

Another useful thing to do is to go through E-needs-mcve and E-needs-bisection issues and create minimizations or bisecting the issue (using cargo-bisect-rustc). When you provide one, you can also remove the label using rustbot (@rustbot label -E-needs-bisection).


  1. The O in O-* labels originally stood for operating system (OS).
  2. The I in I-* labels originally stood for importance. This makes the most sense for the I-*-nominated labels. For most I-* labels however it makes sense to interpret the I as issue (kind).
  3. The E in E-* labels stands for experience.