doc/en_US.ISO8859-1/articles/pr-guidelines/article.xml
2015-03-13 06:28:33 +00:00

871 lines
26 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
<!-- :START of Article Metadata -->
<info><title>Problem Report Handling Guidelines</title>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>These guidelines describe recommended handling practices
for FreeBSD Problem Reports (PRs). Whilst developed for the
FreeBSD PR Database Maintenance Team
<email>freebsd-bugbusters@FreeBSD.org</email>, these
guidelines should be followed by anyone working with FreeBSD
PRs.</para>
</abstract>
<authorgroup>
<author><personname><firstname>Dag-Erling</firstname><surname>Sm&oslash;rgrav</surname></personname></author>
<author><personname><firstname>Hiten</firstname><surname>Pandya</surname></personname></author>
</authorgroup>
</info>
<!-- :END of Article Metadata-->
<section xml:id="intro">
<title>Introduction</title>
<para>Bugzilla is an issue management system used by
the &os; Project. As accurate tracking of outstanding
software defects is important to FreeBSD's quality, the
correct use of the software is essential to the forward
progress of the Project.</para>
<para>Access to Bugzilla is available to the entire &os;
community. In order to maintain consistency within
the database and provide a consistent user experience, guidelines
have been established covering common aspects of bug management
such as presenting followup, handling close requests, and so
forth.</para>
</section>
<section xml:id="pr-lifecycle">
<title>Problem Report Life-cycle</title>
<itemizedlist>
<listitem>
<para>The Reporter submits a bug report on the website. The
bug is in the <literal>Needs Triage</literal> state.</para>
</listitem>
<listitem>
<para>Jane Random BugBuster confirms that the bug report has
sufficient information to be reproducible. If not, she goes
back and forth with the reporter to obtain the needed
information. At this point the bug is set to the
<literal>Open</literal> state.</para>
</listitem>
<listitem>
<para>Joe Random Committer takes interest in the PR and
assigns it to himself, or Jane Random BugBuster decides that
Joe is best suited to handle it and assigns it to
him. The bug should be set to the <literal>In
Discussion</literal> state.</para>
</listitem>
<listitem>
<para>Joe has a brief exchange with the originator (making
sure it all goes into the audit trail) and determines the
cause of the problem.</para>
</listitem>
<listitem>
<para>Joe pulls an all-nighter and whips up a patch that he
thinks fixes the problem, and submits it in a follow-up,
asking the originator to test it. He then sets the PRs
state to <literal>Patch Ready</literal>.</para>
</listitem>
<listitem>
<para>A couple of iterations later, both Joe and the
originator are satisfied with the patch, and Joe commits it
to <literal>-CURRENT</literal> (or directly to
<literal>-STABLE</literal> if the problem does not exist in
<literal>-CURRENT</literal>), making sure to reference the
Problem Report in his commit log (and credit the originator
if they submitted all or part of the patch) and, if
appropriate, start an MFC countdown. The bug is set to the
<literal>Needs MFC</literal> state.</para>
</listitem>
<listitem>
<para>If the patch does not need MFCing, Joe then closes the
PR as <literal>Issue Resolved</literal>.</para>
</listitem>
</itemizedlist>
<note>
<para>Many PRs are submitted with very little information about
the problem, and some are either very complex to solve, or
just scratch the surface of a larger problem; in these cases, it
is very important to obtain all the necessary information
needed to solve the problem. If the problem contained within
cannot be solved, or has occurred again, it is necessary to
re-open the PR.</para>
</note>
</section>
<section xml:id="pr-states">
<title>Problem Report State</title>
<para>It is important to update the state of a PR when certain
actions are taken. The state should accurately reflect the
current state of work on the PR.</para>
<example>
<title>A small example on when to change PR state</title>
<para>When a PR has been worked on and the developer(s)
responsible feel comfortable about the fix, they will submit a
followup to the PR and change its state to
<quote>feedback</quote>. At this point, the originator should
evaluate the fix in their context and respond indicating
whether the defect has indeed been remedied.</para>
</example>
<para>A Problem Report may be in one of the following
states:</para>
<glosslist>
<glossentry>
<glossterm>open</glossterm>
<glossdef>
<para>Initial state; the problem has been pointed out and it
needs reviewing.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>analyzed</glossterm>
<glossdef>
<para>The problem has been reviewed and a
solution is being sought.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>feedback</glossterm>
<glossdef>
<para>Further work requires additional information from the
originator or the community; possibly information
regarding the proposed solution.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>patched</glossterm>
<glossdef>
<para>A patch has been committed, but something (MFC, or
maybe confirmation from originator) is still pending.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>suspended</glossterm>
<glossdef>
<para>The problem is not being worked on, due to lack of
information or resources. This is a prime candidate for
somebody who is looking for a project to take on. If the
problem cannot be solved at all, it will be closed, rather
than suspended. The documentation project uses
<quote>suspended</quote> for <quote>wish-list</quote>
items that entail a significant amount of work which no one
currently has time for.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>closed</glossterm>
<glossdef>
<para>A problem report is closed when any changes have been
integrated, documented, and tested, or when fixing the
problem is abandoned.</para>
</glossdef>
</glossentry>
</glosslist>
<note>
<para>The <quote>patched</quote> state is directly related to
feedback, so you may go directly to <quote>closed</quote> state if
the originator cannot test the patch, and it works in your own testing.</para>
</note>
</section>
<section xml:id="pr-types">
<title>Types of Problem Reports</title>
<para>While handling problem reports, either as a developer who has
direct access to the Problem Reports database or as a contributor who
browses the database and submits followups with patches, comments,
suggestions or change requests, you will come across several
different types of PRs.</para>
<itemizedlist>
<listitem>
<para><link linkend="pr-unassigned">PRs not yet assigned to anyone.</link></para>
</listitem>
<listitem>
<para><link linkend="pr-assigned">PRs already assigned to someone.</link></para>
</listitem>
<listitem>
<para><link linkend="pr-dups">Duplicates of existing PRs.</link></para>
</listitem>
<listitem>
<para><link linkend="pr-stale">Stale PRs</link></para>
</listitem>
<listitem>
<para><link linkend="pr-misfiled-notpr">Non-Bug PRs</link></para>
</listitem>
</itemizedlist>
<para>The following sections describe what each different type of
PRs is used for, when a PR belongs to one of these types, and what
treatment each different type receives.</para>
<section xml:id="pr-unassigned">
<title>Unassigned PRs</title>
<para>When PRs arrive, they are initially assigned to a generic
(placeholder) assignee. These are always prepended with
<literal>freebsd-</literal>. The exact value for this default
depends on the category; in most cases, it corresponds to a
specific &os; mailing list. Here is the current list, with
the most common ones listed first:</para>
<table xml:id="default-assignees-common">
<title>Default Assignees &mdash; most common</title>
<tgroup cols="3">
<thead>
<row>
<entry>Type</entry>
<entry>Categories</entry>
<entry>Default Assignee</entry>
</row>
</thead>
<tbody>
<row>
<entry>base system</entry>
<entry>bin, conf, gnu, kern, misc</entry>
<entry>freebsd-bugs</entry>
</row>
<row>
<entry>architecture-specific</entry>
<entry>alpha, amd64, arm, i386, ia64, powerpc, sparc64</entry>
<entry>freebsd-<replaceable>arch</replaceable></entry>
</row>
<row>
<entry>ports collection</entry>
<entry>ports</entry>
<entry>freebsd-ports-bugs</entry>
</row>
<row>
<entry>documentation shipped with the system</entry>
<entry>docs</entry>
<entry>freebsd-doc</entry>
</row>
<row>
<entry>&os; web pages (not including docs)</entry>
<entry>Website</entry>
<entry>freebsd-www</entry>
</row>
</tbody>
</tgroup>
</table>
<table xml:id="default-assignees-other">
<title>Default Assignees &mdash; other</title>
<tgroup cols="3">
<thead>
<row>
<entry>Type</entry>
<entry>Categories</entry>
<entry>Default Assignee</entry>
</row>
</thead>
<tbody>
<row>
<entry>advocacy efforts</entry>
<entry>advocacy</entry>
<entry>freebsd-advocacy</entry>
</row>
<row>
<entry>&java.virtual.machine; problems</entry>
<entry>java</entry>
<entry>freebsd-java</entry>
</row>
<row>
<entry>standards compliance</entry>
<entry>standards</entry>
<entry>freebsd-standards</entry>
</row>
<row>
<entry>threading libraries</entry>
<entry>threads</entry>
<entry>freebsd-threads</entry>
</row>
<row>
<entry>&man.usb.4; subsystem</entry>
<entry>usb</entry>
<entry>freebsd-usb</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Do not be surprised to find that the submitter of the
PR has assigned it to the wrong category. If you fix the
category, do not forget to fix the assignment as well.
(In particular, our submitters seem to have a hard time
understanding that just because their problem manifested
on an i386 system, that it might be generic to all of &os;,
and thus be more appropriate for <literal>kern</literal>.
The converse is also true, of course.)</para>
<para>Certain PRs may be reassigned away from these generic
assignees by anyone. There are several types of assignees:
specialized mailing lists; mail aliases (used for certain
limited-interest items); and individuals.</para>
<para>For assignees which are mailing lists,
please use the long form when making the assignment (e.g.,
<literal>freebsd-foo</literal> instead of <literal>foo</literal>);
this will avoid duplicate emails sent to the mailing list.</para>
<note>
<para>Since the list of individuals who have volunteered to
be the default assignee for certain types of PRs changes
so often, it is much more suitable for <link xlink:href="http://wiki.freebsd.org/AssigningPRs">the FreeBSD wiki</link>.
</para>
</note>
<para>Here is a sample list of such entities; it is probably
not complete.</para>
<table xml:id="common-assignees-base">
<title>Common Assignees &mdash; base system</title>
<tgroup cols="4">
<thead>
<row>
<entry>Type</entry>
<entry>Suggested Category</entry>
<entry>Suggested Assignee</entry>
<entry>Assignee Type</entry>
</row>
</thead>
<tbody>
<row>
<entry>problem specific to the &arm; architecture</entry>
<entry>arm</entry>
<entry>freebsd-arm</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem specific to the &mips; architecture</entry>
<entry>kern</entry>
<entry>freebsd-mips</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem specific to the &powerpc; architecture</entry>
<entry>kern</entry>
<entry>freebsd-ppc</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with Advanced Configuration and Power
Management (&man.acpi.4;)</entry>
<entry>kern</entry>
<entry>freebsd-acpi</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with Asynchronous Transfer Mode (ATM)
drivers</entry>
<entry>kern</entry>
<entry>freebsd-atm</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with embedded or small-footprint &os;
systems (e.g., NanoBSD/PicoBSD/FreeBSD-arm)</entry>
<entry>kern</entry>
<entry>freebsd-embedded</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with &firewire; drivers</entry>
<entry>kern</entry>
<entry>freebsd-firewire</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the filesystem code</entry>
<entry>kern</entry>
<entry>freebsd-fs</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the &man.geom.4; subsystem</entry>
<entry>kern</entry>
<entry>freebsd-geom</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the &man.ipfw.4; subsystem</entry>
<entry>kern</entry>
<entry>freebsd-ipfw</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with Integrated Services Digital Network
(ISDN) drivers</entry>
<entry>kern</entry>
<entry>freebsd-isdn</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>&man.jail.8; subsystem</entry>
<entry>kern</entry>
<entry>freebsd-jail</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with &linux; or SVR4 emulation</entry>
<entry>kern</entry>
<entry>freebsd-emulation</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the networking stack</entry>
<entry>kern</entry>
<entry>freebsd-net</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the &man.pf.4; subsystem</entry>
<entry>kern</entry>
<entry>freebsd-pf</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the &man.scsi.4; subsystem</entry>
<entry>kern</entry>
<entry>freebsd-scsi</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the &man.sound.4; subsystem</entry>
<entry>kern</entry>
<entry>freebsd-multimedia</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problems with the &man.wlan.4; subsystem and
wireless drivers</entry>
<entry>kern</entry>
<entry>freebsd-wireless</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with &man.sysinstall.8; or
&man.bsdinstall.8;</entry>
<entry>bin</entry>
<entry>freebsd-sysinstall</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with the system startup scripts
(&man.rc.8;)</entry>
<entry>kern</entry>
<entry>freebsd-rc</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with VIMAGE or VNET functionality and
related code</entry>
<entry>kern</entry>
<entry>freebsd-virtualization</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>problem with Xen emulation</entry>
<entry>kern</entry>
<entry>freebsd-xen</entry>
<entry>mailing list</entry>
</row>
</tbody>
</tgroup>
</table>
<table xml:id="common-assignees-ports">
<title>Common Assignees &mdash; Ports Collection</title>
<tgroup cols="4">
<thead>
<row>
<entry>Type</entry>
<entry>Suggested Category</entry>
<entry>Suggested Assignee</entry>
<entry>Assignee Type</entry>
</row>
</thead>
<tbody>
<row>
<entry>problem with the ports framework
(<emphasis>not</emphasis> with an individual port!)</entry>
<entry>ports</entry>
<entry>portmgr</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by apache@FreeBSD.org</entry>
<entry>ports</entry>
<entry>apache</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by autotools@FreeBSD.org</entry>
<entry>ports</entry>
<entry>autotools</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by doceng@FreeBSD.org</entry>
<entry>ports</entry>
<entry>doceng</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by eclipse@FreeBSD.org</entry>
<entry>ports</entry>
<entry>freebsd-eclipse</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by gecko@FreeBSD.org</entry>
<entry>ports</entry>
<entry>gecko</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by gnome@FreeBSD.org</entry>
<entry>ports</entry>
<entry>gnome</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by hamradio@FreeBSD.org</entry>
<entry>ports</entry>
<entry>hamradio</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by haskell@FreeBSD.org</entry>
<entry>ports</entry>
<entry>haskell</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by java@FreeBSD.org</entry>
<entry>ports</entry>
<entry>freebsd-java</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by kde@FreeBSD.org</entry>
<entry>ports</entry>
<entry>kde</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by mono@FreeBSD.org</entry>
<entry>ports</entry>
<entry>mono</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by
office@FreeBSD.org</entry>
<entry>ports</entry>
<entry>freebsd-office</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by perl@FreeBSD.org</entry>
<entry>ports</entry>
<entry>perl</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by python@FreeBSD.org</entry>
<entry>ports</entry>
<entry>freebsd-python</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by ruby@FreeBSD.org</entry>
<entry>ports</entry>
<entry>freebsd-ruby</entry>
<entry>mailing list</entry>
</row>
<row>
<entry>port which is maintained by secteam@FreeBSD.org</entry>
<entry>ports</entry>
<entry>secteam</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by vbox@FreeBSD.org</entry>
<entry>ports</entry>
<entry>vbox</entry>
<entry>alias</entry>
</row>
<row>
<entry>port which is maintained by x11@FreeBSD.org</entry>
<entry>ports</entry>
<entry>freebsd-x11</entry>
<entry>mailing list</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Ports PRs which have a maintainer who is a ports committer
may be reassigned by anyone (but note that not every &os;
committer is necessarily a ports committer, so you cannot
simply go by the email address alone.)
</para>
<para>For other PRs, please do not reassign them to individuals
(other than yourself) unless you are certain that the assignee
really wants to track the PR. This will help to avoid the
case where no one looks at fixing a particular problem
because everyone assumes that the assignee is already working
on it.</para>
<table xml:id="common-assignees-other">
<title>Common Assignees &mdash; Other</title>
<tgroup cols="4">
<thead>
<row>
<entry>Type</entry>
<entry>Suggested Category</entry>
<entry>Suggested Assignee</entry>
<entry>Assignee Type</entry>
</row>
</thead>
<tbody>
<row>
<entry>problem with PR database</entry>
<entry>bin</entry>
<entry>bugmeister</entry>
<entry>alias</entry>
</row>
<row>
<entry>problem with Bugzilla <link xlink:href="https://bugs.freebsd.org/submit/">web form</link>.</entry>
<entry>doc</entry>
<entry>bugmeister</entry>
<entry>alias</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section xml:id="pr-assigned">
<title>Assigned PRs</title>
<para>If a PR has the <literal>responsible</literal> field set
to the username of a FreeBSD developer, it means that the PR
has been handed over to that particular person for further
work.</para>
<para>Assigned PRs should not be touched by anyone but the
assignee or bugmeister. If you have comments, submit a followup. If for
some reason you think the PR should change state or be
reassigned, send a message to the assignee. If the assignee
does not respond within two weeks, unassign the PR and do as
you please.</para>
</section>
<section xml:id="pr-dups">
<title>Duplicate PRs</title>
<para>If you find more than one PR that describe the same issue,
choose the one that contains the largest amount of useful
information and close the others, stating clearly the number
of the superseding PR. If several PRs contain non-overlapping
useful information, submit all the missing information to one
in a followup, including references to the others; then close
the other PRs (which are now completely superseded).</para>
</section>
<section xml:id="pr-stale">
<title>Stale PRs</title>
<para>A PR is considered stale if it has not been modified in more
than six months. Apply the following procedure to deal with
stale PRs:</para>
<itemizedlist>
<listitem>
<para>If the PR contains sufficient detail, try to reproduce
the problem in <literal>-CURRENT</literal> and
<literal>-STABLE</literal>. If you succeed, submit a
followup detailing your findings and try to find someone
to assign it to. Set the state to <quote>analyzed</quote>
if appropriate.</para>
</listitem>
<listitem>
<para>If the PR describes an issue which you know is the
result of a usage error (incorrect configuration or
otherwise), submit a followup explaining what the
originator did wrong, then close the PR with the reason
<quote>User error</quote> or <quote>Configuration
error</quote>.</para>
</listitem>
<listitem>
<para>If the PR describes an error which you know has been
corrected in both <literal>-CURRENT</literal> and
<literal>-STABLE</literal>, close it with a message
stating when it was fixed in each branch.</para>
</listitem>
<listitem>
<para>If the PR describes an error which you know has been
corrected in <literal>-CURRENT</literal>, but not in
<literal>-STABLE</literal>, try to find out when the person
who corrected it is planning to MFC it, or try to find
someone else (maybe yourself?) to do it. Set the state to
<quote>patched</quote> and assign it to whomever will do
the MFC.</para>
</listitem>
<listitem>
<para>In other cases, ask the originator to confirm if
the problem still exists in newer versions. If the
originator does not reply within a month, close the PR
with the notation <quote>Feedback timeout</quote>.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="pr-misfiled-notpr">
<title>Non-Bug PRs</title>
<para>Developers that come across PRs that look like they should have
been posted to &a.bugs.name; or some other list should close the
PR, informing the submitter in a comment why this
is not really a PR and where the message should be posted.</para>
<para>The email addresses that Bugzilla listens to for incoming PRs
have been published as part of the FreeBSD documentation, have
been announced and listed on the web-site. This means that
spammers found them.</para>
<para>Whenever you close one of these PRs, please do the
following:</para>
<itemizedlist>
<listitem>
<para>Set the component to <literal>junk</literal> (under
<literal>Supporting Services</literal>.</para>
</listitem>
<listitem>
<para>Set Responsible to <literal>nobody@FreeBSD.org</literal>.</para>
</listitem>
<listitem>
<para>Set State to <literal>Issue Resolved</literal>.</para>
</listitem>
</itemizedlist>
<para>Setting the category to <literal>junk</literal> makes it
obvious that there is no useful content within the PR, and
helps to reduce the clutter within the main categories.</para>
</section>
</section>
<section xml:id="references">
<title>Further Reading</title>
<para>This is a list of resources relevant to the proper writing
and processing of problem reports. It is by no means complete.</para>
<itemizedlist>
<listitem>
<para><link xlink:href="&url.articles.problem-reports;/article.html">How to
Write FreeBSD Problem Reports</link>&mdash;guidelines
for PR originators.</para>
</listitem>
</itemizedlist>
</section>
</article>