]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/issues.itexi
Doc: CG: draft 3 of Issues.
[lilypond.git] / Documentation / contributor / issues.itexi
1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @node Issues
3 @chapter Issues
4
5 This chapter deals with defects, feature requests, and
6 miscellaneous development tasks.
7
8 @menu
9 * Introduction to issues::
10 * Bug Squad checklists::
11 * Issue classification::
12 * Adding issues to the tracker::
13 * Summary of project status::
14 * Finding the cause of a regression::
15 @end menu
16
17
18 @node Introduction to issues
19 @section Introduction to issues
20
21 @warning{Unless otherwise specified, all the tasks in this chapter
22 are @qq{simple} tasks: they can be done by a normal user with
23 nothing more than a web browser, email, and lilypond.}
24
25 @qq{Issues} isn't just a politically-correct term for @qq{bug}.
26 We use the same tracker for feature requests and code TODOs, so
27 the term @qq{bug} wouldn't be accurate.  Despite the difference
28 between @qq{issue} and @qq{bug}, we call our team of contributors
29 who organize issues the @emph{Bug Squad}.
30
31 The Bug Squad is mainly composed of non-programmers -- their job
32 is to @emph{organize} issues, not solve them.  Their duties
33 include removing false bug reports, ensuring that any real bug
34 report contains enough information for developers, and checking
35 that a developer's fix actually resolves the problem.
36
37
38 @node Bug Squad checklists
39 @section Bug Squad checklists
40
41 We highly recommend that you configure your email client to put
42 messages from:
43
44 @example
45 @@googlecode.com
46 @end example
47
48 @noindent
49 into a separate folder than other emails to @code{bug-lilypond}.
50
51
52 @subsubheading New emails to @code{bug-lilypond}
53
54 Every new email to @code{bug-lilypond} should be handled within
55 @strong{24 hours} in the first method which is applicable:
56
57 @enumerate
58
59 @item
60 If the email is a question about how to use LilyPond, direct them
61 politely to @code{lilypond-user}.
62
63 @item
64 If a bug report is not in the form of a Tiny example, direct the
65 user to resubmit the report after reading @rweb{Tiny examples}.
66
67 @item
68 If anything is unclear, ask the user for more information.
69
70 How does the graphical output differ from what the user expected?
71 What version of lilypond was used (if not given) and operating
72 system (if this is a suspected cause of the problem)?  In short,
73 if you cannot understand what the problem is, ask the user to
74 explain more.  It is the user's responsibility to explain the
75 problem, not your reponsibility to understand it.
76
77 @item
78 If the behavior is expected, the user should be told to read the
79 documentation, or asked to clarify how he misread the docs and how
80 the docs could be improved.
81
82 @item
83 If the issue already exists in the tracker, send an email to that
84 effect.
85
86 @item
87 Accept the report as described in
88 @ref{Adding issues to the tracker}.
89
90 @end enumerate
91
92 All emails should be CC'd to the @code{bug-lilypond} list so that
93 other Bug Squad members know that you have processed the email.
94
95 @warning{There is no option for @qq{ignore the bug report} -- if
96 you cannot find a reason to reject the report, you must accept
97 it.}
98
99
100 @subheading Updates / discussion about issues
101
102 We try to keep discussions about issues on the tracker, but
103 sometimes it spills over onto email.  If discussion has ended with
104 no patch / resolution and at least @strong{3 days} have passed,
105 then either:
106
107 @itemize
108
109 @item
110 Summarize the recent discussion on the tracker, and add a link to
111 the original discussion.
112
113 @item
114 Add the comment @qq{there was some technical discussion which I
115 could not understand}, and include a link to the original
116 discussion.
117
118 We do not expect Bug Squad members to be programmers, or even to
119 be moderately-skilled users.  Your job is to keep track of issue
120 reports; it is @emph{perfectly acceptable} to not understand
121 discussions between advanced users and/or developers.
122
123 @end itemize
124
125
126 @subheading Regular maintenance
127
128 After @strong{every release} (both stable and unstable):
129
130 @itemize
131
132 @item
133 Regression test comparison: if anything has changed suspiciously,
134 ask if it was deliberate.  The official comparison is online, at:
135
136 @c NOTE: leave this here.  In this case, it's worth duplicating
137 @c       the link.  -gp
138 @example
139 @uref{http://lilypond.org/test/}
140 @end example
141
142 More information is available from in
143 @ref{Precompiled regression tests}.
144
145 @item
146 Issues to verify: try to reproduce the bug with the latest
147 version; if you cannot reproduce the bug, mark the item
148 @qq{Verified} (i.e. @qq{the fix has been verified to work}).
149
150 @example
151 @uref{http://code.google.com/p/lilypond/issues/list?can=7}
152 @end example
153
154 @end itemize
155
156 Once every @strong{two weeks} or so:
157
158 @itemize
159
160 @item
161 Check for any incorrectly-classified items in the tracker.  This
162 generally just means looking at the grid to see any items without
163 a Type or Priority.
164
165 @item
166 Check for any items with @code{label:patch}.  If it's been more
167 than a week since the last action on the issue, send an email to
168 -devel to remind them about it.  If the patch was withdrawn for
169 more work, then remove the @code{patch} label.
170
171 @example
172 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch}
173 @end example
174
175 @end itemize
176
177 @subheading Irregular maintenance
178
179 @warning{These tasks are a lot of work; gathering more volunteers
180 to help is definitely recommended.  However, the Bug Squad should
181 handle the organization and training of new volunteers.}
182
183 Once every year or two:
184
185 @itemize
186
187 @item
188 Checking all regtests: although we have a system for checking the
189 regtests between two versions, occasionally a bug will slip
190 through the cracks.  It is therefore good to manually examine all
191 the regtests (compare the images to the text description).  More
192 information is available from in @ref{Regression tests}.
193
194
195 @item
196 Checking all issues: we try to mark each Issue @q{fixed} when we
197 fix it, but occasionally one or two issues will slip through the
198 cracks.  It is therefore good to check all Issues. If you see the
199 same (broken) output as the initial report, then simply post a
200 @qq{Problem still exists in 2.x.y} message to the issue.
201
202 @end itemize
203
204
205 @node Issue classification
206 @section Issue classification
207
208 The Bug Squad should classify issues according to the guidelines
209 given by developers.  Every issue should have a Status, Type, and
210 Priority; the other fields are optional.
211
212 @subheading Status (mandatory)
213
214 Open issues:
215
216 @itemize
217
218 @item
219 New: the item was added by a non-member, despite numerous warnings
220 not to do this.  Should be reviewed by a member of the Bug Squad.
221
222 @item
223 Accepted: the Bug Squad added it, or reviewed the item.
224
225 @item
226 Started: a contributor is working on a fix.  Owner should change
227 to be this contributor.
228
229 @end itemize
230
231
232 Closed issues:
233
234 @itemize
235
236 @item
237 Invalid: issue should not have been added in the current state.
238
239 @item
240 Duplicate: issue already exists in the tracker.
241
242 @item
243 Fixed: a contributor claims to have fixed the bug.  The Bug
244 Squad should check the fix with the next official binary release
245 (not by compiling the source from git).  Owner should be set to
246 that contributor.
247
248 @item
249 Verified: Bug Squad has confirmed that the issue is closed.  This
250 means that nobody should ever need look at the report again -- if
251 there is any information in the issue that should be kept, open a
252 new issue for that info.
253
254 @end itemize
255
256
257 @subheading Owner (optional)
258
259 Newly-added issues should have @emph{no owner}.  When a
260 contributor indicates that he has Started or Fixed an item, he
261 should become the owner.
262
263
264 @subheading Type (mandatory)
265
266 The issue's Type should be the first relevant item in this list.
267
268 @itemize
269
270 @item
271 Type-Collision: overlapping notation.
272
273 @item
274 Type-Defect: a problem in the core program.  (the @code{lilypond}
275 binary, scm files, fonts, etc).
276
277 @item
278 Type-Documentation: inaccurate, missing, confusing, or desired
279 additional info.  Must be fixable by editing a texinfo, ly, or scm
280 file.
281
282 @item
283 Type-Build: problem or desired features in the build system.  This
284 includes the makefiles, stepmake, python scripts, and GUB.
285
286 @item
287 Type-Scripts: problem or desired feature in the non-build-system
288 scripts.  Mostly used for convert-ly, lilypond-book, etc.
289 @item
290 Type-Enhancement: a feature request for the core program.  The
291 distinction between enhancement and defect isn't extremely clear;
292 when in doubt, mark it as enhancement.
293
294 @item
295 Type-Other: anything else.
296
297 @end itemize
298
299
300 @subheading Priority (mandatory)
301
302 Currently, only Critical items will block a stable release.
303
304 @itemize
305
306 @item
307 Priority-Critical: lilypond segfaults, or a regression occurred
308 within the last two stable versions.  (i.e. when developing 2.13,
309 any regression against 2.12 or 2.10 counts)
310
311 @item
312 Priority-High: highly embarrassing items, and any regression
313 against a version earlier than two stable versions (i.e. when
314 developing 2.13, any regression against 2.8 or earlier).  This
315 level is also used for issues which produce no output and fail to
316 give the user a clue about what's wrong.
317
318 @item
319 Priority-Medium: normal priority.
320
321 @item
322 Priority-Low: less important than normal.
323
324 @item
325 Priority-Postponed: no fix planned.  Generally used for things
326 like Ancient notation, which nobody wants to touch.
327
328 @end itemize
329
330 The difference between Priority-Medium and Priority-Low is not
331 well-defined, both in this policy and in practice.  The only
332 answer we can give at the moment is @qq{look at existing items in
333 of the same type, and try to guess whether the priority is closer
334 to the Medium items or Low items}.  We're aware of the ambiguity,
335 and won't complain if somebody picks a @q{wrong} value for
336 Medium/Low.
337
338
339 @subheading Opsys (optional)
340
341 Issues that only affect specific operating systems.
342
343
344 @subheading Other items (optional)
345
346 Other labels:
347
348 @itemize
349
350 @item
351 Regression: it used to @strong{deliberately} work in an earlier
352 stable release.  If the earlier output was accidental (i.e. we
353 didn't try to stop a collision, but it just so happened that two
354 grobs didn't collide), then breaking it does not count as a
355 regression.
356
357 @item
358 Patch: a patch to fix an issue is attached.
359
360 @item
361 Frog: the fix is believed to be suitable for a new contributor
362 (does not require a great deal of knowledge about LilyPond).  The
363 issue should also have an estimated time in a comment.
364
365 @item
366 Maintainability: hinders developent of LilyPond.  For example,
367 improvements to the build system, or @qq{helper} python scripts.
368
369 @item
370 Bounty: somebody is willing to pay for the fix.  Only add this tag
371 if somebody has offered an exact figure in US dollars or euros.
372
373 @item
374 Warning: graphical output is fine, but lilypond prints a
375 false/misleading warning message.  Alternately, a warning should
376 be printed (such as a bar line error), but was not.  Also applies
377 to warnings when compiling the source code or generating
378 documentation.
379
380 @item
381 Security: might potentially be used.
382
383 @item
384 Performance: might potentially be used.
385
386 @end itemize
387
388 If you particularly want to add an label not in the list, go
389 ahead, but this is not recommended.
390
391
392 @node Adding issues to the tracker
393 @section Adding issues to the tracker
394
395 @warning{This should only be done by the Bug Squad or experienced
396 developers.  Normal users should not do this; instead, they should
397 follow the guidelines for @rweb{Bug reports}.}
398
399 In order to assign labels to issues, Bug Squad members should log
400 in to their google account before adding an item.
401
402 @subsubheading Normal issues
403
404 @enumerate
405
406 @item
407 Check if the issue falls into any previous category given on the
408 relevant checklists in @ref{Bug Squad checklists}.  If in doubt,
409 add a new issue for a report.  We would prefer to have some
410 incorrectly-added issues rather than lose information that should
411 have been added.
412
413 @item
414 Add the issue and classify it according to the guidelines in
415 @ref{Issue classification}.  In particular, the item should have
416 @code{Status}, @code{Type-}, and @code{Priority-} labels.
417
418 @item
419 After adding the issue, please send a response email to the same
420 group(s) that the initial patch was sent to.  If the initial email
421 was sent to multiple mailing lists (such as both @code{user} and
422 @code{bugs}), then reply to all those mailing lists as well.  The
423 email should contain a link to the issue you just added.
424
425 @end enumerate
426
427
428 @subsubheading Patch reminders
429
430 @warning{This is not a Bug Squad responsibility; we have a
431 separate person handling this task.}
432
433 There is a special category of issues: reminders of an existing
434 patch.  These should be added if a patch has been sent to a
435 lilypond mailing list (generally @code{lilypond-devel}, but they
436 sometimes appear on @code{bug-lilypond} as well) and has had no
437 discussion for at least @strong{3 days}.  Do not add issues for
438 patches under active discussion.
439
440 Before adding a patch-reminder issue, do a quick check to see if
441 it was pushed without sending any email.  This can be checked for
442 searching for relevant terms (from the patch subject or commit
443 message) on the webgit page:
444
445 @example
446 @uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git}
447 @end example
448
449 After adding the issue, please send a response email to the same
450 group(s) that the initial patch was sent to.  If the initial email
451 was sent to multiple mailing lists (such as both @code{bugs} and
452 @code{devel}), then reply to all those mailing lists as well.  The
453 email should contain a link to the issue you just added.
454
455
456
457 @node Summary of project status
458 @section Summary of project status
459
460 The best overview of our current status is given by the grid view:
461
462 @example
463 @uref{http://code.google.com/p/lilypond/issues/list?mode=grid&y=Priority&x=Type&cells=ids}
464 @end example
465
466 Also of interest might be the issues hindering future development:
467
468 @example
469 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Maintainability&mode=grid&y=Priority&x=Type&cells=ids}
470 @end example
471
472 Finally, issues tagged with @code{Frog} indicates a task suitable
473 for a relatively new contributor.  The time given is a quick
474 (inaccurate) estimate of the time required for somebody who is
475 familiar with material in this manual, but does not know anything
476 else about LilyPond development.
477
478 @example
479 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Frog&mode=grid&y=Priority&x=Type&cells=ids}
480 @end example
481
482
483 @node Finding the cause of a regression
484 @section Finding the cause of a regression
485
486 @warning{This is not a @qq{simple} task; it requires a fair amount
487 of technical knowledge.}
488
489 Git has special functionality to help tracking down the exact
490 commit which causes a problem.  See the git manual page for
491 @code{git bisect}.  This is a job that non-programmers can do,
492 although it requires familiarity with git, ability to compile
493 LilyPond, and generally a fair amount of technical knowledge.  An
494 in-depth explanation of this process will not be given here.
495
496 Even if you are not familiar with git or are not able to compile
497 LilyPond you can still help to narrow down the cause of a
498 regression simply by downloading the binary releases of different
499 LilyPond versions and testing them for the regression.  Knowing
500 which version of LilyPond first exhibited the regression is
501 helpful to a developer as it shortens the @code{git bisect}
502 procedure described above.
503
504 Once a problematic commit is identified, the programmers' job is
505 much easier.  In fact, for most regression bugs, the majority of
506 the time is spent simply finding the problematic commit.
507
508 More information is in @ref{Regression tests}.
509