|
| 1 | +# Triage Process and Github Labels for Angular 2 |
| 2 | + |
| 3 | +This document describes how the Angular team uses labels and milestones to triage issues on github. |
| 4 | + |
| 5 | +# Issues and PRs |
| 6 | +## Triaged vs Untriaged Issues |
| 7 | + |
| 8 | +Every triaged issue must have four attributes assigned to it: |
| 9 | + |
| 10 | +* `priority` -- P0 through P4. P0 issues are "drop everything and do this now". P4 are nice to have. |
| 11 | +* `component` -- Which area of Angular knowledge this relates to. |
| 12 | +* `effort` -- Rough assessment of how much work this issue is. E.g. `effort: hour` means |
| 13 | +"probably a few hours of work". |
| 14 | +* `type` -- Whether this issue is a bug, feature, or other kind of task. |
| 15 | + |
| 16 | +Untriaged issues are any issues in the queue that don't yet have these four attributes. |
| 17 | + |
| 18 | +You can view a report of untriaged issues here, in our |
| 19 | +[Angular Triage Dashboard](http://mhevery.github.io/github_issues/). |
| 20 | + |
| 21 | +Issues should also have a clear action to complete that can be addressed or resolved within the |
| 22 | +scope of Angular 2. We'll close issues that don't meet these criteria. |
| 23 | + |
| 24 | +### Assigning Issues to Milestones |
| 25 | + |
| 26 | +Any issue that is being worked on must have: |
| 27 | + |
| 28 | +* An `assignee`: The person doing the work. |
| 29 | +* A `Milestone`: When we expect to complete this work. |
| 30 | + |
| 31 | +We aim to only have at most three milestones open at a time: |
| 32 | + |
| 33 | +* Closing Milestone: A milestone with a very small number of issues, about to release. |
| 34 | +* Current Milestone: Work that we plan to complete within one week. |
| 35 | +* Next Milestone: Work that is > 1 week but current for the team. |
| 36 | + |
| 37 | +The [backlog](https://github.com/angular/angular/issues?q=is%3Aopen+is%3Aissue+no%3Amilestone) |
| 38 | +consists of all issues that have been triaged but do not have an assignee or milestone. |
| 39 | + |
| 40 | +## Triaged vs Untriaged PRs |
| 41 | + |
| 42 | +Because of the cumulative pain associated with rebasing PRs, we triage PRs daily, and |
| 43 | +closing or reviewing PRs is a top priority ahead of other ongoing work. |
| 44 | + |
| 45 | +Every triaged PR must have a `pr_action` label assigned to it and an assignee: |
| 46 | + |
| 47 | +* `pr_action: cleanup` -- more work is needed from the current assignee. |
| 48 | +* `pr_action: discuss` -- discussion is needed, to be led by the current assignee. |
| 49 | +* `pr_action: merge` -- OK to merge this as soon as tests are green, `pr_state: LGTM`, and `CLA: |
| 50 | +yes` are true. assignee (or anyone else) can merge. |
| 51 | +* `pr_action: review` -- work is complete and comment is needed from the assignee. |
| 52 | + |
| 53 | +In addition, PRs can have the following states: |
| 54 | + |
| 55 | +* `pr_state: LGTM` -- PR may have outstanding changes but does not require further review. |
| 56 | +* `pr_state: WIP` -- PR is experimental or rapidly changing. Not ready for review or triage. |
| 57 | +* `pr_state: blocked` -- PR is blocked on an issue or other PR. Not ready for review or triage. |
| 58 | + |
| 59 | +Note that an LGTM state does not mean a PR is ready to merge: for example, a reviewer might set the |
| 60 | +LGTM state but request a minor tweak that doesn't need further review, e.g., a rebase or small |
| 61 | +uncontroversial change. |
| 62 | + |
| 63 | +PRs do not need to be assigned to milestones, unless a milestone release should be held for that |
| 64 | +PR to land. |
| 65 | + |
| 66 | +Victor (`vsavkin`) and Tobias (`tbosch`) are owners of the PR queue. Here is a list of [current |
| 67 | +untriaged PRs](https://github.com/angular/angular/pulls?utf8=%E2%9C%93&q=is%3Aopen+no%3Amilestone+is%3Apr+-label%3A%22pr_action%3A+cleanup%22+-label%3A%22pr_action%3A+merge%22+-label%3A%22pr_action%3A+review%22+-label%3A%22pr_action%3A+discuss%22+-label%3A%22pr_state%3A+blocked%22+-label%3A%22pr_state%3A+WIP%22+). |
| 68 | + |
| 69 | +# Prioritization of Work |
| 70 | + |
| 71 | +What should you be working on? |
| 72 | + |
| 73 | +1. Any PRs that are assigned to you that don't have `pr_state: WIP` or `pr_state: blocked` |
| 74 | +1. Any issues that are assigned to you in the lowest-numbered Milestone |
| 75 | +1. Any issues that are assigned to you in any Milestone |
| 76 | + |
| 77 | +If there are no issues assigned to you in any Milestone, pick an issue, self-assign it, and add |
| 78 | +it to the most appropriate Milestone based on effort. |
| 79 | + |
| 80 | +Here are some suggestions for what to work on next: |
| 81 | + |
| 82 | +* Filter for issues in a component that you are knowledgeable about, and pick something that has a |
| 83 | + high priority. |
| 84 | +* Filter for any small effort task that has the special `cust: GT` or `cust:Ionic` tags, |
| 85 | +and priority > P3. |
| 86 | +* Add a new task that's really important, add `component`, `priority`, `effort`, `type` and |
| 87 | +assign it to yourself and the most appropriate milestone. |
| 88 | + |
| 89 | +# Labels Used in Triage |
| 90 | + |
| 91 | +## Priority |
| 92 | +How urgent is this issue? We use priority to determine what should be worked on in each new |
| 93 | +milestone. |
| 94 | + |
| 95 | +* `P0: critical` -- drop everything to work on this |
| 96 | +* `P1: urgent` -- resolve quickly in the current milestone. people are blocked |
| 97 | +* `P2: required` -- needed for development but not urgent yet. workaround exists, or e.g. new API |
| 98 | +* `P3: important` -- must complete before Angular 2 is ready for release |
| 99 | +* `P4: nice to have` -- a good idea, but maybe not until after release |
| 100 | + |
| 101 | + |
| 102 | +## Effort |
| 103 | +Rough, non-binding estimate of how much work this issue represents. Please change this assessment |
| 104 | +for anything you're working on to better reflect reality. |
| 105 | + |
| 106 | +* `effort: hour` -- straightforward issue that can be resolved in a few hours, e.g. < 1 day of work. |
| 107 | +* `effort: day` -- issue that will be a few days of work. Can be completed within a single |
| 108 | +milestone. |
| 109 | +* `effort: week` -- issue that will likely take more than 1 milestone to complete. |
| 110 | + |
| 111 | +<!-- We don't like these label names as |
| 112 | +they're not absolute (what is one developer-hour, really?) but decided it wasn't worth arguing |
| 113 | +over terms. --> |
| 114 | + |
| 115 | +## Component |
| 116 | +Which area of Angular knowledge is this issue most closely related to? Helpful when deciding what |
| 117 | +to work on next. |
| 118 | + |
| 119 | + * `comp: benchpress` -- benchmarks and performance testing → *tbosch*, *crossj* |
| 120 | + * `comp: build/dev-productivity` -- build process, e.g. CLI and related tasks → *iminar*, *caitp* |
| 121 | + * `comp: build/pipeline` -- build pipeline, e.g. ts2dart → *mprobst*, *alexeagle* |
| 122 | + * `comp: core` -- general core Angular issues, not related to a sub-category (see below) → |
| 123 | + *mhevery* |
| 124 | + * `comp: core/animations` -- animations framework → *matsko* |
| 125 | + * `comp: core/change_detection` -- change detection → *vsavkin* |
| 126 | + * `comp: core/di` -- dependency injection → *vicb*, *rkirov* |
| 127 | + * `comp: core/directives` -- directives |
| 128 | + * `comp: core/forms` -- forms → *vsavkin* |
| 129 | + * `comp: core/pipes` -- pipes |
| 130 | + * `comp: core/templating` -- templating |
| 131 | + * `comp: core/testbed` -- e2e tests and support for them |
| 132 | + * `comp: dart-transformer` -- Dart transforms → *kegluneq*, *jakemac* |
| 133 | + * `comp: data-access` -- → *jeffbcross* |
| 134 | + * `comp: docs` -- API docs and doc generation → *naomiblack*, *petebacondarwin* |
| 135 | + * `comp: material-components` -- Angular Material components built in Angular 2 → *jelbourn* |
| 136 | + * `comp: router` -- Component Router → *btford*, *igorminar*, *matsko* |
| 137 | + * `comp: wrenchjs` |
| 138 | + |
| 139 | +## Type |
| 140 | +What kind of problem is this? |
| 141 | + |
| 142 | +* `type RFC / discussion / question` |
| 143 | +* `type bug` |
| 144 | +* `type chore` |
| 145 | +* `type feature` |
| 146 | +* `type performance` |
| 147 | +* `type refactor` |
| 148 | + |
| 149 | +## Special Labels |
| 150 | + |
| 151 | +### action:design |
| 152 | +More active discussion is needed before the issue can be worked on. Typically used for `type: |
| 153 | +feature` or `type: RFC/discussion/question` |
| 154 | + |
| 155 | +<!-- TODO: Seems like this it's redundant to also have type:discussion, no? --> |
| 156 | + |
| 157 | +[See all issues that need discussion](https://github.com/angular/angular/labels/action:%20Design) |
| 158 | + |
| 159 | +### cla |
| 160 | +Managed by googlebot. Indicates whether a PR has a CLA on file for its author(s). Only issues with |
| 161 | +`cla:yes` should be merged into master. |
| 162 | + |
| 163 | +### cust |
| 164 | +This is an issue causing user pain for early adopter customers `cust: GT` or `cust: Ionic`. |
| 165 | + |
| 166 | +### WORKS_AS_INTENDED |
| 167 | + |
| 168 | +Only used on closed issues, to indicate to the reporter why we closed it. |
0 commit comments