BugBot: Difference between revisions

No edit summary
(Move has_str_no_range to the removed rules)
 
(46 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{ DISPLAYTITLE:Autonag: Bugzilla triaging bot and alerting system }}
{{ DISPLAYTITLE:BugBot: Bugzilla triaging bot and alerting system }}


<p style="font-size: larger; font-weight:bold;">
<p style="font-size: larger; font-weight:bold;">
This page lists all the actions done by the [https://github.com/mozilla/relman-auto-nag/ Autonag bot].</p>
This page lists all the actions done by [https://github.com/mozilla/bugbot/ BugBot].</p>


= Introduction =
= Introduction =
Every day hundreds of tickets are opened in [https://bugzilla.mozilla.org Bugzilla] which track the tasks, defects and enhancements needed for the development of Firefox and other Mozilla projects.  
Every day hundreds of tickets are opened in [https://bugzilla.mozilla.org Bugzilla] which track the tasks, defects and enhancements needed for the development of Firefox and other Mozilla projects.
Triaging and priotirizing these bugs are an essential part of our development process and we automate part of this process so as to increase our development turn around and improve the quality of our bugs metadata. The set of scripts we use to improve the quality of our bugs, decrease our triaging time and help Release Management ship better quality software is called '''Autonag'''.
Triaging and prioritizing these bugs are an essential part of our development process and we automate part of this process so as to increase our development turn around and improve the quality of our bugs metadata. The set of tools we use to improve the quality of our bugs, decrease our triaging time and help Release Management ship better quality software is called '''BugBot''' (formerly known as Autonag).


Initially created as an alerting system (by email) to our triagers, Autonag rules now also make changes to our bugs metadata on Bugzilla so as to fix inconsistencies.
Initially created as an alerting system (by email) to our triagers, BugBot rules now also make changes to our bugs metadata on Bugzilla so as to fix inconsistencies.
 
Rules that change automatically some data in Bugzilla (change a priority, needinfo somebody, close a bug…) are called "Rules with Autofix".
 
Rules that do not change data but have other results such as generate a report or send an email are called "Rules without Autofix".


If you want the bot to not make changes to a specific bug, add <code>[no-nag]</code> to its ''whiteboard'' field.
If you want the bot to not make changes to a specific bug, add <code>[no-nag]</code> to its ''whiteboard'' field.


= Rules =
= Active Rules =
== With autofix ==
{{BugBotRule
 
  | Rule ID  = 163
{{AutonagRule
  | Rule name = Variant Expiration
   | Rule name = Bug assigned but marked as <code>UNCONFIRMED</code>
  | Purpose  = Follow up on variants that need to be dropped or extended
   | Purpose   = Mitigate an issue in Bugzilla (bugs reported by new users are not tagged as <code>NEW</code>
  | Action    = Create a bug before the variant becomes expired and follow up to extend or drop it
   | Action    = Change the status from <code>UNCONFIRMED</code> to <code>ASSIGNED</code> if there is an assignee
  | Source    = variant_expiration.py
   | Example   = 1495908
}}
   | Source    = assignee_but_unconfirmed.py  
{{BugBotRule
   | Rule name = Detect spam bugs
  | Purpose  = Automatically detect and handle spam bugs
  | Action    = Close the bug as "INVALID" and move it to the "Invalid Bugs" product
   | Source    = spambug.py
}}
{{BugBotRule
   | Rule name = File bugs for new actionable crashes
  | Purpose  = Automate discovering actionable crash reports to speed up fixes, reduce user impact, and save engineering time.
  | Action    = Open a crash bug with the relevant information
  | Source    = file_crash_bug.py
}}
{{BugBotRule
  | Rule name = Wrong bug type
  | Purpose  = Correct the bug type
  | Action    = Check if the bug type is the same as predicted by bugbug, if it is different and the bot is confident, correct the type
  | Source    = defectenhancementtask.py
}}
{{BugBotRule
  | Rule name = Enhancement or task with the "regression", "crash" or "assertion" keyword
  | Purpose  = Correct the bug type
   | Action    = Change the bug type to "defect"
  | Source    = regression_but_type_enhancement_task.py
}}
{{BugBotRule
  | Rule name = Closed bugs with dupeme keyword
  | Purpose  = Clean up the metadata
  | Action    = Remove the dupeme keyword
  | Source    = closed_dupeme.py
}}
{{BugBotRule
  | Rule name = Bugs with dupeme in the whiteboard instead of keyword
  | Purpose  = Clean up the metadata
  | Action    = Replace the '[dupeme]' whiteboard tag with the 'dupeme' keyword
  | Source    = dupeme_whiteboard_keyword.py
}}
{{BugBotRule
  | Rule name = Bugs with no 'Has STR' and STR in the first comment
  | Purpose  = Compleat missing metadata
  | Action    = Set the 'Has STR' field to be 'yes'
  | Source    = has_str_no_hasstr.py
}}
{{BugBotRule
  | Rule name = Copy metadata from duplicates
  | Purpose  = Increase the visibility of important information after closing a bug as a duplicate
  | Action    = Copy missed metadata from duplicate bugs
  | Source    = duplicate_copy_metadata.py
}}
{{BugBotRule
  | Rule name = Bugs with small crash volume
  | Purpose  = Identify topcrash or high severity bugs that started getting small crash volume
  | Action    = Remove the topcrash keywords and decrease the bug severity if the crash volume is very low
  | Source    = crash_small_volume.py
}}
{{BugBotRule
  | Rule name = Bugs with higher severity duplicates
   | Purpose  = Highlight inconsistency in the severity between a bug and its duplicates
   | Action    = Needinfo the assignee and fallback to the triage owner if a duplicate bug has a higher severity value
   | Source    = severity_higher_dups.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Regression keyword is missing
   | Rule name = Regression on nightly
   | Purpose  = Regression keyword is important to differentiate an actual defect
   | Purpose  = Increase the visibility of regression bugs
   | Action    = Sets the <code>regression</code> keyword on bugs with the <code>regression-range-wanted</code> keyword is set
   | Action    = Set nightly status flag to affected on newly filed regression bugs
  | Example  = 1461034
   | Source    = regression_new_set_nightly_affected.py  
   | Source    = has_regression_range_no_keyword.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Remove <code>leave-open</code> keyword on closed bug
   | Rule name = Remove <code>leave-open</code> keyword on closed bug
   | Purpose  = Clean up a mismatch in metadata
   | Purpose  = Clean up a mismatch in metadata
Line 40: Line 93:
   | Source    = leave_open.py  
   | Source    = leave_open.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = [meta] in title but not in keywords
   | Rule name = [meta] in title but not in keywords
   | Purpose  = Improve metedata quality
   | Purpose  = Improve metedata quality
Line 47: Line 100:
   | Source    = meta_summary_missing.py  
   | Source    = meta_summary_missing.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Update Firefox Status flags for bugs reopened during Nightly cycle
   | Rule name = Update Firefox Status flags for bugs reopened during Nightly cycle
   | Purpose  = Avoids potential issues for sheriffs and release managers
   | Purpose  = Avoids potential issues for sheriffs and release managers
Line 54: Line 107:
   | Source    = nightly_reopened.py
   | Source    = nightly_reopened.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bug with no assignee but a patch landed
   | Rule name = Bug with no assignee but a patch landed
   | Purpose  = Attribute unassigned bug to the developer that fixed it
   | Purpose  = Attribute unassigned bug to the developer that fixed it
Line 61: Line 114:
   | Source    = no_assignee.py  
   | Source    = no_assignee.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Close crash bugs with no crashes over 12 weeks
   | Rule name = Close crash bugs with no crashes over 12 weeks
   | Purpose  = Reduce the backlog of bugs to check for Release Managers  
   | Purpose  = Reduce the backlog of bugs to check for Release Managers  
Line 68: Line 121:
   | Source    = no_crashes.py  
   | Source    = no_crashes.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Remove <code>stalled</code> keyword on closed bugs
   | Rule name = Remove <code>stalled</code> keyword on closed bugs
   | Purpose  = Fix inconsistency between metadata and bug status
   | Purpose  = Fix inconsistency between metadata and bug status
Line 75: Line 128:
   | Source    = stalled.py
   | Source    = stalled.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Has meta keyword but not [meta] in the bug title
   | Rule name = Has meta keyword but not [meta] in the bug title
   | Purpose  = Having [meta] in the bug title helps with quick search results
   | Purpose  = Having [meta] in the bug title helps with quick search results
Line 82: Line 135:
   | Source    = summary_meta_missing.py
   | Source    = summary_meta_missing.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Set a Firefox status flag for beta if there is one for nightly and release
   | Rule name = Set a Firefox status flag for beta if there is one for nightly and release
   | Purpose  = Fix inconsistency in Firefox status flags that can lead to a bug going undetected by Release Managers during the beta cycle
   | Purpose  = Fix inconsistency in Firefox status flags that can lead to a bug going undetected by Release Managers during the beta cycle
Line 89: Line 142:
   | Source    = missing_beta_status.py  
   | Source    = missing_beta_status.py  
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = Increase priority of bugs tracked by Release Managers
  | Purpose  = Priotitizes bugs needing an action for shipping quality software
  | Action    = If a bug is tracked by a Release Manager, update the priority (P2 for nightly, P1 for the rest)
  | Example  = 1515946,1508277,1512493
  | Source    = mismatch_priority_tracking_release.py
  | Note      = There are multiple files mismatch-priority-tracking-*.py, one per channel
}}
{{AutonagRule
   | Rule name = Add <code>regression</code> keywords to bugs (uses Machine Learning)
   | Rule name = Add <code>regression</code> keywords to bugs (uses Machine Learning)
   | Purpose  = Surface regressions not filed as such
   | Purpose  = Surface regressions not filed as such
Line 104: Line 149:
   | Source    = regression.py  
   | Source    = regression.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Move untriaged bug into the correct component (uses machine learning)   
   | Rule name = Move untriaged bug into the correct component (uses machine learning)   
   | Purpose  = Decrease manual triage time
   | Purpose  = Decrease manual triage time
Line 111: Line 156:
   | Source    = component.py  
   | Source    = component.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Copy crash signature from duplicate bugs to main bugs
   | Rule name = Copy crash signature from duplicate bugs to main bugs
   | Purpose  = Crash bugs marked as duplicate of another one may have a different crash signature. We need to consolidate all signatures in the bug where a patch to fix them is being worked on, other wise we may not fix them all
   | Purpose  = Crash bugs marked as duplicate of another one may have a different crash signature. We need to consolidate all signatures in the bug where a patch to fix them is being worked on, other wise we may not fix them all
Line 118: Line 163:
   | Source    = copy_duplicate_info.py  
   | Source    = copy_duplicate_info.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Increase severity of bugs tracked by Release Managers
   | Rule name = Update release status flags based on info from the regressing bug
   | Purpose  = Fix inconsistency in metadata
   | Purpose  = Automate setting the release status flags
   | Action    = If a bug is tracked for an upcoming release but it's severity field is low, the severity is increased
   | Action    = Set release status flags to "affected" or "unaffected" based on the status flags in the regressing bug
  | Example  = 1538966
   | Source    = regression_set_status_flags.py  
   | Source    = tracked_bad_severity.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Nag triage owner to set severity on bugs
   | Rule name = Nag triage owner to set severity on bugs
   | Purpose  = Every defect should have a severity set. Also bugs with no severity set are harder to prioritize for Release Managers with regards to the release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage])
   | Purpose  = Every defect should have a severity set. Also bugs with no severity set are harder to prioritize for Release Managers with regards to the release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage])
Line 132: Line 176:
   | Source    = workflow/no_severity.py
   | Source    = workflow/no_severity.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Nag triage owner on P1 bugs with no activity
   | Rule name = Nag triage owner on P1 bugs with no activity
   | Purpose  = Since P1 means that the bug should be fixed for the next release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage]), the bug needs to show any progress in its resolution (or maybe the priority should be decreased)
   | Purpose  = Since P1 means that the bug should be fixed for the next release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage]), the bug needs to show any progress in its resolution (or maybe the priority should be decreased)
Line 139: Line 183:
   | Source    = workflow/p1_no_activity.py
   | Source    = workflow/p1_no_activity.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Nag triage owner to find an assignee for P1 bugs with no assignee and no activity
   | Rule name = Nag triage owner to find an assignee for P1 bugs with no assignee and no activity
   | Purpose  = Since P1 means that the bug should be fixed for the next release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage]), the bug urgently needs to have an assignee (or the priority should be decreased)
   | Purpose  = Since P1 means that the bug should be fixed for the next release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage]), the bug urgently needs to have an assignee (or the priority should be decreased)
