]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/issues.itexi
Compile fix.
[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 setup::
11 * Bug Squad checklists::
12 * Issue classification::
13 * Adding issues to the tracker::
14 * Summary of project status::
15 * Finding the cause of a regression::
16 @end menu
17
18
19 @node Introduction to issues
20 @section Introduction to issues
21
22 @warning{Unless otherwise specified, all the tasks in this chapter
23 are @qq{simple} tasks: they can be done by a normal user with
24 nothing more than a web browser, email, and lilypond.}
25
26 @qq{Issues} isn't just a politically-correct term for @qq{bug}.
27 We use the same tracker for feature requests and code TODOs, so
28 the term @qq{bug} wouldn't be accurate.  Despite the difference
29 between @qq{issue} and @qq{bug}, we call our team of contributors
30 who organize issues the @emph{Bug Squad}.
31
32 The Bug Squad is mainly composed of non-programmers -- their job
33 is to @emph{organize} issues, not solve them.  Their duties
34 include removing false bug reports, ensuring that any real bug
35 report contains enough information for developers, and checking
36 that a developer's fix actually resolves the problem.
37
38 New volunteers for the Bug Squad should contact the
39 @ref{Meisters, Bug Meister}.
40
41
42 @node Bug Squad setup
43 @section Bug Squad setup
44
45 We highly recommend that you configure your email to use effective
46 sorting; this can reduce your workload @emph{immensely}.  The
47 email folders names were chosen specifically to make them work if
48 you sort your folders alphabetically.
49
50 @enumerate
51
52 @item
53 Skim through every section of this chapter, @ref{Issues}.  Read in
54 detail any sections called @qq{Bug Squad...}, or any page linked
55 from @ref{Bug Squad checklists}.
56
57 @item
58 If you do not have one already, create a gmail account and send
59 the email address to the @ref{Meisters, Bug Meister}.
60
61 @item
62 Subscribe your gmail account to @code{bug-lilypond}.
63
64 @item
65 Configure your google code account:
66
67 @enumerate
68
69 @item
70 Sign in to google code by clicking in the top-right corner of:
71
72 @example
73 @uref{http://code.google.com/p/lilypond/issues/list}
74 @end example
75
76 @item
77 Go to your @qq{Profile}, and select @qq{Settings}.
78
79 @item
80 Scroll down to @qq{Issue change notification}, and make sure that
81 you have @emph{selected} @qq{If I starred the issue}.
82
83 @end enumerate
84
85 @item
86 Configure your email client:
87
88 @enumerate
89
90 @item
91 Any email sent with your gmail address in the @code{To:} or
92 @code{CC:} fields should go to a @code{bug-answers} folder.
93
94 When setting up your filtering rules, be aware that Google Code
95 might use different versions of your email address, such as ones
96 ending in @code{googlemail.com} or @code{gmail.com}.
97
98 @item
99 Any other email either from, or CC'd to,
100
101 @example
102 lilypond@@googlecode.com
103 @end example
104
105 @noindent
106 should go into a separate @code{bug-ignore} folder.  Alternately,
107 you may automatically delete these emails.
108
109 You will @strong{not read} these emails as part of your Bug Squad
110 duties.  If you are curious, go ahead and read them later, but it
111 does @strong{not} count as Bug Squad work.
112
113 @item
114 Any other email sent to (or CC'd to):
115
116 @example
117 bug-lilypond
118 @end example
119
120 @noindent
121 should go into a separate @code{bug-current} folder.
122
123 @end enumerate
124
125 @end enumerate
126
127
128 @node Bug Squad checklists
129 @section Bug Squad checklists
130
131 When you do Bug Squad work, start at the top of this page and work
132 your way down.  Stop when you've done 15 minutes.
133
134 Please use the email sorting described in @ref{Bug Squad setup}.
135 This means that (as Bug Squad members) you will only ever respond
136 to emails sent or CC'd to the @code{bug-lilypond} mailing list.
137
138
139 @subsubheading Emails to you personally
140
141 You are not expected to work on Bug Squad matters outside of your
142 15 minutes, but sometimes a confused user will send a bug report
143 (or an update to a report) to you personally.  If that happens,
144 please forward such emails to the @code{bug-lilypond} list so that
145 the currently-active Bug Squad member(s) can handle the message.
146
147
148 @subsubheading Daily schedule
149
150 @example
151 Sunday: Valentin
152 Monday: Dmytro
153 Tuesday: James Bailey
154 Wednesday: Ralph
155 Thursday: Phil Holmes
156 Friday: Urs Liska, Patrick
157 Saturday: Kieren
158 @end example
159
160
161 @subsubheading Emails to @code{bug-answers}
162
163 Some of these emails will be comments on issues that you added to
164 the tracker.
165
166 @itemize
167 If they are asking for more information, give the additional
168 information.
169
170 @item
171 If the email says that the issue was classified in some other
172 manner, read the rationale given and take that into account for
173 the next issue you add.
174
175 @item
176 Otherwise, move them to your @code{bug-ignore} folder.
177
178 @end itemize
179
180 Some of these emails will be discussions about Bug Squad work;
181 read those.
182
183
184 @subsubheading Emails to @code{bug-current}
185
186 Dealing with these emails is your main task.  Your job is to get
187 rid of these emails in the first method which is applicable:
188
189 @enumerate
190 @item
191 If the email has already been handled by a Bug Squad member (i.e.
192 check to see who else has replied to it), delete it.
193
194 @item
195 If the email is a question about how to use LilyPond, reply with
196 this response:
197
198 @example
199 For questions about how to use LilyPond, please read our
200 documentation available from:
201   @uref{http://lilypond.org/website/manuals.html}
202 or ask the lilypond-user mailing list.
203 @end example
204
205 @item
206 If a bug report is not in the form of a Tiny example, direct the
207 user to resubmit the report with this response:
208
209 @example
210 I'm sorry, but due to our limited resources for handling bugs, we
211 can only accept reports in the form of Tiny examples.  Please see
212 step 2 in our bug reporting guidelines:
213   @uref{http://lilypond.org/website/bug-reports.html}
214 @end example
215
216
217 @item
218 If anything is unclear, ask the user for more information.
219
220 How does the graphical output differ from what the user expected?
221 What version of lilypond was used (if not given) and operating
222 system (if this is a suspected cause of the problem)?  In short,
223 if you cannot understand what the problem is, ask the user to
224 explain more.  It is the user's responsibility to explain the
225 problem, not your responsibility to understand it.
226
227 @item
228 If the behavior is expected, the user should be told to read the
229 documentation:
230
231 @example
232 I believe that this is the expected behaviour -- please read our
233 documentation about this topic.  If you think that it really is a
234 mistake, please explain in more detail.  If you think that the
235 docs are unclear, please suggest an improvement as described by
236 @qq{Simple tasks -- Documentation} on:
237   @uref{http://lilypond.org/website/help-us.html}
238 @end example
239
240 @item
241 If the issue already exists in the tracker, send an email to that
242 effect:
243
244 @example
245 This issue has already been reported; you can follow the
246 discussion and be notified about fixes here:
247 @end example
248
249 @noindent
250 (copy+paste the google code issue URL)
251
252 @item
253 Accept the report as described in
254 @ref{Adding issues to the tracker}.
255
256 @end enumerate
257
258 All emails should be CC'd to the @code{bug-lilypond} list so that
259 other Bug Squad members know that you have processed the email.
260
261 @warning{There is no option for @qq{ignore the bug report} -- if
262 you cannot find a reason to reject the report, you must accept
263 it.}
264
265
266 @ignore
267 @c Try omitting this from Bug Squad duties
268
269 @subheading Updates / discussion about issues
270
271 We try to keep discussions about issues on the tracker, but
272 sometimes it spills over onto email.  If discussion has ended with
273 no patch / resolution and at least @strong{3 days} have passed,
274 then either:
275
276 @itemize
277
278 @item
279 Summarize the recent discussion on the tracker, and add a link to
280 the original discussion.
281
282 @item
283 Add the comment @qq{there was some technical discussion which I
284 could not understand}, and include a link to the original
285 discussion.
286
287 We do not expect Bug Squad members to be programmers, or even to
288 be moderately-skilled users.  Your job is to keep track of issue
289 reports; it is @emph{perfectly acceptable} to not understand
290 discussions between advanced users and/or developers.
291
292 @end itemize
293 @end ignore
294
295
296 @subheading Regular maintenance
297
298 After @strong{every release} (both stable and unstable):
299
300 @itemize
301
302 @item
303 Regression test comparison: if anything has changed suspiciously,
304 ask if it was deliberate.  The official comparison is online, at:
305
306 @c NOTE: leave this here.  In this case, it's worth duplicating
307 @c       the link.  -gp
308 @example
309 @uref{http://lilypond.org/test/}
310 @end example
311
312 More information is available from in
313 @ref{Precompiled regression tests}.
314
315
316 @item
317 Issues to verify: try to reproduce the bug with the latest
318 version; if you cannot reproduce the bug, mark the item
319 @qq{Verified} (i.e. @qq{the fix has been verified to work}).
320
321 @example
322 @uref{http://code.google.com/p/lilypond/issues/list?can=7}
323 @end example
324
325 A few (approximately 10%) of these fixed issues relate to the
326 build system or fundamental architecture changes; there is no way
327 for you to verify these.  Leave those issues alone; somebody else
328 will handle them.
329
330 @end itemize
331
332
333 @ignore
334 @c try omitting from daily tasks for now. -gp
335
336 Once every @strong{two weeks} or so:
337
338 @itemize
339
340 @item
341 Check for any incorrectly-classified items in the tracker.  This
342 generally just means looking at the grid to see any items without
343 a Type or Priority.
344
345 @item
346 Check for any items with @code{label:patch}.  If it's been more
347 than a week since the last action on the issue, send an email to
348 -devel to remind them about it.  If the patch was withdrawn for
349 more work, then remove the @code{patch} label.
350
351 @example
352 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch}
353 @end example
354
355 @end itemize
356
357
358 @subheading Irregular maintenance
359
360 @warning{These tasks are a lot of work; gathering more volunteers
361 to help is definitely recommended.  However, the Bug Squad should
362 handle the organization and training of new volunteers.}
363
364 Once every year or two:
365
366 @itemize
367
368 @item
369 Checking all regtests: although we have a system for checking the
370 regtests between two versions, occasionally a bug will slip
371 through the cracks.  It is therefore good to manually examine all
372 the regtests (compare the images to the text description).  More
373 information is available from in @ref{Regression tests}.
374
375
376 @item
377 Checking all issues: we try to mark each Issue @q{fixed} when we
378 fix it, but occasionally one or two issues will slip through the
379 cracks.  It is therefore good to check all Issues.  If you see the
380 same (broken) output as the initial report, then simply post a
381 @qq{Problem still exists in 2.x.y} message to the issue.
382
383 @end itemize
384
385 @end ignore
386
387
388 @node Issue classification
389 @section Issue classification
390
391 The Bug Squad should classify issues according to the guidelines
392 given by developers.  Every issue should have a Status, Type, and
393 Priority; the other fields are optional.
394
395 @subheading Status (mandatory)
396
397 Open issues:
398
399 @itemize
400
401 @item
402 New: the item was added by a non-member, despite numerous warnings
403 not to do this.  Should be reviewed by a member of the Bug Squad.
404
405 @item
406 Accepted: the Bug Squad added it, or reviewed the item.
407
408 @item
409 Started: a contributor is working on a fix.  Owner should change
410 to be this contributor.
411
412 @end itemize
413
414
415 Closed issues:
416
417 @itemize
418
419 @item
420 Invalid: issue should not have been added in the current state.
421
422 @item
423 Duplicate: issue already exists in the tracker.
424
425 @item
426 Fixed: a contributor claims to have fixed the bug.  The Bug
427 Squad should check the fix with the next official binary release
428 (not by compiling the source from git).  Owner should be set to
429 that contributor.
430
431 @item
432 Verified: Bug Squad has confirmed that the issue is closed.  This
433 means that nobody should ever need look at the report again -- if
434 there is any information in the issue that should be kept, open a
435 new issue for that info.
436
437 @end itemize
438
439
440 @subheading Owner (optional)
441
442 Newly-added issues should have @emph{no owner}.  When a
443 contributor indicates that he has Started or Fixed an item, he
444 should become the owner.
445
446
447 @subheading Type (mandatory)
448
449 The issue's Type should be the first relevant item in this list.
450
451 @itemize
452
453 @item
454 Type-Collision: overlapping notation.
455
456 @item
457 Type-Defect: a problem in the core program.  (the @code{lilypond}
458 binary, scm files, fonts, etc).
459
460 @item
461 Type-Documentation: inaccurate, missing, confusing, or desired
462 additional info.  Must be fixable by editing a texinfo, ly, or scm
463 file.
464
465 @item
466 Type-Build: problem or desired features in the build system.  This
467 includes the makefiles, stepmake, python scripts, and GUB.
468
469 @item
470 Type-Scripts: problem or desired feature in the non-build-system
471 scripts.  Mostly used for convert-ly, lilypond-book, etc.
472 @item
473 Type-Enhancement: a feature request for the core program.  The
474 distinction between enhancement and defect isn't extremely clear;
475 when in doubt, mark it as enhancement.
476
477 @item
478 Type-Other: anything else.
479
480 @end itemize
481
482
483 @subheading Priority (mandatory)
484
485 Currently, only Critical items will block a stable release.
486
487 @itemize
488
489 @item
490 Priority-Critical: lilypond segfaults, or a regression occurred
491 within the last two stable versions.  (i.e. when developing 2.13,
492 any regression against 2.12 or 2.10 counts)
493
494 @item
495 Priority-High: highly embarrassing items, and any regression
496 against a version earlier than two stable versions (i.e. when
497 developing 2.13, any regression against 2.8 or earlier).  This
498 level is also used for issues which produce no output and fail to
499 give the user a clue about what's wrong.
500
501 @item
502 Priority-Medium: normal priority.
503
504 @item
505 Priority-Low: less important than normal.
506
507 @item
508 Priority-Postponed: no fix planned.  Generally used for things
509 like Ancient notation, which nobody wants to touch.
510
511 @end itemize
512
513 The difference between Priority-Medium and Priority-Low is not
514 well-defined, both in this policy and in practice.  The only
515 answer we can give at the moment is @qq{look at existing items in
516 of the same type, and try to guess whether the priority is closer
517 to the Medium items or Low items}.  We're aware of the ambiguity,
518 and won't complain if somebody picks a @q{wrong} value for
519 Medium/Low.
520
521
522 @subheading Opsys (optional)
523
524 Issues that only affect specific operating systems.
525
526
527 @subheading Other items (optional)
528
529 Other labels:
530
531 @itemize
532
533 @item
534 Regression: it used to @strong{deliberately} work in an earlier
535 stable release.  If the earlier output was accidental (i.e. we
536 didn't try to stop a collision, but it just so happened that two
537 grobs didn't collide), then breaking it does not count as a
538 regression.
539
540 @item
541 Patch: a patch to fix an issue is attached.
542
543 @item
544 Frog: the fix is believed to be suitable for a new contributor
545 (does not require a great deal of knowledge about LilyPond).  The
546 issue should also have an estimated time in a comment.
547
548 @item
549 Maintainability: hinders development of LilyPond.  For example,
550 improvements to the build system, or @qq{helper} python scripts.
551
552 @item
553 Bounty: somebody is willing to pay for the fix.  Only add this tag
554 if somebody has offered an exact figure in US dollars or euros.
555
556 @item
557 Warning: graphical output is fine, but lilypond prints a
558 false/misleading warning message.  Alternately, a warning should
559 be printed (such as a bar line error), but was not.  Also applies
560 to warnings when compiling the source code or generating
561 documentation.
562
563 @item
564 Security: might potentially be used.
565
566 @item
567 Performance: might potentially be used.
568
569 @end itemize
570
571 If you particularly want to add an label not in the list, go
572 ahead, but this is not recommended.
573
574
575 @node Adding issues to the tracker
576 @section Adding issues to the tracker
577
578 @warning{This should only be done by the Bug Squad or experienced
579 developers.  Normal users should not do this; instead, they should
580 follow the guidelines for @rweb{Bug reports}.}
581
582 In order to assign labels to issues, Bug Squad members should log
583 in to their google account before adding an item.
584
585 @subsubheading Normal issues
586
587 @enumerate
588
589 @item
590 Check if the issue falls into any previous category given on the
591 relevant checklists in @ref{Bug Squad checklists}.  If in doubt,
592 add a new issue for a report.  We would prefer to have some
593 incorrectly-added issues rather than lose information that should
594 have been added.
595
596 @item
597 Add the issue and classify it according to the guidelines in
598 @ref{Issue classification}.  In particular, the item should have
599 @code{Status}, @code{Type-}, and @code{Priority-} labels.
600
601 Include output with the first applicable method:
602
603 @itemize
604
605 @item
606 If the issue has a notation example which fits in one system,
607 generate a small @file{bug@/.preview@/.png} file with:
608
609 @example
610 lilypond -dpreview bug.ly
611 @end example
612
613 @item
614 If the issue has an example which requires more than one system
615 (i.e. a spacing bug), generate a @file{bug@/.png} file with:
616
617 @example
618 lilypond --png bug.ly
619 @end example
620
621 @item
622 If the issue requires multi-page output, then generate a
623 @file{bug@/.pdf} file with the normal:
624
625 @example
626 lilypond --png bug.ly
627 @end example
628
629 @end itemize
630
631 @item
632 After adding the issue, please send a response email to the same
633 group(s) that the initial patch was sent to.  If the initial email
634 was sent to multiple mailing lists (such as both @code{user} and
635 @code{bugs}), then reply to all those mailing lists as well.  The
636 email should contain a link to the issue you just added.
637
638 @end enumerate
639
640
641 @subsubheading Patch reminders
642
643 @warning{This is not a Bug Squad responsibility; we have a
644 separate person handling this task.}
645
646 There is a special category of issues: reminders of an existing
647 patch.  These should be added if a patch has been sent to a
648 lilypond mailing list (generally @code{lilypond-devel}, but they
649 sometimes appear on @code{bug-lilypond} as well) and has had no
650 discussion for at least @strong{3 days}.  Do not add issues for
651 patches under active discussion.
652
653 Before adding a patch-reminder issue, do a quick check to see if
654 it was pushed without sending any email.  This can be checked for
655 searching for relevant terms (from the patch subject or commit
656 message) on the webgit page:
657
658 @example
659 @uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git}
660 @end example
661
662 After adding the issue, please send a response email to the same
663 group(s) that the initial patch was sent to.  If the initial email
664 was sent to multiple mailing lists (such as both @code{bugs} and
665 @code{devel}), then reply to all those mailing lists as well.  The
666 email should contain a link to the issue you just added.
667
668
669
670 @node Summary of project status
671 @section Summary of project status
672
673 The best overview of our current status is given by the grid view:
674
675 @example
676 @uref{http://code.google.com/p/lilypond/issues/list?mode=grid&y=Priority&x=Type&cells=ids}
677 @end example
678
679 Also of interest might be the issues hindering future development:
680
681 @example
682 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Maintainability&mode=grid&y=Priority&x=Type&cells=ids}
683 @end example
684
685 Finally, issues tagged with @code{Frog} indicates a task suitable
686 for a relatively new contributor.  The time given is a quick
687 (inaccurate) estimate of the time required for somebody who is
688 familiar with material in this manual, but does not know anything
689 else about LilyPond development.
690
691 @example
692 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Frog&mode=grid&y=Priority&x=Type&cells=ids}
693 @end example
694
695
696 @node Finding the cause of a regression
697 @section Finding the cause of a regression
698
699 @warning{This is not a @qq{simple} task; it requires a fair amount
700 of technical knowledge.}
701
702 Git has special functionality to help tracking down the exact
703 commit which causes a problem.  See the git manual page for
704 @code{git bisect}.  This is a job that non-programmers can do,
705 although it requires familiarity with git, ability to compile
706 LilyPond, and generally a fair amount of technical knowledge.  An
707 in-depth explanation of this process will not be given here.
708
709 Even if you are not familiar with git or are not able to compile
710 LilyPond you can still help to narrow down the cause of a
711 regression simply by downloading the binary releases of different
712 LilyPond versions and testing them for the regression.  Knowing
713 which version of LilyPond first exhibited the regression is
714 helpful to a developer as it shortens the @code{git bisect}
715 procedure described above.
716
717 Once a problematic commit is identified, the programmers' job is
718 much easier.  In fact, for most regression bugs, the majority of
719 the time is spent simply finding the problematic commit.
720
721 More information is in @ref{Regression tests}.
722