[t] Refactor some namespace pmc tests to use throws_like
[parrot.git] / docs / project / ticket_triaging.pod
blobb885832add3755cba626028a998d5341f0283c26
1 # Copyright (C) 2001-2009, Parrot Foundation.
2 # $Id$
4 =pod
6 =head1 NAME
8 docs/project/ticket_triaging.pod - Managing Tickets
10 =head1 ABSTRACT
12 This document attempts to outline a set of best practices for dealing with
13 tickets in Parrot's tracking system.  It is targeted at Parrot developers and
14 Ticket Wranglers and is I<not> intended as advice or instruction for end users.
15 Ticket filing procedures for end users are documented in
16 F<docs/submissions.pod>.
18 =head1 WHAT ABOUT TRAC?
20 Our preferred method of bug tracking at this point is trac:
21 L<https://trac.parrot.org/>
23 All Parrot developers are expected to pitch in and help keep the ticket tracker
24 in a healthy state.  I<This means you!> Most of the document below still makes
25 sense in terms of activities in trac, but the specifics are of course different
26 with the new system.
28 We still have several hundred tickets at the old RT system, but our goal is to
29 close out those tickets and (if necessary), replace them with trac tickets.
30 The old system is available at L<https://rt.perl.org>.  The Parrot issues are
31 in the queue I<parrot>.
33 =head1 TICKET HANDLING PROCEDURES
35 =head2 New Tickets
37 Where I<New> refers to a pre-existing ticket sitting in the Parrot queue with a
38 status of C<new>.
40 =head3 Bug Triage
42 Involves deciding whether the ticket is a real bug, a feature request, a
43 duplicate, or spam.
45 It is especially important to check that all C<new> bugs which are marked
46 [TODO], [PATCH], or [CAGE] really are bugs of the given class.  This is because
47 some bugs, such as [TODO] and [CAGE], get their status set to C<open> to
48 indicate that something should be done, rather than that someone is doing
49 something.
51 =over 4
53 =item Is this spam?
55 Assign the issue to the queue I<spam>. Note that if this is successful, you
56 will no longer have permissions to view the ticket.
58 =item Is this a duplication of an existing ticket?
60 Under the Action section, chose the "resolve as" option and select "duplicate"
61 from the dropdown.  Add a comment to the ticket along the lines of "Duplicate
62 of Ticket #123".
64 =item Is there enough information?
66 If not, ask for more input.
68 =item Is it a [TODO] ticket?
70 Is the subject line in the format C<"[TODO] subsystem - issue>?
72 Change the status of C<[TODO]> tickets to C<open> to prevent them from
73 appearing in a listing of C<new> tickets.
75 =item Is it a [PATCH] ticket?
77 Is the subject line in the format C<"[PATCH] subsystem - issue>?
79 Make sure that there is actually a patch attached to the ticket. If you've
80 applied a patch, be sure to include the revision in your response when closing
81 the ticket.
83 =item * Is it a [CAGE] bug?
85 Is the subject line in the format C<"[CAGE] subsystem - issue>?
87 C<[CAGE]> bugs should have their status changed to C<open> to prevent them from
88 appearing in a listing of C<new> bugs.
90 =item * Assign the bug to someone if at all possible.
92 =back
94 =head2 TODO Tickets
96 =over 4
98 =item Claim ownership or interest ( CC ) of the ticket.
100 This way you will receive further correspondence about the ticket.
102 =item Run the test suite
104 =item make manitest
106 =item add the patch author to F<CREDITS> or update the author's entry
108 =item add correspondence to the ticket stating that the patch was applied.
109 Include the SVN revision number in your response.
111 =item make sure that the ticket's 'Tag' includes 'Patch'
113 =item set the ticket's 'Patch status' to 'Applied'
115 =item set the ticket's 'resolve as' to 'resolved'
117 =back
119 =head2 Old Tickets
121 If the ticket is more then I<1 month> old, then it's I<old>.
123 =over 4
125 =item Ping the requestor
127 Give the requestor at least I<1 week> to respond.  If you receive no response,
128 add a comment to the ticket saying that it is stalled because of no response
129 from the requestor. Change the status to C<stalled>.
131 If it's a [PATCH] ticket, it's possible that the patch was applied but the
132 ticket/patch status was never changed.   Also, not all list traffic regarding a
133 ticket ends up in the tracker.  Look at the SVN repo to attempt to determine if
134 the ticket was resolved.
136 =item Review of stalled tickets
138 Sometimes tickets are C<stalled> because there's no hope if fixing them soon.
139 Sometimes, no response is available from the requestor, or no one can verify
140 the report.  Review these tickets periodically.  When possible, change their
141 status to C<open> or C<closed> as appropriate.
143 =back
145 =head3 Necessary Information
147 As alluded to earlier, tickets are much easier to resolve when they include
148 sufficient information.  For bugs, this is:
150 =over 4
152 =item Specific error messages.
154 These can come from Parrot or the operating system.  Copied and pasted messages
155 are best; the exact wording is often important.
157 =item Platform details.
159 These include operating system and version, compiler information, processor
160 architecture, and versions of included libraries.  The file
161 F<parrot_config.pasm> may be useful.
163 =item Steps to reproduce.
165 At what point did you see the failure?  Can you reproduce it?  Do you have a
166 small PIR program which demonstrates the problem?
168 =item Failure diagnostics.
170 Verbose diagnostics from C<prove -v> -- including all error messages and
171 diagnostics -- are often necessary to resolve test failures.
173 =item Backtraces.
175 Segfaults and other crashes within Parrot are much easier to resolve given a
176 backtrace on a Parrot built with debugging symbols.
178 =back
180 [PATCH] tickets for code almost always need tests and often need documentation.
181 Feel free to ask the submitter to work on both, or to contact another committer
182 for help in identifying and creating the appropriate tests and documentation.
184 =head3 Severity Guidelines
186 Occasionally the severity of a problem may govern how volunteers direct their
187 resources to resolving tickets.  Here are several criteria by which to
188 determine the severity of a report.
190 =over
192 =item Is there an exploitable security problem?
194 Can a malicious user destroy data, access sensitive information, or obtain
195 undesired permissions to the rest of the system?  If so, this is a high
196 priority ticket.
198 =item Is there a crash from a pure-PIR program?
200 Users should never be able to crash Parrot writing normal PIR code.  Such
201 problems need high priority tickets.
203 =item Does the defect prevent a successful configuration, build, or
204 installation of Parrot?
206 If Parrot cannot build, install, or run, the ticket has a high priority.
208 =item Does the defect cause test failures on a core platform?
210 All tests should pass on all core platforms in all releases of Parrot (as well
211 as on trunk).  Test failures, with the appropriate diagnostic information, are
212 moderate priority.
214 =item Is the defect reproducable in the current development version?
216 Reproducable defects have a normal priority.  Unreproducable tickets have a
217 lower priority.
219 =item Does the defect affect a core platform?
221 Defects affecting non-core platforms have a lower priority (which reflects that
222 we probably lack the expertise to deal with that platform).
224 =item Is there a test case suitable for the test suite?
226 A defect reported with a patch to the test suite (or a test case easily added
227 to the test suite) may have a higher priority; it's much easier to diagnose and
228 fix such problems.
230 =back
232 =head1 TIPS FOR CORRESPONDENCE
234 =head2 Be Nice
236 Remember that every word you type into the ticket tracker is I<On The Record>.
237 Try not to say anything that could offend or hurt the feelings of I<anyone>.
238 That includes the ticket submitter and other developers.  When, as a Parrot
239 developer with commit rights, you send correspondence you are representing the
240 Parrot project and, by proxy, The Parrot Foundation.  If in doubt, either send
241 the message privately or not at all.
243 =head2 Say thank you!
245 Try to add a little token of appreciation to every message you send in response
246 to a ticket.  Ticket requestors are doing labor for free!  The least you can do
247 is let them know that you appreciate their efforts.
249 Something like:
251     Thanks,
253     Thanks for following up.
255     Thanks for reporting.
257     Thanks for X!
259 ... can work wonders.  If you can make someone feel good about themselves maybe
260 they'll submit another ticket/patch/whatever or perhaps some day become a
261 Parrot developer.
263 =head2 Make it clear why the ticket status has changed
265 Always note why you're changing a ticket's status, particularly if you're
266 closing or rejecting it.  Nothing will irritate people more then letting them
267 think that their ticket was unimportant or ignored.
269 =head2 Example Correspondence
271     Hi,
273     Can you retest for this ticket with the latest sources from SVN and confirm
274     that this still an open issue?
276     Thanks,
278     -J
282     Hi,
284     Would you mind retesting with the latest sources from SVN?
286     Thanks,
288     -J
292     Hi,
294     Can you resubmit this patch against SVN trunk?
296     Thanks,
298     -J
302     Patch applied as rXXX.  Thanks for submitting.
304     -J
308     No response for requestor.  Ticket being marked as 'rejected'.
309     Thanks for reporting.
311     -J
315     This doesn't appear to be an issue anymore.
316     Thanks for submitting.
318     -J
322     Marking this ticket as 'resolved' because it seems to have fixed itself.
323     Thanks for following up.
325     -J
327 =head1 SVN USAGE TIPS
329 =head2 Commit messages
331 =over 4
333 =item Put a subsystem identifier out the front
335   [tcl]: commit message
337 =item If related to an RT ticket, use the ticket title
339   [tcl]: #37301: [BUG] 9262: env tests failing on win32
341 =item Add a "Courtesy of <foo>" if supplied by someone else
343   Courtesy of A. U. Thor <author@cpan.org>
345 =item Detailed commit messages are preferred
347 Make it clear what your intent is when committing. It makes future maintenance
348 much easier.
350   [PGE]:
351   * Switched "PGE::Regex" to be "PGE::Grammar", to be more accurate.
352   * Moved default rules from PGE::Regex into PGE::Match.
353   * Updated various languages and tools to match.
355 =item Commit file names
357 You don't need to include the filename in the commit message as that's part of
358 the commit itself. However, if your commit affects multiple directories, you
359 may mention that, especially if it's part of a group of commits.
361   [PDD07]: whitespace -- part 5
362   ~ removed trailing spaces and tabs from t/exit/, t/dynpmc/, t/dynoplibs/
364 =item Group similar commits by parts
366 If all commits are much the same and require basically the same commit
367 message, it can be useful to number the commit messages. For example:
369   [tools]: smartlink functionality -- part 3
370   ~ added regex attribute to Keyphrase class
371   ~ filled in some more SmartLinkServer attribute init code
372   ~ expanded LinkTree class functionality
373   still TODO: merge smartlink and spec info, emit html, improve cmdline
374   option code
376 You may optionally include items that are still todo, as it helps make your
377 intentions clear.
379 =item More ideas
381 Look at past commit messages, and L<http://cia.navi.cx/stats/project/parrot>
382 for more best practices.
384 =item OBTW
386 There is a completely separate RT instance in which parrot tickets may
387 occasionally appear. If you find one in this queue, create a new ticket in
388 our RT system, add the original poster as a requestor to the new ticket, and
389 remove yourself.
391 Then, close the ticket in the original system, and include a reference to the
392 new ticket's url in our system when you close the original ticket.
394 L<https://rt.cpan.org/Dist/Display.html?Queue=parrot>
396 =back
398 =cut