comparison doc/swallowtail.tex @ 18:2f6e36e87efd

first draft.
author David A. Holland
date Mon, 03 Sep 2012 19:29:24 -0400
parents c4ee36b629c0
children 0365c1ab6fd8
comparison
equal deleted inserted replaced
17:f155c6af2c6b 18:2f6e36e87efd
16 \newcommand{\bra}{{\tt\char`\{}} 16 \newcommand{\bra}{{\tt\char`\{}}
17 \newcommand{\ket}{{\tt\char`\}}} 17 \newcommand{\ket}{{\tt\char`\}}}
18 \newcommand{\bs}{{\tt\char`\\}} 18 \newcommand{\bs}{{\tt\char`\\}}
19 \newcommand{\caret}{{\tt\char`\^}} 19 \newcommand{\caret}{{\tt\char`\^}}
20 20
21 % The search strings ``XXX'' and ``future'' are intentionally
22 % supported in the text below.
23
21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
22 25
23 \title{The Swallowtail Bugtracking System} 26 \title{The Swallowtail Bugtracking System}
24 \author{David A. Holland} 27 \author{David A. Holland}
25 \date{September 3, 2012} 28 \date{September 3, 2012}
29 32
30 \section{Introduction} 33 \section{Introduction}
31 34
32 Swallowtail is a bugtracking system meant to serve as a migration path 35 Swallowtail is a bugtracking system meant to serve as a migration path
33 for large GNATS installations. 36 for large GNATS installations.
34 37 It is intended to address various shortcomings of GNATS that appear
35 38 with a large database, and to provide a migration path for that
39 database that does not lose information.
40
41 As in GNATS, individual bug reports are called PRs (``problem
42 reports'') and are given unique numbers from an increasing sequence.
43
44 The database is kept in PostgreSQL.
45
46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 \section{Design Criteria}
48
49 Swallowtail is intended for use by large projects that take their bug
50 tracking seriously.
51 It assumes the existence of a project server that can host the
52 database, and that project developers have shell access on this
53 machine.
54 Unless special measures are taken, everyone with shell access to the
55 host machine is assumed to be a developer and has developer-level
56 access to the database.
57 Developers are assumed to be grownups, at least mentally, and to not
58 require either baby-sitting or padded cells.
59 Developers are also assumed to be generally clueful and able to take
60 advantage of direct query access to the database.
61
62 A web interface is also provided but it allows only end-user-level
63 access.
64 It also does not attempt to offer the full range of query and
65 annotation support.
66
67 It is assumed that most bug report traffic will be handled by email,
68 and that all public traffic will be reflected onto one or more mailing
69 lists for general distribution.
70 However, both new bug reports and followup traffic can be submitted
71 via the web interface.
72 It is not necessary to sign up to file a bug report.
73
74 Swallowtail assumes that the database is large (as bug databases go,
75 not large in DBMS terms), both in terms of the total number of bugs on
76 file and the number of issues currently open.
77 This means that hand-editing is not feasible.
78 Manual generation of semantic indexes and tags is presumed possible
79 but expensive.
80 It is assumed that multiple types of semantic indexing and tagging
81 will be required.
82 Supporting this is the primary motivation for creating Swallowtail at
83 all.
84
85 Swallowtail is also intended to replace GNATS, so it explicitly allows
86 importing an existing GNATS database without losing information.
87 (One of the major problems with migrating away from GNATS, or
88 migrating any bug database, is that most bug databases have a
89 hardcoded schema with fixed semantics, and no two are equivalent.)
90
91 It also is written to allow incoming bug reports to be sent with the
92 GNATS send-pr tool, as this tool is deployed in the field and can be
93 updated in the field only gradually.
94
95 We are explicitly assuming that everything that talks directly to
96 GNATS can be updated, rewritten, or replaced for Swallowtail, and
97 that there are relatively few such things.
98
99 Swallowtail is being written specifically to manage NetBSD's bug
100 database, but it is intended to remain general enough to be useful to
101 other groups who may be in a similar position.
102
103 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104 \section{Submitting PRs}
105
106 New PRs can be submitted either by email or via a web form.
107 The email interface accepts only structured mail in the form sent by
108 the GNATS send-pr tool.
109 Malformed emails are returned.
110 (Sending handwritten mail to the PR submission address is not
111 supported.)
112
113 The web form requires a valid email address, as most transactions are
114 handled by email.
115 In the future it might be desirable to set up a scheme that allows
116 entirely web-based access for end users.
117
118 XXX: need to decide whether/how much to validate email addresses in
119 the web form, and also what measures to take to prevent spam.
120 Maybe an email address already in the system can be used to submit new
121 PRs without any kind of further validation step.
122
123 XXX: Also I wonder if we ought to have a blacklist for emails that
124 aren't allowed to submit PRs.
125
126 Submitting a PR generates an email to the submitter that reports the
127 PR number and includes brief instructions for further actions.
128 If the PR is confidential, a notice to this effect is included in the
129 response mail, as well as instructions and/or a link for making the PR
130 non-confidential.
131 (This is because most confidential PR submissions are confidential by
132 mistake.)
133 The mail also includes a generated password for logging in to the web
134 interface as a submitter.
135 (Currently this does nothing; in the future it will allow e.g.
136 unsubscribing from the PR.)
137
138 The submitter of a PR is automatically subscribed to the PR as a
139 respondent.
140
141 Note that currently Swallowtail does not provide its own send-pr
142 script, as this is not required for the initial deployment.
143 There will probably be one in the future.
144
145 NetBSD: The submission address for NetBSD will be
146 swallowtail@NetBSD.org (unless we decide on something else) although
147 the old gnats-bugs address will be kept for the indefinite future to
148 allow old send-pr scripts to continue to work.
149
150 GNATS: For some reason GNATS accepts a wide range of malformed
151 incoming emails.
152 This almost invariably makes a mess when it occurs.
153
154 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
155 \section{Retrieving PRs}
156
157 The web interface includes a scheme for retrieving any PR
158 (except PRs marked confidential) by a well-known address.
159 The search page also allows retrieving a single PR by number.
160
161 NetBSD: The address will probably be \url{http://bugs.netbsd.org/12345}.
162
163 In the web interface, text within the administrative or message logs
164 that can be identified as a PR number is rendered as a clickable link.
165
166 Email addresses are not displayed in the web interface at all.
167 (Or maybe, in the future when this is possible, only when logged in.)
168
169 The \texttt{query-pr} command line tool can retrieve any PR, including
170 confidential PRs.
171 This is done by passing it the PR number.
172 As in GNATS the option \texttt{--full} prints the message and
173 administrative logs as well as the base PR data.
174 Use \texttt{--attach N} to retrieve an attachment.
175
176 \texttt{query-pr} can also be used for searching.
177 See below.
178
179 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
180 \section{Commenting on PRs}
181
182 Comments on PRs can be submitted either by email or via the PR's web
183 page.
184 In either case, files can be provided (as MIME attachments or via
185 upload) that are filed as attachments to the PR.
186 Comments on PRs can also be submitted by running \texttt{comment-pr},
187 or from \texttt{browse-pr}.
188 All comments go to the PR's message log.
189
190 MIME multipart messages that include both text and HTML will be
191 converted to plain text.
192 MIME mail that is HTML-only will be rejected.
193 The MIME content-type of mails is retained, so if non-ASCII mail
194 appears it can be displayed correctly, and so remailed text is marked
195 correctly.
196
197 The comment address is the same as the submission address.
198 Comments are identified by the Subject: line, which should begin with
199 \texttt{Re: category/12345} like in GNATS.
200 (In the future we might switch to a tidier tagging scheme, such as
201 \texttt{[NetBSD 12345]} anywhere in the Subject: line, but the old
202 style will have to be supported indefinitely regardless.)
203 The category need not be the right category for the PR; if it is
204 wrong, the right one will be substituted before the comment is filed
205 or remailed.
206 Also, if the Subject: line of a comment is empty except for the tag,
207 the PR's synopsis will be inserted.
208
209 Source control commit messages routed to the bug database are treated
210 as comments.
211
212 Comments are remailed to all email addresses subscribed to the PR,
213 and also (if not confidential) to the mailing list associated with the
214 PR's category.
215
216 Remailed comments have a References: header that allows them to thread
217 together.
218 (The contents of it need to be site-configurable.)
219
220 Comments filed on a locked PR go to the administrator queue.
221
222 GNATS: GNATS has no web-based way of filing comments, which
223 occasionally annoys people.
224
225 GNATS: GNATS has no MIME support at all and corrupts mails with
226 attachments when filing them in the database (not fatally but
227 annoyingly), which aggravates everyone regularly.
228
229 GNATS: GNATS cannot lock PRs, and old PRs often receive spam or
230 misdirected mail that has to be cleaned up by hand.
231
232 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
233 \section{Updating/Editing PRs}
234
235 PRs are edited with \texttt{edit-pr}.
236 (This is not accessible to end users.
237 An end user wanting to adjust the PR state should file a comment
238 requesting the change.)
239
240 Changes made with \texttt{edit-pr} are recorded in the PR's
241 administrative log.
242 (XXX: some of them should be mailed out and not others, but it isn't
243 clear which are which yet.)
244
245 Each PR has the following base properties:
246 \begin{itemize}
247
248 \item
249 Its number.
250 (This cannot be changed.)
251
252 \item
253 The \emph{synopsis}.
254 This is a short (one-line) description of the PR provided by the
255 submitter.
256 It can (and should) be adjusted as necessary during the lifetime of
257 the PR.
258
259 If in a new submission or conversion from GNATS the Subject: line of
260 the email is not the same as the synopsis field, the effect will be
261 that the synopsis is first set to the provided Subject: and then to
262 the provided synopsis, generating the corresponding change entry in
263 the PR's administrative log.
264
265 \item
266 The confidential flag.
267 PRs marked confidential can be accessed only by developers, and
268 traffic about them is not reflected to mailing lists.
269
270 \item
271 The \emph{state}.
272 This is the basic state the PR is in.
273 (Open, closed, pending-pullups, etc.)
274 The list of states is configurable.
275 States have a name (which should be an identifier), a description, and
276 flags that identify if the state is a closed state, whether reminder
277 and/or feedback mail should be sent.
278 There is also an obsolete flag that prevents new uses of the state.
279
280 NetBSD: we will start out with the same set of states as we have in
281 GNATS, plus ``stuck''.
282 (A PR is stuck if a respondent is needed and there are none.)
283
284 XXX: when you put a PR into feedback state you should provide a
285 timeout period and whether the PR should, if the timeout expires, be
286 changed to ``stuck'' or ``closed''.
287
288 \item
289 The \emph{locked} flag.
290 A locked PR cannot be edited or commented on until it is first
291 unlocked.
292 Attempting to run \texttt{edit-pr} or \texttt{comment-pr} on a locked
293 PR will result in a message that the PR is locked and the option to
294 unlock it or abort.
295 (Filing a comment on a locked PR by email or via the web interface
296 results in the comment going to the administrator queue.)
297 PRs are automatically locked by the system a month after being
298 closed.
299
300 The database conversion from GNATS will mark all PRs locked that have
301 been closed for more than a month.
302
303 GNATS: GNATS does not support locked PRs.
304
305 \item
306 The database schema version that was current when the PR arrived.
307 This is useful for knowing what conversions were applied to the
308 data.
309 The initial schema version is 1.
310 Version 0 means ``converted from GNATS''.
311
312 \item
313 The date (and time) that the PR arrived.
314
315 \item
316 The date (and time) that the PR was closed, if appropriate.
317
318 \item
319 The original submitter, who remains the original submitter even if
320 later unsubscribed.
321
322 \item
323 The \emph{release}, which is the Release field from GNATS.
324
325 \item
326 The \emph{environment}, which is the Environment field from GNATS.
327
328 \item
329 The administrative log, which is a list of messages generated when the
330 PR is updated.
331
332 \item
333 The message log, which is a list of comments filed on the PR and their
334 attachments.
335
336 \item
337 The subscription lists.
338 As described below, a user can be subscribed in any of three ways
339 (and more than once).
340 Each subscription also has a ``batch'' flag to send out update mails
341 in bundles.
342 (XXX: it is not clear if this needs to be implemented up front or not.)
343
344 \item
345 Classification entries.
346 There are, in general, multiple classification schemes, which come in
347 different flavors.
348 Each PR has a value for each classification scheme (which might be
349 missing or null in some cases) whose allowable values and meaning are
350 defined by the classification scheme.
351 The GNATS Severity, Priority, Class, and Category fields are handled
352 as classification schemes.
353 (The category scheme has some special-case handling as described
354 elsewhere.)
355
356 \end{itemize}
357
358 The mail from-address and message-ID, which are retained by GNATS, are
359 in Swallowtail just handled as entries in the administrative log.
360
361 The Description, How-To-Repeat, and Fix fields of a GNATS PR, along
362 with any ``unformatted'' text that confused GNATS, are in Swallowtail
363 handled as the initial entries in the PR's message log.
364
365 Idea for the future: provide up/down vote buttons (both in the web
366 page and in edit-pr) to help rank the importance of individual bugs.
367 If you are also seeing a particular problem, you vote it up; if you
368 are using the affected software but not seeing it, you vote it
369 down.
370 Or something like that.
371
372 The data associated with users is described in another section below.
373 Decoupling user data from individual PRs makes it feasible to update
374 your email address in the database, which is tedious to the point of
375 impossible with GNATS.
376
377 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
378 \section{Tracking PRs}
379
380 The simple way to track PRs is to subscribe to the mailing list(s)
381 that Swallowtail traffic is reflected to.
382 However, since those lists are likely to be high volume, and also do
383 not carry traffic about confidential PRs, it is also possible to
384 subscribe directly to individual PRs.
385
386 In the web interface, there is a link for this.
387 XXX: there should be a way to do this by email, but it isn't yet clear
388 what it should be.
389
390 Everyone subscribed to a PR receives a copy of all comments made on
391 the PR, and notices of significant administrative changes.
392 There are two additional modes:
393
394 \begin{itemize}
395
396 \item
397 A \emph{respondent} is someone who is experiencing the problem and can
398 provide feedback if needed.
399 The original submitter is always subscribed as a respondent, but
400 especially for old PRs, they may disapper and others may appear.
401
402 \item
403 A \emph{responsible party} is someone who is fixing the problem, or at
404 least taking charge of seeing that it gets fixed.
405 This may be a specific developer, or it may be a role account that
406 looks after PRs nobody specific is handling.
407 For new PRs a default responsible party can be subscribed based on the
408 PR category.
409 Ordinarily only one developer will be subscribed as responsible.
410
411 \end{itemize}
412
413 If the last respondent with \texttt{mailto} permission unsubscribes
414 (or is unsubscribed) from a PR that is in feedback state, it is
415 automatically switched to the stuck state.
416 (XXX: but do we want to make ``stuck'' a known special case like this?)
417
418 XXX: there should be a way to bring a PR to the attention of another
419 developer short of subscribing them to it.
420
421 In the future there should be an RSS feed for each PR, but this is not
422 expected to be implemented in the first rollout.
423 (There should also be individual RSS feeds for categories, and based
424 on classification schemes, and whatever else.)
425
426 GNATS: GNATS has no ability to allow anyone but the original submitter
427 to function as a respondent.
428
429 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
430 \section{Reminder Mails}
431
432 The system periodically sends out two kinds of mail: \emph{reminder
433 mail}, that goes to developers responsible for open PRs, and
434 \emph{feedback mail}, that goes to the submitters (typically) of PRs
435 that have been placed in feedback state.
436
437 One reminder mail is sent to each developer subscribed as
438 ``responsible'' to at least one PR, listing the PR by number and
439 synopsis.
440 (XXX: sorted how?)
441 Reminders are not sent for PRs that are in feedback.
442
443 NetBSD: reminders are also not sent for PRs that are in
444 pending-pullups state.
445
446 Feedback mail is sent to each user subscribed as ``respondent'' to at
447 least one PR.
448 If the user is being nagged about three or fewer PRs, one email is
449 sent for each PR, with the headers adjusted so replies get filed in
450 that PR.
451 This makes it easier for casual users to respond correctly.
452 If the user is being nagged about more PRs than that, only one mail is
453 sent, in the same form as reminder mail.
454 In the future the feedback mails will repeat the message requesting
455 feedback; this is not expected to be implemented for the initial
456 deployment.
457
458 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
459 \section{Statistical Reporting}
460
461 Various scripts to gather statistics are provided, both as part of the
462 web interface and to generate periodic report mail.
463
464 These include:
465 \begin{itemize}
466
467 \item The summary statistics, originally written by Erik E. Fair for
468 the NetBSD GNATS;
469
470 \item A daily report, based on the one GNATS sends to the netbsd-bugs
471 mailing list;
472
473 \item A monthly report, based on the one I wrote to send to the
474 developers list;
475
476 \item Whatever other stuff may come up or looks interesting.
477
478 \end{itemize}
479
480 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
481 \section{Searching for PRs}
482
483 The web interface provides a simple search form, which can search on
484 various fields or on text in the log.
485 In the future this may be made more powerful; for the time being it is
486 expected to remain largely the same as the interface to GNATS.
487
488 Command-line searching can be done with \texttt{query-pr}.
489 Any value in any field can be matched; text search in the
490 administrative and message logs (or anywhere in the PR) is also
491 supported.
492 XXX: this should take advantage of postgres's full text search tools,
493 and this section should be rewritten once it's clear what that
494 provides.
495
496 There is a flag for also searching closed PRs, which are skipped by
497 default.
498 There is also a flag to retrieve a randomly selected PR.
499
500 Note that the weird GNATS query-pr query language is not supported.
501 (Complex queries are best issued using the SQL interface.)
502
503
504 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
505 \section{Browsing the Database}
506
507 The tool \texttt{browse-pr} is provided for examining the database.
508 Its user interface is reminiscent of a newsreader.
509 And, it will probably only be implemented in the future.
510
511 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
512 \section{Direct SQL Interface}
513
514 XXX: document this, including particularly the views that developers
515 are meant to use to look at things.
516
517 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
518 \section{Database Users}
519
520 Unlike GNATS, the Swallowtail database tracks users explicitly.
521 Each one has a username and a real name, and one or more email
522 addresses.
523 When more than one email address is on file, one of the addresses is
524 selected for sending mail.
525 The Organization field that GNATS stores and send-pr provides is filed
526 with the email address that sent it.
527 The database also tracks the last time mail was received from each
528 address, as this is often useful when sorting out problems.
529
530 Each address also has a ``web password'' attached to it.
531 This is generated randomly when the address is first encountered
532 in a PR submission and sent back to the user in the response to the
533 submission.
534 In the future it is meant to allow logging into the web site as a
535 submitter; for now it does nothing.
536
537 Each user also has the following permission bits:
538 \begin{itemize}
539
540 \item
541 \texttt{mailto} -- if this is false, Swallowtail will not send any
542 email to this user.
543 If the only users subscribed to a PR as respondents have mail
544 disabled (or there are no users subscribed as respondents) setting the
545 PR to feedback state will fail.
546 This flag can be used for users whose mail bounces, or who are
547 otherwise no longer available.
548
549 \item
550 \texttt{responsible} -- if this is true, the user is allowed to be
551 responsible for open PRs.
552 This should normally be set for all developers, and only developers,
553 and should be cleared when a developer quits.
554 (Any open PRs they are responsible for should be reassigned.)
555 It should also be set for role accounts that are responsible by
556 default when nobody else is.
557
558 \item
559 \texttt{oldresponsible} -- if this is true, the user is allowed to be
560 responsible only for closed PRs.
561 This should be set if \texttt{responsible} is set, and should also be
562 left set when a developer quits.
563
564 \item
565 \texttt{editpr} -- if this is true, the user is allowed to run
566 \texttt{edit-pr} and make changes to the database.
567 This should be set for all developers, and only developers, and should
568 be cleared when a developer quits.
569
570 \item
571 \texttt{admin} -- if this is true, the user is allowed to perform
572 administrative tasks.
573
574 \end{itemize}
575
576 Note that while all developers are assumed to have a username, end
577 users will in general not have one.
578
579 XXX: what's the mechanism for updating user information?
580
581 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
582 \section{Administrator Queue}
583
584 The database contains an explicit queue, or in fact several explicit
585 queues, of issues requiring administrator attention.
586 The following subsections describe the components of the administrator
587 queue.
588 The administrator queue is accessible only to users with the
589 \texttt{admin} permission bit set.
590
591 \subsection{Comments filed on locked PRs.}
592
593 When a comment is made on a PR that is locked, instead of being
594 applied to the PR it is placed in the administrator queue for manual
595 attention.
596 The possible actions are:
597 \begin{itemize}
598 \item defer: put it off for tomorrow;
599 \item accept: add it to the PR, for valid/intended comments;
600 \item new: create a new PR instead;
601 \item reroute: send to another PR instead, for mistyped PR numbers;
602 \item bounce: return to sender, for non-spam with no clear other choice;
603 \item discard: erase it, as comments on locked PRs are often spam.
604 \end{itemize}
605
606 Accepting a comment on a locked PR automatically unlocks it, and by
607 default also reopens it.
608
609 \subsection{Feedback mail bounces.}
610
611 When bounced mail arrives, Swallowtail examines it to try to determine
612 which PR and which user it applies to.
613 If it appears to be a bounce generated from feedback mail (or from
614 reminder mail) it goes into this queue.
615 The full mail is retained for inspection.
616
617 The possible actions are:
618 \begin{itemize}
619 \item defer: put it off for tomorrow;
620 \item count: just add one to the number of bounces recorded;
621 \item changeaddr: change to a different address for the same user;
622 \item nomail: inhibit sending further mail to the user;
623 \item discard: delete the mail from the queue.
624 \end{itemize}
625 % XXX the count used by ``count'' needs to be described in the user
626 % data section.
627
628 \subsection{Other mail bounces.}
629
630 Bounced mail that can be associated with a PR and/or user but is not
631 feedback goes into this queue.
632 The actions are the same as for feedback bounces.
633
634 \subsection{Junk mail.}
635
636 All other unrecognized mail goes into this queue.
637 The possible actions are:
638 \begin{itemize}
639 \item defer: put it off for tomorrow;
640 \item forward: forward it somewhere (normally to yourself);
641 \item discard: erase it.
642 \end{itemize}
643
644 (XXX: maybe this stuff should just be forwarded on or dumped out into
645 a mailbox somewhere.)
646
647 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
648 \section{Classification Schemes}
649
650 Here is a quick discussion of the classification schemes that we
651 expect to use, or might use.
652
653 \subsection{Enumerated classifications}
654
655 \paragraph{Category.}
656 The part of the system affected, in broad terms.
657 The same as the GNATS ``Category'' field.
658 This classification is special-cased in some places, at least for now;
659 in the future it might make sense to allow those places to do matching
660 on arbitrary classifications.
661
662 \paragraph{Class.}
663 The GNATS ``Class'' field: \texttt{sw-bug}, \texttt{doc-bug},
664 \texttt{change-request}, etc.
665
666 \paragraph{Severity.}
667 The GNATS ``Severity'' field.
668
669 \paragraph{Priority.}
670
671 The GNATS ``Priority'' field.
672
673 \subsection{Text classifications}
674
675 \paragraph{Manpage.}
676 The name of the nearest man page to where the problem appears to be.
677 FreeBSD has been using this as a tagging scheme for some time.
678
679 \paragraph{Package.}
680 The name of the package affected.
681 (For pkgsrc bugs only.)
682
683 \subsection{Hierarchical taxonomies}
684
685 \paragraph{Subsystem.}
686 The hierarchical taxonomy I've been using for the buglists web page.
687
688 \paragraph{Consequences.}
689 A hierarchical taxonomy of the results of the problem (annoyance,
690 system crash, remote root exploit, etc.)
691
692 \subsection{Tag sets.}
693
694 \paragraph{Releng.}
695 Tags like \texttt{6-CRITICAL}.
696
697 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
698 \section{Other Future Features}
699
700 Some other things that aren't likely to be deployed immediately but
701 are worth considering later:
702
703 \begin{itemize}
704
705 \item Have a way to note dependencies among PRs, as in 12345 is
706 stalled until 24680 is fixed.
707 (This does not occur often enough in practice to be a priority.)
708
709 \item Have a way to massedit a group of PRs; for example, put all PRs
710 against a particular driver or filesystem or whatever into feedback
711 after major fixes.
712
713 \item There should be administrator buttons for moving comments to
714 different PRs, for e.g. misfiled comment notices.
715
716 \item It should be possible for users to set personal tags/priorities
717 for annotating and/or sorting nag mail.
718 (E.g. sort by priority, or age, or time since last change, etc.)
719
720 \item It should be possible to blacklist Cc: of certain addresses
721 (particularly internal lists) in bug traffic.
722
723 \item Any new send-pr script should be configurable by the user with
724 return addresses and default values for organization and so forth.
725
726 \item It would be nice to be able to track PR status separately (or
727 semi-separately) for release branches.
728 However, it isn't clear how to do this without making a cumbersome
729 mess.
730
731 \item It might be useful to be able to explicitly merge duplicate PRs,
732 without either losing information or creating a confused mess of
733 interleaved comments.
734
735 \item It might be worth adding threading for comments.
736
737 \item We should figure out how to make Google see and index the pages
738 for each PR.
739 Or maybe just the open ones.
740
741 \item It would be nice if the web page for each PR had browse features
742 like links for ``show all PRs of this priority'' or ``show all PRs
743 from this submitter'' and whatnot.
744
745 \item Lists of PRs in the web interface should have a sidebar to let
746 you narrow the list, and a list of the filters currently applied (like
747 e.g. NewEgg's product searches).
748 Also, the sort order should be defined (unlike GNATS) and selectable.
749
750 \item It might be worthwhile to allow PR subscriptions in a brief mode
751 where all you get is ``Joe commented on PR 12345''.
752
753 \item We will eventually want a way to turn MIME blobs already in the
754 database into attachments.
755
756 \item Should have per-user tags that are more or less private.
757
758 \item Should have per-user tags that are public.
759
760
761 \end{itemize}
762
763 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 \end{document} 764 \end{document}