Line 146: Line 190:
   | Source    = workflow/p1_no_assignee.py
   | Source    = workflow/p1_no_assignee.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Change the priority from P2 to P1 on assigned bug the merge day
   | Rule name = Change the priority from P2 to P1 on assigned bug the merge day
   | Purpose  = Since P2 means that the bug should be fixed for the next next release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage]), when we are the merge day then this bug automatically becomes a P1.
   | Purpose  = Since P2 means that the bug should be fixed for the next release (see [https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html#what-do-you-triage what-do-you-triage]), when we are the merge day then this bug automatically becomes a P1.
   | Action    = Update the priority to P1 and add a comment to explain.
   | Action    = Update the priority to P1 and add a comment to explain.
   | Example  =  
   | Example  =  
   | Source    = workflow/p2_merge_day.py
   | Source    = workflow/p2_merge_day.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Patch not landed  
   | Rule name = Patch not landed  
   | Purpose  = Identify bugs with an unlanded r+ patch. Maybe the patch is now obsolete or the bug needs to have a sheriff land the code with the <code>checkin-needed</code> keyword set.
   | Purpose  = Identify bugs with an unlanded r+ patch. Maybe the patch is now obsolete or the bug needs to have a sheriff land the code with the <code>checkin-needed</code> keyword set.
   | Action    = The bug assignee is needinfoed in Bugzilla to ask her/him to have look
   | Action    = The bug assignee is needinfoed in Bugzilla to ask her/him to have a look
   | Example  = 1496844
   | Example  = 1496844
   | Source    = not_landed.py
   | Source    = not_landed.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Regression without regressed_by and some bug dependencies  
   | Rule name = Regression without regressed_by and some bug dependencies  
   | Purpose  = Identify regressions which have dependencies (blocks or depends_on) and an empty regressed_by, probably people forgot to use the new field.
   | Purpose  = Identify regressions which have dependencies (blocks or depends_on) and an empty regressed_by, probably people forgot to use the new field.
Line 167: Line 211:
   | Source    = regression_without_regressed_by.py
   | Source    = regression_without_regressed_by.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Product::Component changed after the priority has been set  
   | Rule name = Product::Component changed after the priority has been set  
   | Purpose  = Identify bugs where Product::Component changed after the priority has been set. The priority is probably no more up-to-date and so triage owner needs to set it.
   | Purpose  = Identify bugs where Product::Component changed after the priority has been set. The priority is probably no more up-to-date and so triage owner needs to set it.
Line 174: Line 218:
   | Source    = prod_comp_changed_with_priority.py
   | Source    = prod_comp_changed_with_priority.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Close intermittent test failure bugs  
   | Rule name = Close intermittent test failure bugs  
   | Purpose  = Close intermittent test failure bugs which are P5s, not marked <code>leave-open</code>, and have not had a new failure in 21 days.
   | Purpose  = Close intermittent test failure bugs which are P5s, not marked <code>leave-open</code>, and have not had a new failure in 21 days.
Line 181: Line 225:
   | Source    = close_intermittents.py
   | Source    = close_intermittents.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Ask for a beta uplift request  
   | Rule name = Ask for a beta uplift request  
   | Purpose  = Identify bugs where a patch fixed a bug in nightly and beta is marked as affected.
   | Purpose  = Identify bugs where a patch fixed a bug in nightly and beta is marked as affected.
Line 188: Line 232:
   | Source    = uplift_beta.py
   | Source    = uplift_beta.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Fuzzing bisection without regressed_by  
   | Rule name = Bisection without regressed_by  
   | Purpose  = Identify bugs which contain a bisection made by fuzzing tools and an empty regressed_by, probably people forgot to set the field.
   | Purpose  = Identify bugs which contain a bisection made by mozregression or fuzzing tools and an empty regressed_by, probably people forgot to set the field.
   | Action    = The bug assignee is needinfoed to ask to fill regressed_by when it's possible.
   | Action    = The bug assignee or the regression author is needinfoed to ask to fill regressed_by when it's possible.
   | Example  = 1683535
   | Example  = 1683535
   | Source    = fuzzing_bisection_without_regressed_by.py
   | Source    = bisection_without_regressed_by.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Unassign inactive bugs with the good-first-bug keyword
   | Rule name = Unassign inactive bugs with the good-first-bug keyword
   | Purpose  = Identify inactive good first bugs, to free them up for other contributors.
   | Purpose  = Identify inactive good first bugs, to free them up for other contributors.
Line 202: Line 246:
   | Source    = good_first_bug_unassign_inactive.py
   | Source    = good_first_bug_unassign_inactive.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with needinfo requests on inactive people
   | Rule name = Bugs with needinfo requests on inactive people
   | Purpose  = Identify bugs that have pending needinfo on inactive users.
   | Purpose  = Identify bugs that have pending needinfo on inactive users.
Line 209: Line 253:
   | Source    = inactive_ni_pending.py
   | Source    = inactive_ni_pending.py
}}
}}
 
