Differences between revisions 1 and 24 (spanning 23 versions)
Revision 1 as of 2008-05-07 00:39:28
Size: 1506
Editor: mpm
Comment:
Revision 24 as of 2014-09-27 23:57:55
Size: 6510
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== Bug statuses and what they mean: == #pragma section-numbers 2
<<Include(A:dev)>>
Line 3: Line 4:
 * Unread - no one's ever responded to this bug (bad)
 * Deferred - we've decided not to deal with this problem now
 * Chatting - we're discussing a solution
 * Need-eg - we need more information to progress
 * In-progress - a partial fix exists
 * Testing - a patch is merged, but poster has not confirmed it works
 * Done-cbb - (could be better or couldn't be bothered) not perfect, but we've done as much as we're going to do
 * Resolved - problem is fixed
= Managing Bugs =
Line 12: Line 6:
== Priorities and what they mean: == {{https://docs.google.com/spreadsheets/d/1lEvdGoN-jgLMZ_1eu8ceXDzEdWGWuDTzPSDVCz4jtxs/embed/oimg?id=1lEvdGoN-jgLMZ_1eu8ceXDzEdWGWuDTzPSDVCz4jtxs&oid=1929125339&zx=w96cwe5uoapn}}
Line 14: Line 8:
 * critical - data loss or security issue
 * urgent - bug that is blocking development
 * bug - bug that's not blocking development
 * feature - it's not a bug, it's a feature
 * wish - would be nice
How to do bug triage on the BugTracker.
Line 20: Line 10:
== Triage == <<TableOfContents>>
Line 22: Line 12:
 Here's a useful [http://www.selenic.com/mercurial/bts/issue?@columns=title,id,activity,status,assignedto&@sort=status,activity&@group=priority&@filter=status,priority,status,priority&@pagesize=100&@startwith=0&status=-1,1,3,5&priority=1,2,3&@dispname=triage triage query] == Definitions ==
=== Status levels: ===
 * '''UNCONFIRMED''' - no one's ever responded to this bug (bad)
 * '''CONFIRMED''' - we're discussing a solution
 * '''NEED_EXAMPLE''' - we need more information to progress
 * '''IN_PROGRESS''' - a partial fix exists or fix exists but isn't yet integrated
 * '''TESTING''' - a patch is merged, but poster has not confirmed it works, or it didn't reach the main repo yet
 * '''RESOLVED''' - problem is fixed or was not a bug
Line 24: Line 21:
 * Sort open issues by priority and activity
 * Diagnose issues and add appropriate people to the nosy list
 * Merge duplicates by setting superseder in the more recent bug, copy its nosy list to the older bug, and add a pointer to the new issue in the old issue if it contains new info
 * Improve bug titles to be more informative
 * Add appropriate categories
 * Set appropriate priorities (eg degrade urgent issues with workarounds to bug)
 
=== Priorities ===
 * '''critical''' - data loss or security issue
 * '''urgent''' - bug that's blocking development or is a regression
 * '''normal''' - bug that's not blocking development
 * '''wish''' - would be nice

== Regressions, and why they're a priority ==

We pay special attention to '''regressions''', which are defined as "a bug that breaks something that worked in earlier releases". These issues should immediately be set to urgent. We should attempt to fix these bugs before the next release.

Because regressions may break workflows or tools that users have come to depend on, they are more important than other bugs that simply impede new ways of trying to use Mercurial. Large numbers of unaddressed regressions will also make upgrading risky and unattractive for users, which is unhealthy for a project.

Note that "performance regressions" generally do not meet the above definition, and thus should not necessarily be promoted to urgent.

/!\ Because regressions are higher priority than other bugs, bug fixes in one area that introduce a regression elsewhere are considered worse than no action. This will prevent certain classes of bugs from being fixed.

== How to do triage ==

=== Handling individual bugs ===

 * Get diagnostics first, give suggestions later (see [[Advice]])
 * Respond to new bugs as quickly as possible, especially where more info would be useful
 * If it is a common issue, mark it as a duplicate
 * Make sure its priority is set appropriately
 * Make sure its title is useful (ie convert commands should mention the backend)
 * Add appropriate developers to CC list
 * Add appropriate topics
 * Bugs that have long been fixed in main should be marked RESOLVED/FIXED
 * Bugs that have been marked 'testing' can be marked RESOLVED/FIXED after two weeks if the user doesn't confirm earlier
 * Bugs that have recently accepted patches should be marked TESTING
 * Bugs with active work, including patches that aren't in main should be marked in IN_PROGRESS
 * Bugs that require more info from the user should be marked NEED_EXAMPLE
 * Bugs that remain in the NEED_EXAMPLE state for more than two weeks can be marked RESOLVED/ARCHIVED
 * Features and wishes that have been decided against should move to RESOLVED/WONTFIX
 * Issues that are unlikely to ever be addressed (eg MQ feature requests) should be moved to RESOLVED/ARCHIVED

{i} There is a hook installed on an hourly mirror of main that causes !HgBot to update the BugTracker according to changelog commit messages. Summaries containing '(issueNNNN)' will automatically move issues to the testing state. References to `issueNNNN` in the body of the message will create references in that issue to the changeset. You can also explicitly write `closes issueNNN` or `fixes issueNNN` to move the bug into testing, or `see issueNNN` or `addressesNNN` to create a reference in the issue.

=== Dealing with third-party issues ===

If the third-party project is large enough to have its own BTS:

 * assign to project maintainer ``or`` add URL for proper BTS
 * mark the issue RESOLVED/INVALID

For smaller projects, we'll allow using our BTS to track issues if the maintainer is a known BTS user:

 * assign to project maintainer
 * reduce priority to bug or lower
 * mark '''RESOLVED/INVALID''' if bug remains inactive

For any other projects:

 * link to project homepage or extension page on wiki
 * mark the issue '''RESOLVED/INVALID'''

=== Dealing with patches on the BTS ===

We don't accept patches on the BTS:

 * they are hard to view
 * they are hard to comment on
 * they are hard to apply
 * only people who are nosy on an issue see them
 * there is no easy way to search the BTS for unapplied patches so if a patch isn't immediately applied, it is forgotten

So when someone adds a patch to the BTS (which already contains a link to ContributingChanges next to the attach button!), do the following immediately so the patch doesn't sit in limbo for years:

 * immediately assign the bug to submitter
 * mark the issue IN_PROGRESS
 * add a comment that says "Read http://mercurial.selenic.com/wiki/ContributingChanges"

=== Marking Duplicates ===
 * Choose whichever bug is resolved (or has a clear description) as the master
 * Set superseder on the duplicate to point to the master, add a note, and set the bug as resolved
 * If the master is not resolved, copy the nosy list from the duplicate and add a message pointing back to 'issueXXX'

=== Reducing Backlog ===
 * Close out bugs that have been in '''UNCONFIRMED''', '''TESTING''', or '''NEED_EXAMPLE''' states too long ([[http://bz.selenic.com/buglist.cgi?order=Last%20Changed&list_id=4659&resolution=---&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEED_EXAMPLE&bug_status=TESTING| all '''UNCONFIRMED''', '''TESTING''', or '''NEED_EXAMPLE''' bug]]
 * Similarly, check if bugs marked '''IN_PROGRESS''' are really in progress
 * Sort open issues by priority and activity - here is an ''old, invalid'' [[http://www.selenic.com/mercurial/bts/issue?@columns=title,id,activity,status,assignedto&@sort=status,activity&@group=priority&@filter=status,priority,status,priority&@pagesize=100&@startwith=0&status=-1,1,3,5&priority=1,2,3&@dispname=triage|triage]] and an ''old, invalid'' [[http://www.selenic.com/mercurial/bts/issue?@columns=title,id,activity,priority,status&@sort=activity&@filter=status&@pagesize=100&@startwith=0&status=-1,1,2,3,4,5,6,7&@dispname=unloved|unloved]] query
 * Degrade long-standing bugs to features and features to wishes where appropriate

== See also ==

 * WritingTests

----
CategoryBugs CategoryDeveloper CategoryProcess

Note:

This page is primarily intended for developers of Mercurial.

Managing Bugs

https://docs.google.com/spreadsheets/d/1lEvdGoN-jgLMZ_1eu8ceXDzEdWGWuDTzPSDVCz4jtxs/embed/oimg?id=1lEvdGoN-jgLMZ_1eu8ceXDzEdWGWuDTzPSDVCz4jtxs&oid=1929125339&zx=w96cwe5uoapn

How to do bug triage on the BugTracker.

1. Definitions

1.1. Status levels:

  • UNCONFIRMED - no one's ever responded to this bug (bad)

  • CONFIRMED - we're discussing a solution

  • NEED_EXAMPLE - we need more information to progress

  • IN_PROGRESS - a partial fix exists or fix exists but isn't yet integrated

  • TESTING - a patch is merged, but poster has not confirmed it works, or it didn't reach the main repo yet

  • RESOLVED - problem is fixed or was not a bug

1.2. Priorities

  • critical - data loss or security issue

  • urgent - bug that's blocking development or is a regression

  • normal - bug that's not blocking development

  • wish - would be nice

2. Regressions, and why they're a priority

We pay special attention to regressions, which are defined as "a bug that breaks something that worked in earlier releases". These issues should immediately be set to urgent. We should attempt to fix these bugs before the next release.

Because regressions may break workflows or tools that users have come to depend on, they are more important than other bugs that simply impede new ways of trying to use Mercurial. Large numbers of unaddressed regressions will also make upgrading risky and unattractive for users, which is unhealthy for a project.

Note that "performance regressions" generally do not meet the above definition, and thus should not necessarily be promoted to urgent.

/!\ Because regressions are higher priority than other bugs, bug fixes in one area that introduce a regression elsewhere are considered worse than no action. This will prevent certain classes of bugs from being fixed.

3. How to do triage

3.1. Handling individual bugs

  • Get diagnostics first, give suggestions later (see Advice)

  • Respond to new bugs as quickly as possible, especially where more info would be useful
  • If it is a common issue, mark it as a duplicate
  • Make sure its priority is set appropriately
  • Make sure its title is useful (ie convert commands should mention the backend)
  • Add appropriate developers to CC list
  • Add appropriate topics
  • Bugs that have long been fixed in main should be marked RESOLVED/FIXED
  • Bugs that have been marked 'testing' can be marked RESOLVED/FIXED after two weeks if the user doesn't confirm earlier
  • Bugs that have recently accepted patches should be marked TESTING
  • Bugs with active work, including patches that aren't in main should be marked in IN_PROGRESS
  • Bugs that require more info from the user should be marked NEED_EXAMPLE
  • Bugs that remain in the NEED_EXAMPLE state for more than two weeks can be marked RESOLVED/ARCHIVED
  • Features and wishes that have been decided against should move to RESOLVED/WONTFIX
  • Issues that are unlikely to ever be addressed (eg MQ feature requests) should be moved to RESOLVED/ARCHIVED

{i} There is a hook installed on an hourly mirror of main that causes HgBot to update the BugTracker according to changelog commit messages. Summaries containing '(issueNNNN)' will automatically move issues to the testing state. References to issueNNNN in the body of the message will create references in that issue to the changeset. You can also explicitly write closes issueNNN or fixes issueNNN to move the bug into testing, or see issueNNN or addressesNNN to create a reference in the issue.

3.2. Dealing with third-party issues

If the third-party project is large enough to have its own BTS:

  • assign to project maintainer or add URL for proper BTS

  • mark the issue RESOLVED/INVALID

For smaller projects, we'll allow using our BTS to track issues if the maintainer is a known BTS user:

  • assign to project maintainer
  • reduce priority to bug or lower
  • mark RESOLVED/INVALID if bug remains inactive

For any other projects:

  • link to project homepage or extension page on wiki
  • mark the issue RESOLVED/INVALID

3.3. Dealing with patches on the BTS

We don't accept patches on the BTS:

  • they are hard to view
  • they are hard to comment on
  • they are hard to apply
  • only people who are nosy on an issue see them
  • there is no easy way to search the BTS for unapplied patches so if a patch isn't immediately applied, it is forgotten

So when someone adds a patch to the BTS (which already contains a link to ContributingChanges next to the attach button!), do the following immediately so the patch doesn't sit in limbo for years:

3.4. Marking Duplicates

  • Choose whichever bug is resolved (or has a clear description) as the master
  • Set superseder on the duplicate to point to the master, add a note, and set the bug as resolved
  • If the master is not resolved, copy the nosy list from the duplicate and add a message pointing back to 'issueXXX'

3.5. Reducing Backlog

  • Close out bugs that have been in UNCONFIRMED, TESTING, or NEED_EXAMPLE states too long (all '''UNCONFIRMED''', '''TESTING''', or '''NEED_EXAMPLE''' bug

  • Similarly, check if bugs marked IN_PROGRESS are really in progress

  • Sort open issues by priority and activity - here is an old, invalid triage and an old, invalid unloved query

  • Degrade long-standing bugs to features and features to wishes where appropriate

4. See also


CategoryBugs CategoryDeveloper CategoryProcess

ManagingBugs (last edited 2015-03-11 18:18:47 by mpm)