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