| > [!IMPORTANT] | 
 | > This page was copied from https://github.com/dart-lang/sdk/wiki and needs review. | 
 | > Please [contribute](../CONTRIBUTING.md) changes to bring it up-to-date - | 
 | > removing this header - or send a CL to delete the file. | 
 |  | 
 | --- | 
 |  | 
 | The Dart SDK repo contains a large number of tools and libraries maintained by a | 
 | variety of sub-teams. Having them all in one repo makes it easier to land sweeping | 
 | changes across those components, but it comes at the expense of a big, unwieldy | 
 | issue tracker. To tame that chaos, we use the labels and policies explained here. | 
 |  | 
 | ## Assignment | 
 |  | 
 | Like many modern software teams, Dart uses a pull model to assign tasks to | 
 | people. Most issues are assigned to a team (using the area labels below), but | 
 | not proactively assigned to an individual. When a person begins active work on | 
 | an issue, they assign the issue to themselves. | 
 |  | 
 | If you see an issue with a person assigned to it, it's usually in-progress. This | 
 | isn't always the case. Sometimes an issue is assigned to someone because we know | 
 | they will be the one to fix it, but they haven't started yet. When work gets | 
 | paused (sometimes for a long time) the assignee might not unassign themselves. | 
 |  | 
 | ## Labels | 
 |  | 
 | Labels help us narrow down issues to the subsets each team or person cares | 
 | about. They let us count related issues to compare areas or see trends over | 
 | time. And they help the larger community understand what we're working on and | 
 | the state of their bugs. | 
 |  | 
 | For consistency, label names are `kebab-case`: lowercase words separated | 
 | by hyphens. Since we have a lot of labels, most of them are categorized. The | 
 | first word in the label name usually indicates the category. The labels and | 
 | categories are: | 
 |  | 
 | ### Area ("area-") | 
 |  | 
 | These are the main labels that people on the Dart team care about. Each area | 
 | label defines a subteam (sometimes just one person) that owns issues and is | 
 | responsible for resolving them or passing them to another area. | 
 |  | 
 | Every issue must have a single area label. We've found that when labels have no | 
 | area, or multiple areas, it's not clear who is responsible for it, and it falls | 
 | through the cracks. If a single issue needs work from multiple teams, then it's | 
 | split into two or more issues, each one assigned to a single area. | 
 |  | 
 | The "[area-meta][]" area is special. A meta-issue groups a set of other issues | 
 | together to coordinate work across multiple teams. The issue usually describes | 
 | the overall plan at a high level and then links to the specific issues related | 
 | to it. Since no one team is responsible for "area-meta", an issue with that | 
 | label should also be assigned to a single person that is responsible for | 
 | tracking the status of the individual linked issues and closing the meta-issue | 
 | when everything is complete. | 
 |  | 
 | ### Browser | 
 |  | 
 | For issues on our web products, this tracks which browser is affected by the | 
 | issue. We don't always apply this diligently, so the absence of this could mean | 
 | either "all browsers" or "we haven't investigated which browsers are affected". | 
 | Likewise, the *presence* of this doesn't necessarily mean other browsers are in | 
 | the clear. | 
 |  | 
 | ### Customer ("customer-") | 
 |  | 
 | If an issue seriously affects a key partner, this tracks who they are. This | 
 | helps us prioritize the issue and makes sure we keep them in the loop on it. | 
 |  | 
 | We also use this to track Dart subteams that are affected by an issue owned | 
 | by another area. For example, if someone files a bug that the VM is failing to | 
 | display a certain static error, it would likely have "[area-cfe][]" (because the | 
 | front end team handles static errors) and "[customer-vm][]" because that's where | 
 | the error isn't being surfaced. | 
 |  | 
 | ### OS ("os-") | 
 |  | 
 | Similar to browser, this tracks which operating systems an issue manifests on. | 
 | Again, we aren't super diligent about this. The presence of this label indicates | 
 | that we know it *does* have a problem on that OS, but may still possibly affect | 
 | others. | 
 |  | 
 | ### Priority | 
 |  | 
 | Priority labels indicate the team's urgency around resolving the issue. They | 
 | roughly mean: | 
 |  | 
 | *   **[P0][]**: "World is on fire." Issues like multiple products | 
 |     unusable, a security issue exposing personal information, or a dramatic | 
 |     performance regression. As many team members as needed should drop | 
 |     everything to fix this. | 
 |  | 
 | *   **[P1][]**: "Something's broken." A single project is unusable or has | 
 |     many test failures. It should be fixed before resuming normal work. | 
 |  | 
 | *   **[P2][]**: "Business as usual." These are normal issues and feature | 
 |     requests that we can work into our schedule without any particular urgency. | 
 |  | 
 | *   **[P3][]**: "If you get a chance." Cosmetic or minor bugs with no | 
 |     urgency and low visibility. Polish or nice-to-haves. | 
 |  | 
 | Almost every issue should have exactly one of these labels. | 
 |  | 
 | ### Closed ("closed-") | 
 |  | 
 | As the name implies, these labels are applied to closed issues, and indicate why | 
 | it was closed. In a perfect world, every issue filed would uniquely identify a | 
 | real, important problem and every closed issue would be fixed. | 
 |  | 
 | Alas, sometimes issues are duplicates of others, are too confusing, or we simply | 
 | don't have the time to do anything about it. We take every issue seriously, but | 
 | we also have to maximize the value we provide in the limited time we have, which | 
 | requires some trade-offs. | 
 |  | 
 | If an issue is closed without a closed label, that implies it is fixed. There | 
 | should usually be a link to the commit that fixes the issue or a comment | 
 | explaining it. Otherwise, it should have one of the resolution labels applied, | 
 | and often a comment explaining why that resolution was chosen. | 
 |  | 
 | The reasons are: | 
 |  | 
 | *   **[closed-as-intended][]**: This is one of the most contentious reasons to | 
 |     close an issue. This label means the current behavior is what we want, even | 
 |     though it's clearly not what the person who filed the issue wants. | 
 |  | 
 |     When possible, the person closing the bug should write a comment explaining | 
 |     why the current behavior is preferred. Often, there are constraints or | 
 |     interactions with other systems that prevent us from supporting the | 
 |     requested behavior. Sometimes it's simply making a trade-off between users | 
 |     who want different things. | 
 |  | 
 | *   **[closed-cannot-reproduce][]**: It's hard to verify that a fix is the right | 
 |     one without being able to see the underlying problem first. Sometimes this | 
 |     happens because the bug got fixed before anyone looked at the issue. Other | 
 |     times, the problem is still there but the investigator failed to get it to | 
 |     manifest. This resolution means they weren't able to make the issue happen | 
 |     and they believe it's likely to not be a problem any more. | 
 |  | 
 |     If an issue you filed is closed with this but it is still valid, consider | 
 |     adding a comment with more detailed reproduction steps so the issue can be | 
 |     re-opened. | 
 |  | 
 | *   **[closed-duplicate][]**: There is already another issue that tracks | 
 |     this change. When an issue is closed with this label, it should also have a | 
 |     comment that links to the other issue it is a duplicate of. | 
 |  | 
 |     Determining if two issues are duplicates often relies on | 
 |     understanding internal architecture and implementation details. Sometimes | 
 |     two issues look like the same problem but need to get solved in different | 
 |     ways. Other times, two seemingly-different issues have the same underlying | 
 |     cause. | 
 |  | 
 |     Because we use issues to track units of work, we treat issues as duplicates | 
 |     if they will be solved by a single change. This means that when we close one | 
 |     issue, we are not discarding the information in the issue or the important | 
 |     discussion it might have. That's still there and easy to find since the open | 
 |     issue links to it. It simply means we think there is only one task to | 
 |     perform that will address both issues, so there is no need to keep both | 
 |     open. | 
 |  | 
 |     In general, when deduplicating issues, we tend to keep the older one open | 
 |     unless the newer one is clearly more useful. | 
 |  | 
 | *   **[closed-invalid][]**: Sometimes, despite everyone's best intentions, we | 
 |     can't figure out what an issue description is trying to convey. Users | 
 |     sometimes file issues on our repo for completely unrelated products. | 
 |     Mistakes happen. This label means we couldn't make heads or tails of the | 
 |     issue. | 
 |  | 
 |     Most of the time, we try to avoid this and instead use "[needs-info][]" to | 
 |     get clarification from the person who filed the issue. | 
 |  | 
 | *   **[closed-obsolete][]**: The issue has been around for a long time with no | 
 |     activity. No one has worked on a solution and people don't seem to be | 
 |     clamoring for one either. The problem may have been fixed without someone | 
 |     realizing there was an issue. Sometimes stuff that was important turns out | 
 |     not to be later when needs change. | 
 |  | 
 |     In that case, there's little value keeping a zombie issue around and it will | 
 |     get closed. It's always OK to re-open the issue or file a new one of it | 
 |     turns out the problem is still relevant. This label is often applied | 
 |     manually by people when closing bugs, but also by the bot according to our | 
 |     expiration policy below. | 
 |  | 
 | *   **[closed-not-planned][]**: Possibly the saddest label. This is for issues | 
 |     where the request is valid but isn't expected to happen. Sometimes this is | 
 |     because other higher-priority enhancements would directly conflict with it. | 
 |     Often, it's simply a matter of not having enough time to get to it. | 
 |  | 
 |     When an issue is closed as not planned, that doesn't mean it will *never* | 
 |     happen. Priorities and capacity changes over time and it's entirely possible | 
 |     that it will come to the fore in the future. But in the meantime, we think | 
 |     it more clearly communicates the team's current priorities to close the | 
 |     issue instead of letting it linger even though we have no intent to | 
 |     allocate time to it. | 
 |  | 
 | ### Type ("type-") | 
 |  | 
 | An issue's type categorizes the kind of problem entailed, or the nature of the | 
 | work required to solve it. There are a handful: | 
 |  | 
 | *   **[type-bug][]**: Issues with this label describe problems where the current | 
 |     behavior of the system is wrong and is not intended to act this way. It | 
 |     could be as severe as a crash or a more subtle misbehavior, but it should be | 
 |     obviously wrong in a way that almost no user wants. | 
 |  | 
 | *   **[type-code-health][]**: This tracks internal changes to our tools and | 
 |     workflows to make them cleaner, simpler, or more maintainable in ways that | 
 |     aren't user visible. | 
 |  | 
 | *   **[type-documentation][]**: A request to add or improve documentation. Since | 
 |     most of the high level docs like the pages on [dartlang.org][] are managed | 
 |     in other repositories, this ends up not being particularly common and is | 
 |     mostly API-level doc comments. | 
 |  | 
 | *   **[type-enhancement][]**: Every request for a concrete change to a tool that | 
 |     isn't a bug is an enhancement. These are new features, refinements to | 
 |     existing features, or other changes where the current behavior was intended | 
 |     but may no longer be desired or sufficient. Most issues around changing code | 
 |     get this label. | 
 |  | 
 | *   **[type-performance][]**: These are issues where the observed behavior is | 
 |     correct but the efficiency leaves something to be desired. "Performance" | 
 |     varies across a number of axes: execution time, memory usage, startup time, | 
 |     etc. | 
 |  | 
 | *   **[type-security][]**: The scariest kind of issue. These are problems | 
 |     related to user privacy or the ability of a malicious actor to take over a | 
 |     system. | 
 |  | 
 | *   **[type-task][]**: Tasks track work that needs to be done but where the | 
 |     result isn't a change to code or documentation. This is things like moving | 
 |     data around, publishing packages, tweaking servers or other infrastructure, | 
 |     etc. | 
 |  | 
 | Any given issue should have exactly one of these. If not, it's probably still | 
 | waiting to be triaged. | 
 |  | 
 | ### Area-specific labels | 
 |  | 
 | Subteams often have their own labels that are only meaningful for a certain | 
 | product or system. Those labels start with the name of the team's area. For | 
 | example, "analyzer-", "vm-", etc. Area-specific labels are owned by the | 
 | respective team and it's up to that team to manage how the labels are used, what | 
 | they mean, and when they can be removed. | 
 |  | 
 | ### Other labels | 
 |  | 
 | There are a few other miscellaneous labels you might run into: | 
 |  | 
 | *   **[blocked][]**: This marks an issue where the team is unable to make | 
 |     progress on it because of some external constraint or other team. There | 
 |     should be a comment explaining what it's blocked on. When possible, it will | 
 |     link directly to another issue that is blocking this one. | 
 |  | 
 | *   **[cla: yes][]**, **[cla: no][]**: Before we can accept a change from a | 
 |     non-Google contributor, they must sign our [contributor license | 
 |     agreement][cla]. We have a bot that requests that they do that and tracks | 
 |     whether they have using these labels. | 
 |  | 
 | *   **[contributions-welcome][]**: This marks an issue which has been vetted as | 
 |     "legitimate," and which the owning subteam would welcome a contribution | 
 |     from an external developer. Resolving an issue marked with this label | 
 |     should not be overly difficult, and should not require a great amount of | 
 |     code. This label is typically applied to bugs and documentation requests, | 
 |     rather than feature requests, due to the lower cost of review and | 
 |     maintenance. | 
 |  | 
 |  | 
 | *   **[merge-to-dev][]**, **[merge-to-stable][]**: These are used to track | 
 |     requests to cherry-pick a change from main to one of the [release | 
 |     branches][branches]. | 
 |  | 
 | *   **[needs-info][]**: Like the name says, this means we need more | 
 |     information. This is often because the initial issue description is unclear. | 
 |     Other times, it means we have done some work fixing the issue and want | 
 |     someone else to validate the solution. | 
 |  | 
 |     When someone applies this label, they should also write a comment explaining | 
 |     what information or clarification they are looking for. Issues like this | 
 |     have a tendency to go stale because we can't make progress on it and the | 
 |     original submitter may have moved on. This means that we are likely to close | 
 |     an issue with this label if it hasn't had any activity in 60 days. If you | 
 |     care about keeping the issue alive, please try to provide the information it | 
 |     needs. | 
 |  | 
 | [area-cfe]: https://github.com/dart-lang/sdk/labels/area-cfe | 
 | [area-meta]: https://github.com/dart-lang/sdk/labels/area-meta | 
 | [blocked]: https://github.com/dart-lang/sdk/labels/blocked | 
 | [branches]: Branches-and-releases.md | 
 | [cla: no]: https://github.com/dart-lang/sdk/labels/cla%3A%20no | 
 | [cla: yes]: https://github.com/dart-lang/sdk/labels/cla%3A%20yes | 
 | [cla]: https://cla.developers.google.com/about/google-individual | 
 | [closed-as-intended]: https://github.com/dart-lang/sdk/labels/closed-as-intended | 
 | [closed-cannot-reproduce]: https://github.com/dart-lang/sdk/labels/closed-cannot-reproduce | 
 | [closed-duplicate]: https://github.com/dart-lang/sdk/labels/closed-duplicate | 
 | [closed-invalid]: https://github.com/dart-lang/sdk/labels/closed-invalid | 
 | [closed-not-planned]: https://github.com/dart-lang/sdk/labels/closed-not-planned | 
 | [closed-obsolete]: https://github.com/dart-lang/sdk/labels/closed-obsolete | 
 | [contributions-welcome]: https://github.com/dart-lang/sdk/labels/contributions-welcome | 
 | [customer-vm]: https://github.com/dart-lang/sdk/labels/customer-vm | 
 | [dartlang.org]: https://www.dartlang.org | 
 | [merge-to-dev]: https://github.com/dart-lang/sdk/labels/merge-to-dev | 
 | [merge-to-stable]: https://github.com/dart-lang/sdk/labels/merge-to-stable | 
 | [needs-info]: https://github.com/dart-lang/sdk/labels/needs-info | 
 | [P0]: https://github.com/dart-lang/sdk/labels/P0 | 
 | [P1]: https://github.com/dart-lang/sdk/labels/P1 | 
 | [P2]: https://github.com/dart-lang/sdk/labels/P2 | 
 | [P3]: https://github.com/dart-lang/sdk/labels/P3 | 
 | [type-bug]: https://github.com/dart-lang/sdk/labels/type-bug | 
 | [type-code-health]: https://github.com/dart-lang/sdk/labels/type-code-health | 
 | [type-documentation]: https://github.com/dart-lang/sdk/labels/type-documentation | 
 | [type-enhancement]: https://github.com/dart-lang/sdk/labels/type-enhancement | 
 | [type-performance]: https://github.com/dart-lang/sdk/labels/type-performance | 
 | [type-security]: https://github.com/dart-lang/sdk/labels/type-security | 
 | [type-task]: https://github.com/dart-lang/sdk/labels/type-task | 
 |  | 
 | ## Queries | 
 |  | 
 | * [Issues with no area](https://github.com/dart-lang/sdk/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3Aarea-analyzer-cfe+-label%3Aarea-analyzer+-label%3Aarea-build+-label%3Aarea-dart2js+-label%3Aarea-dev-compiler+-label%3Aarea-documentation+-label%3Aarea-front-end+-label%3Aarea-html+-label%3Aarea-infrastructure+-label%3Aarea-intellij+-label%3Aarea-js-interop+-label%3Aarea-kernel+-label%3Aarea-language+-label%3Aarea-library+-label%3Aarea-meta+-label%3Aarea-observatory+-label%3Aarea-pkg+-label%3Aarea-samples+-label%3Aarea-sdk+-label%3Aarea-spec-parser+-label%3Aarea-specification+-label%3Aarea-test+-label%3Aarea-vm) | 
 | * [Issues with no priority](https://github.com/dart-lang/sdk/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3Ap0-critical+-label%3Ap1-high+-label%3Ap2-medium+-label%3Ap3-low+) | 
 | * [Issues with no type](https://github.com/dart-lang/sdk/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3Atype-bug+-label%3Atype-code-health+-label%3Atype-documentation+-label%3Atype-enhancement+-label%3Atype-performance+-label%3Atype-security+-label%3Atype-task) | 
 | * [Meta-issues with no assignee](https://github.com/dart-lang/sdk/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aarea-meta+no%3Aassignee) |