annotate doc/overview.txt @ 6806:bdd28b244839

- issue2551223 - fix timestamp truncation in mysql and postgresql The data types used to represent timestamps in pg and mysql for ephemeral tables: sessions and otks don't have enough signifcant digits to work. As a result the timestamps are rounduped (up/down) rsuling in the stored timestamp being 2 minutes (pg) or 2-3 hours(mysql) off from what it should be. Modify db schema to use a numeric type that preserves more significant figures. Implement schema upgrade. Document need for upgrade in upgrading.txt. Write tests for schema upgrade. Implement test for updateTimestamp method on BasicDatabase that showed this issue in the first place. Write overrides for test for anydbm/memorydb which store timestamp properly or not at all.
author John Rouillard <rouilj@ieee.org>
date Mon, 25 Jul 2022 17:20:20 -0400
parents e7b4ad2c57ac
children a072331c843b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6586
24e2eeb2ed9a Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents: 6118
diff changeset
1 .. meta::
6774
e7b4ad2c57ac landmarks, skiplink, remove bad attrs, autocomplete search
John Rouillard <rouilj@ieee.org>
parents: 6586
diff changeset
2 :description:
6586
24e2eeb2ed9a Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents: 6118
diff changeset
3 Original proposal for the Roundup Issue Tracker. The problem
24e2eeb2ed9a Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents: 6118
diff changeset
4 it solves, and guiding principles. Presents the
24e2eeb2ed9a Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents: 6118
diff changeset
5 components of Roundup and how they interact.
24e2eeb2ed9a Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents: 6118
diff changeset
6
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 =======================================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 Roundup: an Issue-Tracking System for Knowledge Workers
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 =======================================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 :Authors: Ka-Ping Yee (original_), Richard Jones (implementation)
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 .. _original: original_overview.html
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 .. contents::
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 Introduction
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 ============
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 Roundup is an issue-tracking system called which will manage a
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 number of issues (with properties such as "description", "priority",
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 and so on) and provides the ability to:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 (a) submit new issues,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 (b) find and edit existing issues, and
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 (c) discuss issues with other participants.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 Roundup facilitates communication among the participants by managing
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 discussions and notifying interested parties when issues are edited.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 Background
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 ----------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 A typical software project requires the management of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 many tasks, usually distributed among several collaborators.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 In fact, any project team
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 could use a tool for sorting out and discussing all the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 relevant issues. A common approach is to set up some kind
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 of "to-do" list that people can share.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 However, to address the overall problem we need much more
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 than just a shared to-do list; we need to
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 manage a growing body of knowledge and experience to help a
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 team collaborate effectively on a project. The issue-tracking
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 tool becomes a nexus for communication: the Grand Central
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 Station of the group intelligence.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 The primary focus of this design is to help
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 developers work together well, not to provide a customer
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 service interface to the developers. This is not to say that
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 the design is to be made unsuitable for customers to use.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 Rather, it is assumed that many of the same qualities
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 that are good for supporting development (see below)
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 are also good for non-developers using the system.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 Additional niceties
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 for providing a safe or simplified interface to clients are
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 intentionally deferred for later consideration.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 A good issue-tracking system should have at least the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 following properties:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 **Low barrier to participation**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 The usefulness of the tool depends entirely on the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 information people contribute to it. It must be made
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 as easy as possible to submit new issues and contribute
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 information about existing issues.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 **Straightforward navigation**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 It should be easy for users to extract information they need
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 from the system to direct their decisions and tasks.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 They should be able to get a decent overview of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 things as well as finding specific information when
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 they know what they're after.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 **Controlled information flow**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 The users must have control over how much information and
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 what information they get. A common flaw of some issue-tracking
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 systems is that they inundate users with so much useless
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 e-mail that people avoid the system altogether.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 With a nod to the time-honoured computer science tradition
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 of "filling in the fourth quadrant", we note that
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 there are really four kinds of information flow
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 going on here. The three mentioned qualities
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 really address the first three quadrants of this 2-by-2 matrix,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 respectively:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 1. User push: a user submits information to the system.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 2. User pull: a user queries for information from the system.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 3. System push: the system sends information out to users.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 4. System pull: the system solicits information from users.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 An example of the fourth kind of flow is voting.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 Voting isn't described in this design,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 but it should be noted as a potential enhancement.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 Guiding Principles
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 ------------------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 **Simplicity**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 It is a strong requirement
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 that the tool be accessible and understandable. It should
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 be fairly obvious what different parts of the interface do,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 and the inner mechanisms should operate in ways that most
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 users can easily predict.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 **Efficiency**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 We aim to optimize for minimum effort to do the most common
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 operations, and best use of resources like screen real estate
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 to maximize the amount of information that we summarize and present.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 **Generality**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 We try to avoid making
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 unnecessary assumptions that would restrict the applicability
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 of the tool. For example, there is no reason why one might
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 not also want to use this tool to manage a design process,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 non-software projects, or organizational decisions.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 **Persistence** We
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 prefer hiding or reclassifying information to deleting it.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 This helps support the collection of statistics later.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 If records are never destroyed, there is little danger
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 in providing access to a larger community, and logging yields
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 accountability, which may encourage better behaviour.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 Data Model
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 ==========
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 Roundup stores a number of *items*, each of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 which can have several properties and an associated discussion.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 The properties can be used to classify or search for items.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 The discussion is a sequence of e-mail messages.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 Each item is identified by a unique number, and has
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 an activity log which
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 records the time and content of edits made on its properties.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 The log stays fairly small since the design intentionally
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 provides only small data types as item properties, and
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 encourages anything large to be attached to
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 e-mail where it becomes part of the discussion.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 The next section explains how items are organized.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 The Hyperdatabase
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 -----------------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 Often when classifying information we are
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 asked to select exactly one of a number of categories
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 or to fit it into a rigid hierarchy. Yet things
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 only sometimes fall into one category; often,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 a piece of information may be related to several concepts.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
156 For example, forcing each item into a single keyword
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 category is not just suboptimal but counterproductive:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 seekers of that
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 item may expect to find it in a different category
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 and conclude that the item is not present in the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 database -- which has them *worse* off
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 than if the items were not categorized at all.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 Some systems try to alleviate this problem by
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 allowing items to appear at multiple locations
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 in a tree, as with "aliases" or "symbolic links" in
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 a filesystem, for example. This does help somewhat,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 but we want to be even more flexible
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 by allowing the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 organization of items into sets that may freely
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 intersect. Rather than putting each item at exactly
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 one place in an overall "grand scheme", a item can
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 belong to as many sets as are appropriate.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175 If we choose to represent the sets themselves as items
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 and set membership as a link between items,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 we're now ready to present the definition of a
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 hyperdatabase.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 A *hyperdatabase* is a collection of *items*
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 that may be hyperlinked to
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 each other (hence the name "hyperdatabase").
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 Each item carries a collection of key-value pairs,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 where some of the values may be links to other items.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 Any item may have an arbitrary number of outgoing and
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 incoming links. Hyperdatabases are able to efficiently
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 answer queries such as "what items link to this item?"
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 and "what items does this item link to?"
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 Rationale
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 ---------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 There are several reasons for building our
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 own kind of database for Roundup rather than using an existing one.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196 Requiring the installation of a full-blown third-party
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 SQL database system would probably deter many potential
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 users from attempting to set up Roundup;
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199 yet a real relational database would be too
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200 complicated to implement on our own.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 On the other hand, a hyperdatabase can be implemented fairly easily
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 using one of the Python DBM modules, so we can
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 take the "batteries-included" approach and provide it
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 as part of the system. It's easier to build and understand
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 than a true relational database (in accordance with our guiding
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207 principle of *simplicity*), but provides
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 most of the query functionality we want.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 A hyperdatabase is well suited for finding the intersection
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 of a number of sets in which items belong. We expect that
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 most of the queries people want to do will be of this
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 form, rather than complicated SQL queries. For example, a
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 typical request might be
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215 "show me all critical items related to security".
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 The ability to store arbitrary key-value pairs and links
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 on items gives it more flexibility than an RDBMS.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 Users are not going to be making thousands of queries
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 per second, so it makes sense to optimize for simplicity
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 and flexibility rather than performance.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 .. img: images/hyperdb.png
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
226 Roundup's Hyperdatabase
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 -----------------------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
229 For our application, we store each item as a item in a
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230 hyperdatabase. The item's properties are stored
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231 as key-value pairs on its item.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 Several types of properties are allowed:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
233 *string*, *number*, *boolean*, *date*, *interval, *link*,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 and *multlink*. Another type, *password*, is a special type
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 of string and it's only used internally to Roundup.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
236
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
237 The *string* type is for short, free-form strings.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
238 String properties are not intended to contain large
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239 amounts of text, and it is recommended that they be presented
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 as one-line fields to encourage brevity. A *number* is a special
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 type of string that represents a numeric value. A *boolean* is
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
242 further constrained to be a *true* or *false* value.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244 The *date* type is for calendar dates and times. An *interval*
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 is the time between two dates.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 The *link* type denotes a single selection from a number of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
248 options. A *link* property entails a link from the item
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 possessing the property to the item representing the chosen option.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251 The *multilink* type is for a list of links to any
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252 number of other items in the in the database. A *multilink*
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 property, for example, can be used to refer to related items
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
254 or keyword categories relevant to an item.
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256 For Roundup, all items have four properties that are not customizable:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
257
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
258 1. a *date* property named **creation**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 2. a *link* property named **creator**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 3. a *date* property named **activity**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 These properties represent the date of the creation of the item, who
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 created it, and when the last change was made.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 Further, all *issue* items have an additional four properties:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267 1. a *string* property named **title**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 2. a *multilink* property named **nosy**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 3. a *multilink* property named **messages**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270 4. a *multilink* property named **files**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
271 5. a *multilink* property named **superseder**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273 The **title** property is a short one-line description of the item.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
274 The detailed description can go in the first e-mail message of the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275 item's messages spool.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
277 The **nosy** property contains a list of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 the people who are interested in an item. This
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 mechanism is explained in the section on `Submission and Discussion`_.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 Each message added to the item goes in the **messages** spool - any
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 attached files go in the **files** spool.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284 The **superseder** property is used to
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 support the splitting, joining, or replacing of items.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286 When several items need to be
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287 joined into a single item, all the old items
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288 link to the new item in their **superseder**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
289 property.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290 When an item needs to be split apart, the item
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291 references all the new items in its **superseder**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 propety.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293 We can easily list all active items just by checking
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 for an empty **superseder** property, and trace
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
295 the path of an item's origins by querying the hyperdatabase
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 for links.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298 Users of the system are also represented by items in the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
299 hyperdatabase, containing properties
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
300 like the user's e-mail address, login name, and password.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
301
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
302 The Default Schema
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
303 ------------------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
304
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
305 It is hoped that the hyperdatabase together with the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
306 specializations mentioned above for Roundup will be
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
307 applicable in a variety of situations
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
308 (in accordance with our guiding principle of *generality*).
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
309
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
310 To address the problem at hand, we need
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
311 a specific schema for items applied particularly to software development.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
312 Again, we are trying to keep the schema simple: too many
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
313 options make it tougher for someone to make a good choice::
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
314
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
315 # IssueClass automatically gets these properties:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
316 # title = String()
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
317 # messages = Multilink("msg")
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
318 # files = Multilink("file")
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
319 # nosy = Multilink("user")
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
320 # superseder = Multilink("issue")
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
321 # (it also gets the Class properties creation, activity and creator)
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
322 issue = IssueClass(db, "issue",
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
323 assignedto=Link("user"), keyword=Multilink("keyword"),
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
324 priority=Link("priority"), status=Link("status"))
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
325
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
326 The **assignedto** property assigns
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
327 responsibility for an item to a person or a list of people.
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
328 The **keyword** property places the
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
329 item in an arbitrary number of relevant keyword sets (see
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
330 the section on `Browsing and Searching`_).
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
331
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
332 The **prority** and **status** values are initially:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
333
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
334 =========== =====================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
335 Priority Description
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
336 =========== =====================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
337 "critical" panic: work is stopped!
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
338 "urgent" important, but not deadly
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
339 "bug" lost work or incorrect results
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
340 "feature" want missing functionality
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
341 "wish" avoidable bugs, missing conveniences
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342 =========== =====================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
343
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
344 ============= =====================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
345 Status Description
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
346 ============= =====================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
347 "unread" submitted but no action yet
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
348 "deferred" intentionally set aside
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
349 "chatting" under review or seeking clarification
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
350 "need-eg" need a reproducible example of a bug
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
351 "in-progress" understood; development in progress
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
352 "testing" we think it's done; others, please test
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
353 "done-cbb" okay for now, but could be better
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
354 "resolved" fix has been released
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
355 ============= =====================================
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
356
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
357 As previously mentioned, each item gets an activity log.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
358 Whenever a property on an item is changed, the log
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359 records the time of the change, the user making the change,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
360 and the old and new values of the property. This permits
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
361 the later gathering of statistics (for example, the average time
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362 from submission to resolution).
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
364 We do not specify or enforce a state transition graph,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
365 since making the system rigid in that fashion is probably more
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 trouble than it's worth.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
367 Experience has shown that there are probably
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
368 two convenient automatic state transitions:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
369
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370 1. from **unread** to **chatting** when e-mail is written about an item
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
371 2. from **testing** to **resolved** when a new release of the software is made
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
372
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373 Beyond these, in accordance with our principle of *generality*,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
374 we allow access to the hyperdatabase
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 API so that scripts can automate transitions themselves or
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
376 be triggered by changes in the database.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
378
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
379 User Interface
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
380 ==============
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
381
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
382 Roundup provides its services through two main interfaces:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
383 e-mail and the Web.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
384 This division is chosen to optimize the most common tasks.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
385
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
386 E-mail is best suited for
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
387 the submission of new items since most people are most comfortable
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
388 with composing long messages in their own favourite e-mail client.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
389 E-mail also permits them to mention URLs or attach files relevant
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
390 to their submission. Indeed, in many cases people are already
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
391 used to making requests by sending e-mail to a mailing list
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
392 of people; they can do exactly the same thing to use Roundup
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
393 without even thinking about it.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
394 Similarly, people are already
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
395 familiar with holding discussions in e-mail, and plenty of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
396 valuable usage conventions and software tools already exist for that medium.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
397
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
398 The Web, on the other hand, is best suited for summarizing
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
399 and seeking information, because it can present an interactive
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
400 overview of items. Since the Web has forms, it's also
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
401 the best place to edit items.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
402
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
403
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
404 Submission and Discussion
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
405 -------------------------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
406
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
407 The system needs an address for receiving mail
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
408 and an address that forwards mail to all participants.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
409 Each item has its own list
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410 of interested parties, known as its *nosy list*.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
411 Here's how nosy lists work:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
413 1. New items are always submitted by sending an e-mail message
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
414 to Roundup. The "Subject:" field becomes the description
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
415 of the new item.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
416 The message is saved in the mail spool of the new item,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
417 and copied to the list of all participants
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
418 so everyone knows that a new item has been added.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
419 The new item's nosy list initially contains the submitter.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
420
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
421 2. All e-mail messages sent by Roundup have their "Reply-To:"
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
422 field set to Roundup's address, and have the item's
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
423 number in the "Subject:" field. Thus, any replies to the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
424 initial announcement and subsequent threads are all received
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
425 by Roundup. Roundup notes the item number in the "Subject:"
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
426 field of each incoming message and appends the message
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
427 to the appropriate spool.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
428
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
429 3. Any incoming e-mail tagged with an item number is copied
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
430 to all the people on the item's nosy list,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
431 and any users found in the "From:", "To:", or "Cc:" fields
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
432 are automatically added to the nosy list. Whenever a user
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
433 edits an item's properties in the Web interface, they are
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
434 also added to the nosy list.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
435
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
436 The effect is like each item having its own little mailing list,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
437 except that no one ever has to worry about subscribing to
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
438 anything. Indicating interest in an issue is sufficient, and if you
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
439 want to bring someone new into the conversation, all you need to do
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
440 is "Cc:" a message to them. It turns out that no one ever has to worry
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
441 about unsubscribing, either: the nosy lists are so specific in scope
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
442 that the conversation tends to die down by itself when the issue is
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
443 resolved or people no longer find it sufficiently important.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
444
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
445 Each nosy list is like an asynchronous chat room,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
446 lasting only a short time (typically five or ten messages)
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
447 and involving a small group of people. However, that
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448 group is the *right* group of people:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449 only those who express interest in an item in some way
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 ever end up on the list, so no one gets spammed with mail they
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
451 don't care about, and no one who *wants*
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
452 to see mail about a particular item needs to be left
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
453 out, for they can easily join in, and just as easily
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
454 look at the mail spool on an item to catch up on any
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455 messages they might have missed.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
456
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
457 We can take this a step further and
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
458 permit users to monitor particular keywords or classifications of items
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459 by allowing other kinds of items to also have their own nosy lists.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 For example, a manager could be on the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461 nosy list of the priority value item for "critical", or a
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
462 developer could be on the nosy list of the keyword value item for "security".
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
463 The recipients are then determined by the union of the nosy lists on the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464 item and all the items it links to.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
465
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
466 Using many small, specific mailing lists results
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 in much more effective communication than one big list.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
468 Taking away the effort of subscribing and unsubscribing
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
469 gives these lists the "feel" of being cheap and
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
470 disposable.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
471
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
472 The transparent capture of the mail spool attached to each
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
473 issue also yields a nice knowledge repository over time.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
474
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
475
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
476 Editing
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
477 -------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
478
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
479 Since Roundup is intended to support arbitrary user-defined
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
480 schema for item properties, the editing interface must be
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
481 automatically generated from the schema. The configuration for
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
482 Roundup will include a template describing how to lay out the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
483 properties to present a UI for inspecting and editing items.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
484 For example::
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
485
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
486 <tr>
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
487 <th class="required">Priority</th>
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
488 <td tal:content="structure context/priority/menu">priority</td>
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
489 <th>Status</th>
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
490 <td tal:content="structure context/status/menu">status</td>
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
491 </tr>
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
492
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
493 To display the editing form for an item, Roundup inserts
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
494 an HTML form widget where it encounters an expression like
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
495 ``tal:content="structure context/priority/menu"``.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
496 Each type has its own appropriate editing widget:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
497
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
498 - *string* and *number* properties appear as text fields
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
499 - *boolean* properties appear as a yes/no selection
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
500 - *date* and *interval* properties appear as text fields
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
501 - *link* properties appear as selection lists
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
502 - *multilink* properties appear as multiple-selection lists
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503 or text fields with pop-up widgets for larger selections.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 We foresee the use of custom date fields for things like deadlines,
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
506 so input fields for *date* properties support a
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
507 simple way of specifying relative dates (such as "3w" for
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
508 "three weeks from now").
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
509
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
510 The **superseder** property is a special case:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
511 although it is more efficient to store a **superseder**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
512 property in the superseded item, it makes more sense to provide
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
513 a "supersedes" edit field on the superseding item. We use
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
514 a special widget on items for this purpose (a text field containing
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
515 a comma-separated list of items). Links in the **superseder** property
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
516 appear on both the superseding and superseded items to
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
517 facilitate navigating an item's pedigree.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
518
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
519 After the editing widgets, the item inspection page shows
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
520 a "note" text box and then a display of the messages in the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
521 discussion spool. This field
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
522 lets you enter a note explaining your change when you edit the
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
523 item, and the note is included in the notification message that
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
524 goes out to tell the interested parties on the nosy list of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
525 your edits.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
526
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
527 Browsing and Searching
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
528 ----------------------
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
529
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
530 The ideal we would like to achieve is to make searching as
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
531 much like browsing as possible: the user simply clicks about
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
532 on things that seem interesting, and the information narrows
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
533 down comfortably until the goal is in sight. This is preferable
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
534 to trying to digest a screen filled with widgets and buttons
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
535 or entering a search expression in some arcane algebraic syntax.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
536
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
537 While a one-shot search may be appropriate when you're
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
538 looking for a single item and you know exactly what you want, it's
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
539 not very helpful when you want an overview of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
540 things ("Gee, there are a lot more high-priority items than
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
541 there were last week!") or trying to do comparisons ("I have
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
542 some time today, so who is busiest and could most use some help?")
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
543
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
544 The browsing interface presents filtering
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
545 functionality for each of the properties in the schema. As with
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
546 editing, the interface is generated from a template
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
547 describing how to lay out the properties.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
548 Each type of property has its own appropriate filtering widget:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
550 - *string* properties appear as text fields supporting
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
551 case-insensitive substring match
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
552 - *date* properties appear as a text field which accepts a date
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 3904
diff changeset
553 range with start, end or both. Multiple date ranges can be specified
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 3904
diff changeset
554 separated by a comma. An empty date can be searched for by specifying
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 3904
diff changeset
555 '-' instead of a date range
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
556 - *link* properties appear as a group of selectable options
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
557 (the filter selects the *union* of the sets of items
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
558 associated with the active options)
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
559 - *multilink* properties appear as a group of selectable options
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
560 (the filter selects the *intersection* of the sets of items
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
561 associated with the active options)
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
562
3904
91008ec8f9a0 retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1654
diff changeset
563 For a *multilink* property like **keyword**,
1654
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
564 one possibility is to show, as hyperlinks, the keywords whose
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
565 sets have non-empty intersections with the currently displayed set of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
566 items. Sorting the keywords by popularity seems
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
567 reasonable. Clicking on a keyword then narrows both the list of items
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
568 and the list of keywords. This gives some of the feel of walking
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
569 around a directory tree -- but without the restriction of having
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
570 to select keywords in a particular hierarchical order, and without
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
571 the need to travel all the way to the leaves of the tree before
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
572 any items are visible.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
574 Below the filtering form is a listing of items, with their
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
575 properties displayed in a table. Rows in the table are
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
576 generated from a template, as with the editing interface.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
577 This listing is the central overview of the system, and it
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
578 should aim to maximize the density of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
579 useful information in accordance with our guiding principle of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
580 *efficiency*. Colour may be used to indicate
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
581 the status of each item to help the eye sift through the index quickly.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
582
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
583 Roundup sorts items
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
584 in groups by priority, and then within groups by the date
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 of last activity. This reveals at a glance where discussion is
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 most active, and provides an easy way for anyone to move an issue
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587 up in the list.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 The page produced by a given set of browsing options constitutes
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590 an *index*. The options should all be part of the query
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 parameters in the URL so that views may be bookmarked. An index
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
592 specifies:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
594 - search strings for string properties
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
595 - date ranges for date properties
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
596 - acceptable values for choice properties
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
597 - required values for reference properties
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
598 - a sorting key
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
599 - a grouping key
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
600 - a list of properties for which to display filtering widgets
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
601
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
602 Our default index is:
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
603
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
604 - all **status** values except "resolved"
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
605 - show **priority** and **fixer**
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
606 - grouping by **priority** in sections
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
607 - sorting by decreasing **activity** date
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
608
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 The starting URL for Roundup immediately presents the listing of
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
610 items generated by this default index, with no preceding query screen.
284c26c1ef19 aargh, b2 was b0rken
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
611

Roundup Issue Tracker: http://roundup-tracker.org/