{{BugBotRule
== Without autofix ==
  | Rule name = Highlight topcrash bugs
 
  | Purpose  = Identify topcrash bugs that are missing topcrash keywords or have low severity
 
  | Action    = Add the missing keywords and needinfo to suggest increasing severity in case of a low severity
{{AutonagRule
  | Source    = topcrash_highlight.py
}}
{{BugBotRule
  | Rule name = Approve tracking request for expiring telemetry
  | Purpose  = Save time and eliminate unnecessary manual work
  | Action    = Automatically approve tracking requests for bugs created by <code>telemetry-probes@mozilla.bugs</code>
  | Source    = telemetry_expiry_tracking_autoapproval.py
}}
{{BugBotRule
   | Rule name = Feature vs regression
   | Rule name = Feature vs regression
   | Purpose  = Fix inconsistency in bugs with both the <code>regression</code> and <code>feature</code> keywords set  
   | Purpose  = Fix inconsistency in bugs with both the <code>regression</code> and <code>feature</code> keywords set  
   | Source    = feature_regression.py
   | Source    = feature_regression.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Inactive bugs with the <code>leave-open</code> keyword set
   | Rule name = Inactive bugs with the <code>leave-open</code> keyword set
   | Purpose  = Help identify dead/inactive bugs
   | Purpose  = Help identify dead/inactive bugs
Line 225: Line 277:
   | Source    = leave_open_no_activity.py  
   | Source    = leave_open_no_activity.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Inactive Meta bugs
   | Rule name = Inactive Meta bugs
   | Purpose  = Help identify dead/inactive bugs
   | Purpose  = Help identify dead/inactive bugs
Line 231: Line 283:
   | Source    = meta_no_deps_no_activity.py  
   | Source    = meta_no_deps_no_activity.py  
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = Low-severity bug but tracked by a release manager
  | Purpose  = Identify mismatch in metadata, a tracked bug should not have a severity lower than ''normal''
  | Source    = mismatch-priority-tracking.py
}}
{{AutonagRule
   | Rule name = Alert for lack of feedback in a bug
   | Rule name = Alert for lack of feedback in a bug
   | Purpose  = Increase reaction time on bugs prioritized by upper management or release managers
   | Purpose  = Increase reaction time on bugs prioritized by upper management or release managers
   | Action    = If a bug as an unanswered NeedInfo request from a release manager or a director, send a warning email
   | Action    = If a bug has an unanswered needinfo request from a release manager or a director, send a warning email
   | Source    = ni_from_manager.py  
   | Source    = ni_from_manager.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with only one or two words in the summary
   | Rule name = Bugs with only one or two words in the summary
   | Purpose  = Make sure the bug is actually useful, a two-words summary often indicates a poor quality bug report
   | Purpose  = Make sure the bug is actually useful, a two-words summary often indicates a poor quality bug report
Line 248: Line 295:
   | Source    = one_two_word_summary.py  
   | Source    = one_two_word_summary.py  
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = Remind developers about tracked bugs
  | Purpose  = Make sure that bugs tracked for the next release are addressed
  | Source    = query_creator.py
}}
{{AutonagRule
   | Rule name = Reporter not answering to Needinfo request
   | Rule name = Reporter not answering to Needinfo request
   | Purpose  = identify bugs stalled because we need more information fron the reporter to reproduce it
   | Purpose  = Identify bugs stalled because we need more information from the reporter to reproduce it
   | Source    = reporter_with_ni.py
   | Source    = reporter_with_ni.py
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = Top crashers with low severity
  | Purpose  = Consistency and help getting traction on top-crash bugs
  | Action    = Needinfo the assignee or the triage owner if not assigned yet
  | Example  = 1471692
  | Source    = topcrash_bad_severity.py
}}
{{AutonagRule
   | Rule name = Identify tracked bugs with a NeedInfo request
   | Rule name = Identify tracked bugs with a NeedInfo request
   | Purpose  = Make sure that bugs tracked for a release or nominated for tracking which also have a NeedInfo request do not get stuck
   | Purpose  = Make sure that bugs tracked for a release or nominated for tracking which also have a NeedInfo request do not get stuck
Line 271: Line 306:
   | Source    = tracked_needinfo.py  
   | Source    = tracked_needinfo.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Tracked bugs untouched for a week
   | Rule name = Tracked bugs untouched for a week
   | Purpose  = Identify important bugs for a release which are not being acted upon  
   | Purpose  = Identify important bugs for a release which are not being acted upon  
Line 277: Line 312:
   | Source    = tracking.py
   | Source    = tracking.py
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = Regressed in upcoming release
  | Purpose  = Identify potential regression
  | Action    = Send an email with the list of bugs marked as non affecting a release but affecting the next one
  | Source    = unaffected_affected_no_reg.py
}}
{{AutonagRule
   | Rule name = Identify unlanded uplifts to Beta and ESR
   | Rule name = Identify unlanded uplifts to Beta and ESR
   | Purpose  =  Make sure that we ship with the bugs that we need
   | Purpose  =  Make sure that we ship with the bugs that we need
Line 290: Line 319:
   | Source    = unlanded.py
   | Source    = unlanded.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with high severity in Firefox::Untriaged
   | Rule name = Bugs with high severity in Firefox::Untriaged
   | Purpose  = Identify potentially important issues left untriaged
   | Purpose  = Identify potentially important issues left untriaged
   | Source    = untriage_important_sev.py
   | Source    = untriage_important_sev.py
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = <code>Version</code> set but not <code>status_firefox</code>
  | Purpose  = The <code>Version</code> value is set automatically by Bugzilla on landing a patch  but not the <code>status_firefoxXX</code>
  | Action    = Send an email
  | Source    = version_affected.py
}}
{{AutonagRule
  | Rule name = Check release dates on the Wiki
  | Purpose  = Verify the consistency of our release dates on wiki.mozilla.org as we use them in automation
  | Action    = Send an email
  | Source    = ../next_release.py
}}
{{AutonagRule
   | Rule name = Information about bugs landed during Soft Code Freeze
   | Rule name = Information about bugs landed during Soft Code Freeze
   | Purpose  = List fixed bug with patches  which landed in mozilla-central during the soft freeze week. The listing includes patch statistics.
   | Purpose  = List fixed bug with patches  which landed in mozilla-central during the soft freeze week. The listing includes patch statistics.
Line 313: Line 330:
   | Source    = code_freeze_week.py
   | Source    = code_freeze_week.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Hightlight Fixed bugs in nightly we may want to uplift
   | Rule name = Hightlight Fixed bugs in nightly we may want to uplift
   | Purpose  = Identify potentially upliftable  bugs.  
   | Purpose  = Identify potentially upliftable  bugs.  
Line 319: Line 336:
   | Source    = missed_uplifts.py
   | Source    = missed_uplifts.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = New user with a Needinfo request
   | Rule name = New user with a Needinfo request
   | Purpose  = Help identify potentially unactionnable bugs per lack of information
   | Purpose  = Help identify potentially unactionable bugs per lack of information
   | Action    = Send an email
   | Action    = Send an email
   | Source    = newbie_with_ni.py
   | Source    = newbie_with_ni.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Assignee is inactive
   | Rule name = Assignee is inactive
   | Purpose  = Help identify bugs that are assigned to inactive accounts
   | Purpose  = Help identify bugs that are assigned to inactive accounts
Line 331: Line 348:
   | Source    = assignee_no_login.py
   | Source    = assignee_no_login.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with inconsistent severity flags
   | Rule name = Bugs with inconsistent severity flags
   | Purpose  = Make sure that bugs severity is consistent with the [[Accessibility/Triage#Triaging_Firefox_and_Gecko_feature_defects|accessibility severity]] on the Whiteboard
   | Purpose  = Make sure that bugs severity is consistent with the [[Accessibility/Triage#Triaging_Firefox_and_Gecko_feature_defects|accessibility severity]] on the Whiteboard
Line 337: Line 354:
   | Source    = severity_inconsistency.py
   | Source    = severity_inconsistency.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Regression bugs where regressor author is not involved
   | Rule name = Regression bugs where the regressor author is not involved
   | Purpose  = Highlight regressions to people who caused them
   | Purpose  = Highlight regressions to people who caused them
   | Action    = Needinfo the assignee of the bug that caused the regression
   | Action    = Needinfo the assignee of the bug that caused the regression
   | Source    = needinfo_regression_author.py
   | Source    = needinfo_regression_author.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with high security keywords which are set to low severity
   | Rule name = Bugs with high security keywords which are set to low severity
   | Purpose  = Identify bugs whose severity field is set to S3 or S4 and at the same time have sec-high or sec-critical keywords
   | Purpose  = Identify bugs whose severity field is set to S3 or S4 and at the same time have sec-high or sec-critical keywords
Line 349: Line 366:
   | Source    = severity_high_security.py
   | Source    = severity_high_security.py
}}
}}
{{AutonagRule
{{BugBotRule
  | Rule name = Low severity bugs with tracking status
  | Purpose  = Suggest increasing the severity for bugs that are marked as blocking or are tracked for nightly, beta, or release
  | Action    = Needinfo the assignee or the triage owner if not assigned yet
  | Source    = severity_tracked.py
}}
{{AutonagRule
   | Rule name = Bugs with P1 WebCompat priority and severity set to low
   | Rule name = Bugs with P1 WebCompat priority and severity set to low
   | Purpose  = Consistency and getting traction on important web compatibility bugs
   | Purpose  = Consistency and getting traction on important web compatibility bugs
Line 361: Line 372:
   | Source    = severity_high_compat_priority.py  
   | Source    = severity_high_compat_priority.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Automatically confirm bugs that have an affected Firefox version flag
   | Rule name = Automatically confirm bugs that have an affected Firefox version flag
   | Purpose  = Fix inconsistency in the status of unconfirmed bugs
   | Purpose  = Fix inconsistency in the status of unconfirmed bugs
Line 367: Line 378:
   | Source    = affected_flag_confirm.py  
   | Source    = affected_flag_confirm.py  
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Automatically confirm bugs that have a crash signature
   | Rule name = Automatically confirm bugs that have a crash signature
   | Purpose  = Fix inconsistency in the status of unconfirmed bugs
   | Purpose  = Fix inconsistency in the status of unconfirmed bugs
Line 373: Line 384:
   | Source    = crash_signature_confirm.py
   | Source    = crash_signature_confirm.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with patches after being closed
   | Rule name = Bugs with patches after being closed
   | Purpose  = Identify bugs that receive patches after being closed
   | Purpose  = Identify bugs that receive patches after being closed
Line 379: Line 390:
   | Source    = patch_closed_bug.py
   | Source    = patch_closed_bug.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Bugs with underestimated severity levels
   | Rule name = Bugs with underestimated severity levels
   | Purpose  = Identify bugs whose severity could be underestimated
   | Purpose  = Identify bugs whose severity could be underestimated
Line 385: Line 396:
   | Source    = severity_underestimated.py
   | Source    = severity_underestimated.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Components with triage owner need to be assigned
   | Rule name = Components with triage owner need to be assigned
   | Purpose  = Identify components whose triage owners are unassigned, disabled, or inactive
   | Purpose  = Identify components whose triage owners are unassigned, disabled, or inactive
Line 391: Line 402:
   | Source    = vacant_triage_owner.py
   | Source    = vacant_triage_owner.py
}}
}}
{{AutonagRule
{{BugBotRule
   | Rule name = Tracked bugs that need attention
   | Rule name = Tracked bugs that need attention
   | Purpose  = Notify about tracked bugs with no assignee, low severity, or low priority
   | Purpose  = Notify about tracked bugs with no assignee, low severity, or low priority
Line 397: Line 408:
   | Source    = tracked_attention.py  
   | Source    = tracked_attention.py  
}}
}}
[[category:Release_Management|Autonag]]
{{BugBotRule
  | Rule name = Bugs with inactive patch reviewers
  | Purpose  = Unblock bugs by identifying patches that are waiting for review from or unavailable reviewers
  | Action    = Needinfo patch authors to find active reviewers
  | Source    = inactive_reviewer.py
}}
{{BugBotRule
  | Rule name = Fuzz blocker bugs
  | Purpose  = Bring attention to bugs that prevent fuzzing from making progress
  | Action    = Send weekly reminder emails and suggest increasing the severity when it is low.
  | Source    = fuzz_blockers.py
}}
{{BugBotRule
  | Rule name = Severity of performance impacting bugs
  | Purpose  = Consistency and help getting traction on bugs with a high impact on performance
  | Action    = Needinfo the assignee or the triage owner (if not assigned) to increase the severity
  | Source    = severity_high_performance_impact.py
}}
{{BugBotRule
  | Rule name = Bugs with a high number of recent regressions
  | Purpose  = Highlight bugs that introduce a high number of regressions
  | Action    = Notify release managers
  | Source    = warn_regressed_by.py
}}
{{BugBotRule
  | Rule name = Bugs with whiteboard reminders
  | Purpose  = Remind about future tasks
  | Action    = Post a reminder on the bug and remove the reminder whiteboard tag
  | Source    = reminder.py
}}
{{BugBotRule
  | Rule name = Bugs to triage
  | Purpose  = Highlight defect bugs that need to be triaged
  | Action    = Notify the triage owner
  | Source    = to_triage.py
}}
{{BugBotRule
  | Rule name = Bugs moved to Core::Performance
  | Purpose  = Make sure the bug has the basic information needed for performance bugs.
  | Action    = Add a needinfo request when a bug is moved to Core::Performance to ask for missed information.
  | Source    = moved_to_performance.py
}}
{{BugBotRule
  | Rule name = Uh-hide duplicate security bugs
  | Purpose  = Publish security bugs that are already fixed and safe to be public.
  | Action    = Send emails to people in the security team to highlight security bugs which are duplicates of already-public bugs.
  | Source    = security_unhide_dups.py
}}
 
 
 
= Removed Rules =
{{BugBotRule
  | Rule name = Fuzzing bisection without regressed_by
  | Purpose  = Identify bugs which contain a bisection made by fuzzing tools and an empty regressed_by, probably people forgot to set the field.
  | Action    = The bug assignee is needinfoed to ask to fill regressed_by when it's possible.
  | Example  = 1683535
  | Source    = fuzzing_bisection_without_regressed_by.py
  | Removed  = yes
  | Note      = Replaced with [[BugBot#bisection_without_regressed_by.py|Bisection without regressed_by]]
}}
{{BugBotRule
  | Rule name = Bugs with top-crash signatures
  | Purpose  = Identify bugs that are missing topcrash or topcrash-startup keywords
  | Action    = Add the missing keyword and needinfo to suggest increasing severity in case of a low severity
  | Source    = topcrash_add_keyword.py
  | Removed  = yes
  | Note      = Replaced with [[BugBot#topcrash_highlight.py|Highlight topcrash bugs]]
}}
{{BugBotRule
  | Rule name = Top crashers with low severity
  | Purpose  = Consistency and help getting traction on top-crash bugs
  | Action    = Needinfo the assignee or the triage owner if not assigned yet
  | Example  = 1471692
  | Source    = topcrash_bad_severity.py
  | Removed  = yes
  | Note      = Replaced with [[BugBot#topcrash_highlight.py|Highlight topcrash bugs]]
}}
{{BugBotRule
  | Rule name = Low severity bugs with tracking status
  | Purpose  = Suggest increasing the severity for bugs that are marked as blocking or are tracked for nightly, beta, or release
  | Action    = Needinfo the assignee or the triage owner if not assigned yet
  | Source    = severity_tracked.py
  | Removed  = yes
  | Note      = Dropped in favor of [[BugBot#tracked_attention.py|Tracked bugs that need attention]]
}}
{{BugBotRule
  | Rule name = Increase severity of bugs tracked by Release Managers
  | Purpose  = Fix inconsistency in metadata
  | Action    = If a bug is tracked for an upcoming release but it's severity field is low, the severity is increased
  | Example  = 1538966
  | Source    = tracked_bad_severity.py
  | Removed  = yes
  | Note      = Dropped in favor of [[BugBot#tracked_attention.py|Tracked bugs that need attention]]
}}
{{BugBotRule
  | Rule name = Bugs with STR and no regression range
  | Purpose  = Compleat missing metadata
  | Action    = Needinfo the bug creator to find the regression range
  | Source    = has_str_no_range.py
  | Removed  = yes
  | Note      = Removed on 2024-02-13
}}
 
__TOC__

Latest revision as of 19:00, 13 February 2024


This page lists all the actions done by BugBot.

Introduction

Every day hundreds of tickets are opened in Bugzilla which track the tasks, defects and enhancements needed for the development of Firefox and other Mozilla projects. Triaging and prioritizing these bugs are an essential part of our development process and we automate part of this process so as to increase our development turn around and improve the quality of our bugs metadata. The set of tools we use to improve the quality of our bugs, decrease our triaging time and help Release Management ship better quality software is called BugBot (formerly known as Autonag).

Initially created as an alerting system (by email) to our triagers, BugBot rules now also make changes to our bugs metadata on Bugzilla so as to fix inconsistencies.

If you want the bot to not make changes to a specific bug, add [no-nag] to its whiteboard field.

Active Rules

Rule 163: Variant Expiration

Purpose Follow up on variants that need to be dropped or extended
Action Create a bug before the variant becomes expired and follow up to extend or drop it
Code variant_expiration.py


Detect spam bugs

Purpose Automatically detect and handle spam bugs
Action Close the bug as "INVALID" and move it to the "Invalid Bugs" product
Code spambug.py


File bugs for new actionable crashes

Purpose Automate discovering actionable crash reports to speed up fixes, reduce user impact, and save engineering time.
Action Open a crash bug with the relevant information
Code file_crash_bug.py


Wrong bug type

Purpose Correct the bug type
Action Check if the bug type is the same as predicted by bugbug, if it is different and the bot is confident, correct the type
Code defectenhancementtask.py


Enhancement or task with the "regression", "crash" or "assertion" keyword

Purpose Correct the bug type
Action Change the bug type to "defect"
Code regression_but_type_enhancement_task.py


Closed bugs with dupeme keyword

Purpose Clean up the metadata
Action Remove the dupeme keyword
Code closed_dupeme.py


Bugs with dupeme in the whiteboard instead of keyword

Purpose Clean up the metadata
Action Replace the '[dupeme]' whiteboard tag with the 'dupeme' keyword
Code dupeme_whiteboard_keyword.py


Bugs with no 'Has STR' and STR in the first comment

Purpose Compleat missing metadata
Action Set the 'Has STR' field to be 'yes'
Code has_str_no_hasstr.py


Copy metadata from duplicates

Purpose Increase the visibility of important information after closing a bug as a duplicate
Action Copy missed metadata from duplicate bugs
Code duplicate_copy_metadata.py


Bugs with small crash volume

Purpose Identify topcrash or high severity bugs that started getting small crash volume
Action Remove the topcrash keywords and decrease the bug severity if the crash volume is very low
Code crash_small_volume.py


Bugs with higher severity duplicates

Purpose Highlight inconsistency in the severity between a bug and its duplicates
Action Needinfo the assignee and fallback to the triage owner if a duplicate bug has a higher severity value
Code severity_higher_dups.py


Regression on nightly

Purpose Increase the visibility of regression bugs
Action Set nightly status flag to affected on newly filed regression bugs
Code regression_new_set_nightly_affected.py


Remove leave-open keyword on closed bug

Purpose Clean up a mismatch in metadata
Action If a bug is closed but the leave-open keyword is still set, remove it
Example Bug 1382185
Code leave_open.py


[meta] in title but not in keywords

Purpose Improve metedata quality
Action Adds the meta keyword if the bug title starts by [META]
Example Bug 1435799
Code meta_summary_missing.py


Update Firefox Status flags for bugs reopened during Nightly cycle

Purpose Avoids potential issues for sheriffs and release managers
Action Set firefox-status flag back from fixed to affected
Example Bug 1495962
Code nightly_reopened.py


Bug with no assignee but a patch landed

Purpose Attribute unassigned bug to the developer that fixed it
Action The ASSIGNEE field on the bug is changed from nobody@mozilla.org to the author of the patch that landed in mozilla-central
Example Bug 1514338
Code no_assignee.py


Close crash bugs with no crashes over 12 weeks

Purpose Reduce the backlog of bugs to check for Release Managers
Action Crash bugs without any crash reports for more than 12 weeks
Example Bug 1470864
Code no_crashes.py


Remove stalled keyword on closed bugs

Purpose Fix inconsistency between metadata and bug status
Action If a bug is marked as FIXED and also has a stalled keyword set, the keyword is removed
Example Bug 1491624
Code stalled.py


Has meta keyword but not [meta] in the bug title

Purpose Having [meta] in the bug title helps with quick search results
Action If a bug has the meta keyword set, [meta] is added to the bug title
Example Bug 1257692
Code summary_meta_missing.py


Set a Firefox status flag for beta if there is one for nightly and release

Purpose Fix inconsistency in Firefox status flags that can lead to a bug going undetected by Release Managers during the beta cycle
Action If a status exists for Firefox N-1 and for Firefox N+1, guess a value for Firefox N
Example Bug 1500273
Code missing_beta_status.py


Add regression keywords to bugs (uses Machine Learning)

Purpose Surface regressions not filed as such
Action If a bug is tracked by a Release Manager, update the priority (P2 for nightly, P1 for the rest)
Example Bug 1529139
Code regression.py


Move untriaged bug into the correct component (uses machine learning)

Purpose Decrease manual triage time
Action Uses machine learning to mass move bugs in Firefox::Untriaged into a better component
Example Bug 1530316
Code component.py


Copy crash signature from duplicate bugs to main bugs

Purpose Crash bugs marked as duplicate of another one may have a different crash signature. We need to consolidate all signatures in the bug where a patch to fix them is being worked on, other wise we may not fix them all
Action If a crash bug is marked as a duplicate, the signatures it referenced are added to the new bug
Example Bug 1517205
Code copy_duplicate_info.py


Update release status flags based on info from the regressing bug

Purpose Automate setting the release status flags
Action Set release status flags to "affected" or "unaffected" based on the status flags in the regressing bug
Code regression_set_status_flags.py


Nag triage owner to set severity on bugs

Purpose Every defect should have a severity set. Also bugs with no severity set are harder to prioritize for Release Managers with regards to the release (see what-do-you-triage)
Action The triage owner is needinfoed in Bugzilla or nagged via email to set a severity on bugs
Example Bug 1527818
Code workflow/no_severity.py


Nag triage owner on P1 bugs with no activity

Purpose Since P1 means that the bug should be fixed for the next release (see what-do-you-triage), the bug needs to show any progress in its resolution (or maybe the priority should be decreased)
Action The triage owner is nagged via email to have a reminder
Example Bug 1507251
Code workflow/p1_no_activity.py


Nag triage owner to find an assignee for P1 bugs with no assignee and no activity

Purpose Since P1 means that the bug should be fixed for the next release (see what-do-you-triage), the bug urgently needs to have an assignee (or the priority should be decreased)
Action The triage owner is needinfoed in Bugzilla or nagged via email to find an assignee on bugs
Example Bug 1541291
Code workflow/p1_no_assignee.py


Change the priority from P2 to P1 on assigned bug the merge day

Purpose Since P2 means that the bug should be fixed for the next release (see what-do-you-triage), when we are the merge day then this bug automatically becomes a P1.
Action Update the priority to P1 and add a comment to explain.
Code workflow/p2_merge_day.py


Patch not landed

Purpose Identify bugs with an unlanded r+ patch. Maybe the patch is now obsolete or the bug needs to have a sheriff land the code with the checkin-needed keyword set.
Action The bug assignee is needinfoed in Bugzilla to ask her/him to have a look
Example Bug 1496844
Code not_landed.py


Regression without regressed_by and some bug dependencies

Purpose Identify regressions which have dependencies (blocks or depends_on) and an empty regressed_by, probably people forgot to use the new field.
Action The bug assignee or the person who added some dependencies or the reporter is needinfoed to ask to fill regressed_by when it's possible.
Example Bug 1545797
Code regression_without_regressed_by.py


Product::Component changed after the priority has been set

Purpose Identify bugs where Product::Component changed after the priority has been set. The priority is probably no more up-to-date and so triage owner needs to set it.
Action Reset the priority to "--" with a comment explaining why the bot is doing that.
Example Bug 1546366
Code prod_comp_changed_with_priority.py


Close intermittent test failure bugs

Purpose Close intermittent test failure bugs which are P5s, not marked leave-open, and have not had a new failure in 21 days.
Action RESOLVE bug as INCOMPLETE with a comment explaining why the bot is doing this.
Example Bug 1577895
Code close_intermittents.py


Ask for a beta uplift request

Purpose Identify bugs where a patch fixed a bug in nightly and beta is marked as affected.
Action Needinfo the assignee to ask it's worth making an uplift request.
Example Bug 1620434
Code uplift_beta.py


Bisection without regressed_by

Purpose Identify bugs which contain a bisection made by mozregression or fuzzing tools and an empty regressed_by, probably people forgot to set the field.
Action The bug assignee or the regression author is needinfoed to ask to fill regressed_by when it's possible.
Example Bug 1683535
Code bisection_without_regressed_by.py


Unassign inactive bugs with the good-first-bug keyword

Purpose Identify inactive good first bugs, to free them up for other contributors.
Action Reset the assignee and status fields and post a comment.
Code good_first_bug_unassign_inactive.py


Bugs with needinfo requests on inactive people

Purpose Identify bugs that have pending needinfo on inactive users.
Action Depending on the bug, redirect the needinfo to the triage owner, cancel the needinfo, or close the bug.
Code inactive_ni_pending.py


Highlight topcrash bugs

Purpose Identify topcrash bugs that are missing topcrash keywords or have low severity
Action Add the missing keywords and needinfo to suggest increasing severity in case of a low severity
Code topcrash_highlight.py


Approve tracking request for expiring telemetry

Purpose Save time and eliminate unnecessary manual work
Action Automatically approve tracking requests for bugs created by telemetry-probes@mozilla.bugs
Code telemetry_expiry_tracking_autoapproval.py


Feature vs regression

Purpose Fix inconsistency in bugs with both the regression and feature keywords set
Action No action yet
Code feature_regression.py


Inactive bugs with the leave-open keyword set

Purpose Help identify dead/inactive bugs
Action Needinfo the triage owner if a bug is inactive but has the leave-open keyword set
Example Bug 1367072
Code leave_open_no_activity.py


Inactive Meta bugs

Purpose Help identify dead/inactive bugs
Action Needinfo the triage owner if a meta bug has no activity and no dependencies set
Code meta_no_deps_no_activity.py


Alert for lack of feedback in a bug

Purpose Increase reaction time on bugs prioritized by upper management or release managers
Action If a bug has an unanswered needinfo request from a release manager or a director, send a warning email
Code ni_from_manager.py


Bugs with only one or two words in the summary

Purpose Make sure the bug is actually useful, a two-words summary often indicates a poor quality bug report
Action No action yet
Example Bug 1512823
Code one_two_word_summary.py


Reporter not answering to Needinfo request

Purpose Identify bugs stalled because we need more information from the reporter to reproduce it
Action No action yet
Code reporter_with_ni.py


Identify tracked bugs with a NeedInfo request

Purpose Make sure that bugs tracked for a release or nominated for tracking which also have a NeedInfo request do not get stuck
Action Send an email
Code tracked_needinfo.py


Tracked bugs untouched for a week

Purpose Identify important bugs for a release which are not being acted upon
Action Send an email
Code tracking.py


Identify unlanded uplifts to Beta and ESR

Purpose Make sure that we ship with the bugs that we need
Action Send an email wih the list of bugs with uplift requests not landed on the affected branch
Example Bug 1509394
Code unlanded.py


Bugs with high severity in Firefox::Untriaged

Purpose Identify potentially important issues left untriaged
Action No action yet
Code untriage_important_sev.py


Information about bugs landed during Soft Code Freeze

Purpose List fixed bug with patches which landed in mozilla-central during the soft freeze week. The listing includes patch statistics.
Action Send an email
Code code_freeze_week.py


Hightlight Fixed bugs in nightly we may want to uplift

Purpose Identify potentially upliftable bugs.
Action Send an email with the recent fixes, the affected branches and metadata for prioritization
Code missed_uplifts.py


New user with a Needinfo request

Purpose Help identify potentially unactionable bugs per lack of information
Action Send an email
Code newbie_with_ni.py


Assignee is inactive

Purpose Help identify bugs that are assigned to inactive accounts
Action Reset the assignee, and if the bug has high priority or high severity, needinfo the triage owner
Code assignee_no_login.py


Bugs with inconsistent severity flags

Purpose Make sure that bugs severity is consistent with the accessibility severity on the Whiteboard
Action Needinfo the assignee or the triage owner if not assigned yet
Code severity_inconsistency.py


Regression bugs where the regressor author is not involved

Purpose Highlight regressions to people who caused them
Action Needinfo the assignee of the bug that caused the regression
Code needinfo_regression_author.py


Bugs with high security keywords which are set to low severity

Purpose Identify bugs whose severity field is set to S3 or S4 and at the same time have sec-high or sec-critical keywords
Action Needinfo to propose increasing the severity
Code severity_high_security.py


Bugs with P1 WebCompat priority and severity set to low

Purpose Consistency and getting traction on important web compatibility bugs
Action Needinfo the assignee or the triage owner if not assigned yet
Code severity_high_compat_priority.py


Automatically confirm bugs that have an affected Firefox version flag

Purpose Fix inconsistency in the status of unconfirmed bugs
Action Confirm bugs with affected Firefox version flags by changing the status to "NEW"
Code affected_flag_confirm.py


Automatically confirm bugs that have a crash signature

Purpose Fix inconsistency in the status of unconfirmed bugs
Action Confirm bugs with crash signatures by changing the status to "NEW"
Code crash_signature_confirm.py


Bugs with patches after being closed

Purpose Identify bugs that receive patches after being closed
Action Comment on the bug and email release managers
Code patch_closed_bug.py


Bugs with underestimated severity levels

Purpose Identify bugs whose severity could be underestimated
Action Needinfo the assignee or the triage owner if not assigned yet
Code severity_underestimated.py


Components with triage owner need to be assigned

Purpose Identify components whose triage owners are unassigned, disabled, or inactive
Action Nag managers to assign triage owners
Code vacant_triage_owner.py


Tracked bugs that need attention

Purpose Notify about tracked bugs with no assignee, low severity, or low priority
Action Needinfo the team manager and fallback on the triage owner if we have no team manager defined in our config
Code tracked_attention.py


Bugs with inactive patch reviewers

Purpose Unblock bugs by identifying patches that are waiting for review from or unavailable reviewers
Action Needinfo patch authors to find active reviewers
Code inactive_reviewer.py


Fuzz blocker bugs

Purpose Bring attention to bugs that prevent fuzzing from making progress
Action Send weekly reminder emails and suggest increasing the severity when it is low.
Code fuzz_blockers.py


Severity of performance impacting bugs

Purpose Consistency and help getting traction on bugs with a high impact on performance
Action Needinfo the assignee or the triage owner (if not assigned) to increase the severity
Code severity_high_performance_impact.py


Bugs with a high number of recent regressions

Purpose Highlight bugs that introduce a high number of regressions
Action Notify release managers
Code warn_regressed_by.py


Bugs with whiteboard reminders

Purpose Remind about future tasks
Action Post a reminder on the bug and remove the reminder whiteboard tag
Code reminder.py


Bugs to triage

Purpose Highlight defect bugs that need to be triaged
Action Notify the triage owner
Code to_triage.py


Bugs moved to Core::Performance

Purpose Make sure the bug has the basic information needed for performance bugs.
Action Add a needinfo request when a bug is moved to Core::Performance to ask for missed information.
Code moved_to_performance.py


Uh-hide duplicate security bugs

Purpose Publish security bugs that are already fixed and safe to be public.
Action Send emails to people in the security team to highlight security bugs which are duplicates of already-public bugs.
Code security_unhide_dups.py



Removed Rules

Fuzzing bisection without regressed_by

Purpose Identify bugs which contain a bisection made by fuzzing tools and an empty regressed_by, probably people forgot to set the field.
Action The bug assignee is needinfoed to ask to fill regressed_by when it's possible.
Example Bug 1683535
Note Replaced with Bisection without regressed_by


Bugs with top-crash signatures

Purpose Identify bugs that are missing topcrash or topcrash-startup keywords
Action Add the missing keyword and needinfo to suggest increasing severity in case of a low severity
Note Replaced with Highlight topcrash bugs


Top crashers with low severity

Purpose Consistency and help getting traction on top-crash bugs
Action Needinfo the assignee or the triage owner if not assigned yet
Example Bug 1471692
Note Replaced with Highlight topcrash bugs


Low severity bugs with tracking status

Purpose Suggest increasing the severity for bugs that are marked as blocking or are tracked for nightly, beta, or release
Action Needinfo the assignee or the triage owner if not assigned yet
Note Dropped in favor of Tracked bugs that need attention


Increase severity of bugs tracked by Release Managers

Purpose Fix inconsistency in metadata
Action If a bug is tracked for an upcoming release but it's severity field is low, the severity is increased
Example Bug 1538966
Note Dropped in favor of Tracked bugs that need attention


Bugs with STR and no regression range

Purpose Compleat missing metadata
Action Needinfo the bug creator to find the regression range
Note Removed on 2024-02-13