Skip to content

Commit fb12c61

Browse files
jelbournjosephperrott
authored andcommitted
ci: change required labels for issue triage (angular#38932)
Issue triage _currently_ requires a component to be set and one of the following to be true for an issue to be considered triaged: * Marked as a bug _and_ has a severity _and_ has a frequency * Mark as a feature * Marked as a refactor * Marked as a discussion * Marked as "confusing" * Marked as "use-case" This PR changes the rules so that (in addition to the component), triage requires: * A priority label (P0 through P5) * Marked as a feature * Marked as a discussion Triage may also apply additional, optional info labels to issues. [This document outlines the new priority scheme](https://docs.google.com/document/d/1mN2zWsr1pxChSTHC7UkOgl4PhhuoFONtG_zcMWeqLwA/preview). While this PR is focused on issue triage and not PR triage, I have changed the PR section triage to remove reference to the "effort: *" and "risk: *" labels. Looking through recent PRs, Kapunahele is the only person applying these, so it's clear that this bit is no longer widely practiced. This is just one step in the always-ongoing process of managing GitHub labels. More adjustments will come over time. In writing this PR, I have already unearthed a few more areas that can be polished in follow-ups. PR Close angular#38932
1 parent ea19683 commit fb12c61

File tree

3 files changed

+64
-63
lines changed

3 files changed

+64
-63
lines changed

.github/angular-robot.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,24 +137,28 @@ triage:
137137
# arrays of labels that determine if an issue has been fully triaged
138138
l2TriageLabels:
139139
-
140-
- "type: bug/fix"
141-
- "severity*"
142-
- "freq*"
140+
- "P0"
143141
- "comp: *"
144142
-
145-
- "type: feature"
143+
- "P1"
146144
- "comp: *"
147145
-
148-
- "type: refactor"
146+
- "P2"
149147
- "comp: *"
150148
-
151-
- "type: RFC / Discussion / question"
149+
- "P3"
152150
- "comp: *"
153151
-
154-
- "type: confusing"
152+
- "P4"
155153
- "comp: *"
156154
-
157-
- "type: use-case"
155+
- "P5"
156+
- "comp: *"
157+
-
158+
- "feature"
159+
- "comp: *"
160+
-
161+
- "discussion"
158162
- "comp: *"
159163

160164
# options for the triage PR plugin

.ng-dev/caretaker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const caretaker: CaretakerConfig = {
1212
query: `is:pr is:open status:success label:"action: merge-assistance"`,
1313
},
1414
{
15-
name: 'Primary Triage Queue',
15+
name: 'Initial Triage Queue',
1616
query: `is:open is:issue no:milestone`,
1717
}
1818
]

docs/TRIAGE_AND_LABELS.md

Lines changed: 51 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22

33
This document describes how the Angular team uses labels and milestones to triage issues on GitHub.
44
The basic idea of the process is that caretaker only assigns a component (`comp: *`) label.
5-
The owner of the component is then responsible for the secondary / component-level triage.
5+
The owner of the component is then responsible for the detailed / component-level triage.
66

77

88
## Label Types
99

1010
### Components
1111

1212
The caretaker should be able to determine which component the issue belongs to.
13-
The components have a clear piece of source code associated with it within the `/packages/` folder of this repo.
13+
The components have a clear piece of source code associated with it within the `/packages/` folder
14+
of this repo.
1415

1516
* `comp: animations`
1617
* `comp: bazel` - @angular/bazel rules
@@ -48,84 +49,80 @@ We will treat them as a component even thought no specific source tree is associ
4849
* `comp: performance`
4950
* `comp: security`
5051

51-
Sometimes, especially in the case of cross-cutting issues or PRs, these PRs or issues belong to multiple components.
52-
In these cases, all applicable component labels should be used to triage the issue or PR.
52+
Sometimes, especially in the case of cross-cutting issues or PRs, these PRs or issues belong to
53+
multiple components. In these cases, all applicable component labels should be used to triage the
54+
issue or PR.
5355

56+
## Caretaker Triage Process (Initial Triage)
5457

55-
### Type
58+
The caretaker assigns `comp: *` labels to new issues as they come in.
59+
Untriaged issues can be found by selecting the issues with no milestone.
5660

57-
What kind of problem is this?
61+
If an issue or PR obviously relates to a release regression, the caretaker must assign an
62+
appropriate priority (`P0` or `P1`) and ensure that someone from the team is actively working to
63+
resolve it.
5864

59-
* `type: RFC / discussion / question`
60-
* `type: bug`
61-
* `type: docs`
62-
* `type: feature`
63-
* `type: performance`
64-
* `type: refactor`
65-
* `type: use-case`
66-
* `type: confusing`
65+
Initial triage should occur daily so that issues can move into detailed triage.
6766

67+
Once the initial triage is done, the ng-bot automatically adds the milestone `needs triage`.
6868

69-
## Caretaker Triage Process (Primary Triage)
69+
## Detailed Triage
7070

71-
It is the caretaker's responsibility to assign `comp: *` to each new issue as they come in.
72-
Issues that haven't been triaged can be found by selecting the issues with no milestone.
71+
Detailed triage can be done by anyone familiar with the issue subject matter.
7372

74-
If it's obvious that the issue or PR is related to a release regression, the caretaker is also responsible for assigning the `severity(5): regression` label to make the issue or PR highly visible.
73+
### Step 1: Does the issue have enough information?
7574

76-
The primary triage should be done on a daily basis so that the issues become available for secondary triage without much of delay.
75+
Gauge whether the issue has enough information to act upon. This typically includes a test case
76+
via StackBlitz or GitHub and steps to reproduce. If the issue may be legitimate but needs more
77+
information, add the "needs clarification" label. These labels can be revisted if the author can
78+
provide further clarification. If the issue does have enough information, move on to step 2.
7779

78-
The reason why we limit the responsibility of the caretaker to this one label is that it is likely that without domain knowledge the caretaker could mislabel issues or lack knowledge of duplicate issues.
80+
### Step 2: Bug, feature, or discussion?
7981

80-
Once the primary triage is done, the ng-bot automatically adds the milestone `needsTriage`.
82+
By default, all issues are considered bugs. Bug reports require only a priority label.
8183

84+
If the issue is a feature request, apply the "feature" label. Use your judgement to determine
85+
whether the feature request is reasonable. If it's clear that the issue requests something
86+
infeasible, close the issue with a comment explaining why.
8287

83-
## Component's owner Triage Process
88+
If the issue is an RFC or discussion, apply the "discussion" label. Use your judgement to determine
89+
whether this discussion belongs on GitHub. Discussions here should pertain to the technical
90+
implementation details of Angular. Redirect requests for debugging help or advice to a more
91+
appropriate channel unless they're capturing a legitimate bug.
8492

85-
The component owner is responsible for assigning one of the labels from each of these categories to the issues that have the milestone `needsTriage`:
93+
### Step 3: Set a Priority
8694

87-
- `type: *`
88-
- `frequency: *` (only required for `type: bug/fix`)
89-
- `severity: *` (only required for `type: bug/fix`)
95+
For bug reports, set a priority label.
9096

91-
We've adopted the issue categorization based on [user pain](http://www.lostgarden.com/2008/05/improving-bug-triage-with-user-pain.html) used by AngularJS. In this system every issue is assigned frequency and severity based on which the total user pain score is calculated.
97+
| Label | Description |
98+
|----|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
99+
| P0 | An issue that causes a full outage, breakage, or major function unavailability for everyone, without any known workaround. The issue must be fixed immediately, taking precedence over all other work. Should receive updates at least once per day. |
100+
| P1 | An issue that significantly impacts a large percentage of users; if there is a workaround it is partial or overly painful. The issue should be resolved before the next release. |
101+
| P2 | The issue is important to a large percentage of users, with a workaround. Issues that are significantly ugly or painful (especially first-use or install-time issues). Issues with workarounds that would otherwise be P0 or P1. |
102+
| P3 | An issue that is relevant to core functions, but does not impede progress. Important, but not urgent. |
103+
| P4 | A relatively minor issue that is not relevant to core functions, or relates only to the attractiveness or pleasantness of use of the system. Good to have but not necessary changes/fixes. |
104+
| P5 | The team acknowledges the request but (due to any number of reasons) does not plan to work on or accept contributions for this request. The issue remains open for discussion. |
92105

93-
The issues with type `type: feature`, `type: refactor` and `type: RFC / Discussion / question` do not require a frequency and severity.
94106

95-
Following is the definition of various frequency and severity levels:
107+
Issues marked with "feature" or "discussion" don't require a priority.
96108

97-
1. `freq(score): *` – How often does this issue come up? How many developers does this affect?
98-
* low (1) - obscure issue affecting a handful of developers
99-
* moderate (2) - impacts auxiliary usage patterns, only small number of applications are affected
100-
* high (3) - impacts primary usage patterns, affecting most Angular apps
101-
* critical (4) - impacts all Angular apps
102-
1. `severity(score): *` - How bad is the issue?
103-
* inconvenience (1) - causes ugly/boilerplate code in apps
104-
* confusing (2) - unexpected or inconsistent behavior; hard-to-debug
105-
* broken expected use (3) - it's hard or impossible for a developer using Angular to accomplish something that Angular should be able to do
106-
* memory leak (4)
107-
* regression (5) - functionality that used to work no longer works in a new release due to an unintentional change
108-
* security issue (6)
109+
### Step 4: Apply additional information labels
109110

111+
Many optional labels provide additional context for issues. Consider adding any of the following if
112+
they apply to the issue:
110113

111-
These criteria are then used to calculate a "user pain" score as follows:
114+
* Browser or operating system labels (`windows`, `ie11`, etc.)
115+
* Labels that inform the severity (`regression`, `has workaround`, `no workaround`)
116+
* Labels that categorize the bug (`performance`, `refactoring`, `memory leak`)
117+
* Community engagement labels (`good first issue`)
112118

113-
`pain = severity × frequency`
114-
115-
This score can then be used to estimate the impact of the issue which helps with prioritization.
116-
117-
Once the component's owner triage is done, the ng-bot automatically changes the milestone from `needsTriage` to `Backlog`.
119+
Once this triage is done, the ng-bot automatically changes the milestone from `needs triage` to
120+
`Backlog`.
118121

119122

120123
## Triaging PRs
121124

122-
Triaging PRs is the same as triaging issues, except that the labels `frequency: *` and `severity: *` are replaced by:
123-
- `effort*`
124-
- `risk: *`
125-
126-
PRs also have additional label categories that should be used to signal their state.
127-
128-
Every triaged PR must have a `action: *` label assigned to it:
125+
PRs labels signal their state. Every triaged PR must have a `action: *` label assigned to it:
129126

130127
* `action: discuss`: Discussion is needed, to be led by the author.
131128
* _**Who adds it:** Typically the PR author._

0 commit comments

Comments
 (0)