]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/issues.itexi
Doc: CG remove ugly bars at end of lines in doc
[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 * Patch handling::
15 * Summary of project status::
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 Read every section of this chapter, @ref{Issues}.
54
55 @item
56 If you do not have one already, create a gmail account and send
57 the email address to the @ref{Meisters, Bug Meister}.
58
59 @item
60 Subscribe your gmail account to @code{bug-lilypond}.
61
62 @item
63 Configure your google code account:
64
65 @enumerate
66
67 @item
68 Wait until your gmail account is listed in:
69
70 @example
71 @uref{http://code.google.com/p/lilypond/people/list}
72 @end example
73
74 @item
75 Sign in to google code by clicking in the top-right corner of:
76
77 @example
78 @uref{http://code.google.com/p/lilypond/issues/list}
79 @end example
80
81 You cannot log if you have Google Sharing
82 @uref{http://www.googlesharing.net/} enabled.
83
84 @item
85 Go to your @qq{Profile}, and select @qq{Settings}.
86
87 @item
88 Scroll down to @qq{Issue change notification}, and make sure that
89 you have @emph{selected} @qq{If I starred the issue}.
90
91 @end enumerate
92
93 @item
94 Configure your email client:
95
96 @enumerate
97
98 @item
99 Any email sent with your gmail address in the @code{To:} or
100 @code{CC:} fields should go to a @code{bug-answers} folder.
101
102 When setting up your filtering rules, be aware that Google Code
103 might use different versions of your email address, such as ones
104 ending in @code{@@googlemail.com} or @code{@@gmail.com}.
105
106 @item
107 Any other email either from, or CC'd to,
108
109 @example
110 lilypond@@googlecode.com
111 @end example
112
113 @noindent
114 should go into a separate @code{bug-ignore} folder.  Alternately,
115 you may automatically delete these emails.
116
117 You will @strong{not read} these emails as part of your Bug Squad
118 duties.  If you are curious, go ahead and read them later, but it
119 does @strong{not} count as Bug Squad work.
120
121 @item
122 Any other email sent to (or CC'd to):
123
124 @example
125 bug-lilypond
126 @end example
127
128 @noindent
129 should go into a separate @code{bug-current} folder.
130
131 @end enumerate
132
133 @end enumerate
134
135
136 @node Bug Squad checklists
137 @section Bug Squad checklists
138
139 When you do Bug Squad work, start at the top of this page and work
140 your way down.  Stop when you've done 20 minutes.
141
142 Please use the email sorting described in @ref{Bug Squad setup}.
143 This means that (as Bug Squad members) you will only ever respond
144 to emails sent or CC'd to the @code{bug-lilypond} mailing list.
145
146
147 @subsubheading Emails to you personally
148
149 You are not expected to work on Bug Squad matters outside of your
150 20 minutes, but sometimes a confused user will send a bug report
151 (or an update to a report) to you personally.  If that happens,
152 please forward such emails to the @code{bug-lilypond} list so that
153 the currently-active Bug Squad member(s) can handle the message.
154
155
156 @subsubheading Daily schedule
157
158 @example
159 Monday:    Dmytro
160 Tuesday:   Colin
161 Wednesday: Derek
162 Thursday:  Dmytro
163 Friday:    Colin
164 Saturday:  Dmytro
165 Sunday:    Phil
166 @end example
167
168
169 @subsubheading Emails to @code{bug-answers}
170
171 Some of these emails will be comments on issues that you added to
172 the tracker.
173
174 @itemize
175 If they are asking for more information, give the additional
176 information.
177
178 @item
179 If the email says that the issue was classified in some other
180 manner, read the rationale given and take that into account for
181 the next issue you add.
182
183 @item
184 Otherwise, move them to your @code{bug-ignore} folder.
185
186 @end itemize
187
188 Some of these emails will be discussions about Bug Squad work;
189 read those.
190
191
192 @subsubheading Emails to @code{bug-current}
193
194 Dealing with these emails is your main task.  Your job is to get
195 rid of these emails in the first method which is applicable:
196
197 @enumerate
198 @item
199 If the email has already been handled by a Bug Squad member (i.e.
200 check to see who else has replied to it), delete it.
201
202 @item
203 If the email is a question about how to use LilyPond, reply with
204 this response:
205
206 @example
207 For questions about how to use LilyPond, please read our
208 documentation available from:
209   @uref{http://lilypond.org/website/manuals.html}
210 or ask the lilypond-user mailing list.
211 @end example
212
213 @item
214 If the email mentions @qq{the latest git}, or any version number
215 that has not yet been officially released, forward it to
216 @code{lilypond-devel}.
217
218 @item
219 If a bug report is not in the form of a Tiny example, direct the
220 user to resubmit the report with this response:
221
222 @example
223 I'm sorry, but due to our limited resources for handling bugs, we
224 can only accept reports in the form of Tiny examples.  Please see
225 step 2 in our bug reporting guidelines:
226   @uref{http://lilypond.org/website/bug-reports.html}
227 @end example
228
229 @item
230 If anything is unclear, ask the user for more information.
231
232 How does the graphical output differ from what the user expected?
233 What version of lilypond was used (if not given) and operating
234 system (if this is a suspected cause of the problem)?  In short,
235 if you cannot understand what the problem is, ask the user to
236 explain more.  It is the user's responsibility to explain the
237 problem, not your responsibility to understand it.
238
239 @item
240 If the behavior is expected, the user should be told to read the
241 documentation:
242
243 @example
244 I believe that this is the expected behaviour -- please read our
245 documentation about this topic.  If you think that it really is a
246 mistake, please explain in more detail.  If you think that the
247 docs are unclear, please suggest an improvement as described by
248 @qq{Simple tasks -- Documentation} on:
249   @uref{http://lilypond.org/website/help-us.html}
250 @end example
251
252 @item
253 If the issue already exists in the tracker, send an email to that
254 effect:
255
256 @example
257 This issue has already been reported; you can follow the
258 discussion and be notified about fixes here:
259 @end example
260
261 @noindent
262 (copy+paste the google code issue URL)
263
264 @item
265 Accept the report as described in
266 @ref{Adding issues to the tracker}.
267
268 @end enumerate
269
270 All emails should be CC'd to the @code{bug-lilypond} list so that
271 other Bug Squad members know that you have processed the email.
272
273 @warning{There is no option for @qq{ignore the bug report} -- if
274 you cannot find a reason to reject the report, you must accept
275 it.}
276
277
278 @ignore
279 @c Try omitting this from Bug Squad duties
280
281 @subheading Updates / discussion about issues
282
283 We try to keep discussions about issues on the tracker, but
284 sometimes it spills over onto email.  If discussion has ended with
285 no patch / resolution and at least @strong{3 days} have passed,
286 then either:
287
288 @itemize
289
290 @item
291 Summarize the recent discussion on the tracker, and add a link to
292 the original discussion.
293
294 @item
295 Add the comment @qq{there was some technical discussion which I
296 could not understand}, and include a link to the original
297 discussion.
298
299 We do not expect Bug Squad members to be programmers, or even to
300 be moderately-skilled users.  Your job is to keep track of issue
301 reports; it is @emph{perfectly acceptable} to not understand
302 discussions between advanced users and/or developers.
303
304 @end itemize
305 @end ignore
306
307
308 @subheading Regular maintenance
309
310 After @strong{every release} (both stable and unstable):
311
312 @itemize
313
314 @item
315 Regression test comparison: if anything has changed suspiciously,
316 ask if it was deliberate.  The official comparison is online, at:
317
318 @c NOTE: leave this here.  In this case, it's worth duplicating
319 @c       the link.  -gp
320 @example
321 @uref{http://lilypond.org/test/}
322 @end example
323
324 More information is available from in
325 @ref{Precompiled regression tests}.
326
327
328 @item
329 Issues to verify: try to reproduce the bug with the latest
330 official GUB version; if you cannot reproduce the bug, mark the
331 item @qq{Verified} (i.e. @qq{the fix has been verified to work}).
332
333 @example
334 @uref{http://code.google.com/p/lilypond/issues/list?can=7}
335 @end example
336
337 A few (approximately 10%) of these fixed issues relate to the
338 build system or fundamental architecture changes; there is no way
339 for you to verify these.  Leave those issues alone; somebody else
340 will handle them.
341
342 @item
343 Check for any incorrectly-classified items in the tracker.  This
344 generally just means looking at the grid to see any items without
345 a Type or Priority.
346
347 @end itemize
348
349
350 @ignore
351 @c try omitting from daily tasks for now. -gp
352
353 @subheading Irregular maintenance
354
355 @warning{These tasks are a lot of work; gathering more volunteers
356 to help is definitely recommended.  However, the Bug Squad should
357 handle the organization and training of new volunteers.}
358
359 Once every year or two:
360
361 @itemize
362
363 @item
364 Checking all regtests: although we have a system for checking the
365 regtests between two versions, occasionally a bug will slip
366 through the cracks.  It is therefore good to manually examine all
367 the regtests (compare the images to the text description).  More
368 information is available from in @ref{Regression tests}.
369
370
371 @item
372 Checking all issues: we try to mark each Issue @q{fixed} when we
373 fix it, but occasionally one or two issues will slip through the
374 cracks.  It is therefore good to check all Issues.  If you see the
375 same (broken) output as the initial report, then simply post a
376 @qq{Problem still exists in 2.x.y} message to the issue.
377
378 @end itemize
379
380 @end ignore
381
382
383 @node Issue classification
384 @section Issue classification
385
386 The Bug Squad should classify issues according to the guidelines
387 given by developers.  Every issue should have a Status, Type, and
388 Priority; the other fields are optional.
389
390 @subheading Status (mandatory)
391
392 Open issues:
393
394 @itemize
395
396 @item
397 New: the item was added by a non-member, despite numerous warnings
398 not to do this.  Should be reviewed by a member of the Bug Squad.
399
400 @item
401 Accepted: the Bug Squad added it, or reviewed the item.
402
403 @item
404 Started: a contributor is working on a fix.  Owner should change
405 to be this contributor.
406
407 @end itemize
408
409
410 Closed issues:
411
412 @itemize
413
414 @item
415 Invalid: issue should not have been added in the current state.
416
417 @item
418 Duplicate: issue already exists in the tracker.
419
420 @item
421 Fixed: a contributor claims to have fixed the bug.  The Bug
422 Squad should check the fix with the next official binary release
423 (not by compiling the source from git).  Owner should be set to
424 that contributor.
425
426 @item
427 Verified: Bug Squad has confirmed that the issue is closed.  This
428 means that nobody should ever need look at the report again -- if
429 there is any information in the issue that should be kept, open a
430 new issue for that info.
431
432 @end itemize
433
434
435 @subheading Owner (optional)
436
437 Newly-added issues should have @emph{no owner}.  When a
438 contributor indicates that he has Started or Fixed an item, he
439 should become the owner.
440
441
442 @subheading Type (mandatory)
443
444 The issue's Type should be the first relevant item in this list.
445
446 @itemize
447
448 @item
449 Type-Collision: overlapping notation.
450
451 @item
452 Type-Defect: a problem in the core program.  (the @code{lilypond}
453 binary, scm files, fonts, etc).
454
455 @item
456 Type-Documentation: inaccurate, missing, confusing, or desired
457 additional info.  Must be fixable by editing a texinfo, ly, or scm
458 file.
459
460 @item
461 Type-Build: problem or desired features in the build system.  This
462 includes the makefiles, stepmake, python scripts, and GUB.
463
464 @item
465 Type-Scripts: problem or desired feature in the non-build-system
466 scripts.  Mostly used for convert-ly, lilypond-book, etc.
467
468 @item
469 Type-Enhancement: a feature request for the core program.  The
470 distinction between enhancement and defect isn't extremely clear;
471 when in doubt, mark it as enhancement.
472
473 @item
474 Type-Other: anything else.
475
476 @end itemize
477
478
479 @subheading Priority (mandatory)
480
481 Currently, only Critical items will block a stable release.
482
483 @itemize
484
485 @item
486 Priority-Critical: LilyPond segfaults, a regression (see below)
487 against a previous stable version or a regression against a fix
488 developed for this version. This does not apply where the
489 @qq{regression} occurred because a feature was removed
490 deliberately - this is not a bug.
491
492 @item
493 Priority-High: An issue which produces output which does not
494 accurately reflect the input (e.g. where the user would expect
495 an accidental, but none is shown) or which produces aesthetically
496 poor output in a situation which could be expected to crop up
497 frequently in real-world music.  It should not be used where the
498 problem can be avoided with a simple workaround.  It can also
499 be used to flag where new code in a development version is not
500 functioning as it should.  This level is also used for issues
501 which produce no output and fail to give the user a clue about
502 what's wrong.
503
504 @item
505 Priority-Medium: Normal priority - use this as the default.
506
507 @item
508 Priority-Low: A minor problem which produces slightly undesirable
509 output, or which will only occur in contrived examples, or which
510 is very easily worked around.
511
512 @item
513 Priority-Postponed: no fix planned.  Generally used for things
514 which nobody wants to touch.
515
516 @end itemize
517
518 Note that these are initial classifications and can be subject
519 to change by others in the development team.  For example, a
520 regression against an old stable version which hasn't been
521 noticed for a long time and which is unlikely to get fixed could
522 be downgraded from Priority-Critical by one of the programmers.
523
524 @subheading Opsys (optional)
525
526 Issues that only affect specific operating systems.
527
528 @subheading Patch (optional)
529
530 Normal Bug Squad members should not add or modify Patch issues;
531 leave them to the Patch Meister.
532
533 @itemize
534
535 @item
536 Patch-new: the patch has not been checked for @qq{obvious}
537 mistakes.  When in doubt, use this tag.
538
539 @item
540 Patch-review: the patch has no @qq{obvious} mistakes (as checked
541 by the Patch Meister), and is ready for review from main
542 developers.
543
544 Developers with git push ability can use this category, skipping
545 over @code{patch-new}.
546
547 @item
548 Patch-needs_work: a developer has some concerns about the patch.
549 This does not necessarily mean that the patch must be changed; in
550 some cases, the developer's concerns can be resolved simply by
551 discussion the situation or providing notation examples.
552
553 If the patch is updated, the category should be changed to
554 @code{patch-new} (for normal contributors) or @code{patch-review}
555 (for developers who are very confident about their patch).
556
557 @item
558 Patch-abandoned: the author has not responded to review comments
559 for a few months.
560
561 @end itemize
562
563 @subheading Other items (optional)
564
565 Other labels:
566
567 @itemize
568
569 @item
570 Regression: it used to work intentionally in an earlier
571 stable release.  If the earlier output was accidental (i.e. we
572 didn't try to stop a collision, but it just so happened that two
573 grobs didn't collide), then breaking it does not count as a
574 regression.
575
576 To help decide whether the change is a regression, and therefore
577 should be Priority-Critical, please adopt the following process:
578
579 @enumerate
580
581 @item
582 Are you certain the change is OK?  If so, do nothing.
583
584 @item
585 Are you certain that the change is bad?  Add it to the tracker
586 as a Critical issue, regression.
587
588 @item
589 If you're not certain either way, add it to the tracker as a
590 Critical issue, regression but be aware that it may be
591 recategorised or marked invalid.
592
593 @end enumerate
594
595 In particular, anything that breaks a regression test is a
596 regression.
597
598 @item
599 Frog: the fix is believed to be suitable for a new contributor
600 (does not require a great deal of knowledge about LilyPond).  The
601 issue should also have an estimated time in a comment.
602
603 @item
604 Maintainability: hinders development of LilyPond.  For example,
605 improvements to the build system, or @qq{helper} python scripts.
606
607 @item
608 Bounty: somebody is willing to pay for the fix.  Only add this tag
609 if somebody has offered an exact figure in US dollars or euros.
610
611 @item
612 Warning: graphical output is fine, but lilypond prints a
613 false/misleading warning message.  Alternately, a warning should
614 be printed (such as a bar line error), but was not.  Also applies
615 to warnings when compiling the source code or generating
616 documentation.
617
618 @item
619 Security: might potentially be used.
620
621 @item
622 Performance: might potentially be used.
623
624 @end itemize
625
626 If you particularly want to add a label not in the list, go
627 ahead, but this is not recommended.
628
629
630 @node Adding issues to the tracker
631 @section Adding issues to the tracker
632
633 @warning{This should only be done by the Bug Squad or experienced
634 developers.  Normal users should not do this; instead, they should
635 follow the guidelines for @rweb{Bug reports}.}
636
637 In order to assign labels to issues, Bug Squad members should log
638 in to their google account before adding an item.
639
640 @enumerate
641
642 @item
643 Check if the issue falls into any previous category given on the
644 relevant checklists in @ref{Bug Squad checklists}.  If in doubt,
645 add a new issue for a report.  We would prefer to have some
646 incorrectly-added issues rather than lose information that should
647 have been added.
648
649 @item
650 Add the issue and classify it according to the guidelines in
651 @ref{Issue classification}.  In particular, the item should have
652 @code{Status}, @code{Type-}, and @code{Priority-} labels.
653
654 Include output with the first applicable method:
655
656 @itemize
657
658 @item
659 If the issue has a notation example which fits in one system,
660 generate a small @file{bug.preview.png} file with:
661
662 @example
663 lilypond -dpreview bug.ly
664 @end example
665
666 @item
667 If the issue has an example which requires more than one system
668 (i.e. a spacing bug), generate a @file{bug.png} file with:
669
670 @example
671 lilypond --png bug.ly
672 @end example
673
674 @item
675 If the issue requires one or two pages of output, then generate a
676 @file{bug.png} file with the normal:
677
678 @example
679 lilypond --png bug.ly
680 @end example
681
682 @item
683 If the issue cannot be shown with less than three pages, then
684 generate a @file{bug.pdf} file with:
685
686 @example
687 lilypond --pdf bug.ly
688 @end example
689
690 Note that this is likely to be extremely rare; most bugs should fit
691 into the first two categories above.
692
693
694 @end itemize
695
696 @item
697 After adding the issue, please send a response email to the same
698 group(s) that the initial patch was sent to.  If the initial email
699 was sent to multiple mailing lists (such as both @code{user} and
700 @code{bugs}), then reply to all those mailing lists as well.  The
701 email should contain a link to the issue you just added.
702
703 @end enumerate
704
705
706
707 @node Patch handling
708 @section Patch handling
709
710 @warning{This is not a Bug Squad responsibility; we have a
711 separate person handling this task.}
712
713 There is a single Patch Meister, and a number of Patch Helpers
714 (rename this?).  The list of known patches awaiting review is:
715
716 @example
717 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch&sort=patch}
718 @end example
719
720
721 @subheading Helpers: adding patches
722
723 The primary duty is to add patches to the google tracker; we have
724 a bad track record of losing patches in email.  Patches generally
725 come to the @code{lilypond-devel} mailing list, but are sometimes
726 sent to @code{bug-lilypond}, @code{lilypond-users}, or
727 @code{frogs} mailing list instead.
728
729 @itemize
730 @item
731 Unless a patch is clearly in response to an existing issue, add a
732 new issue with the @code{Patch-new} label and a link to the patch
733 (either on the mailing list archives or the codereview url).
734
735 Issue numbers are cheap; losing developers because they got fed up
736 with us losing their hard work is expensive.
737
738 @c if we enter patches immediately, I don't think this is relevant.
739 @ignore
740 @item
741 Before adding a patch-reminder issue, do a quick check to see if
742 it was pushed without sending any email.  This can be checked for
743 searching for relevant terms (from the patch subject or commit
744 message) on the webgit page:
745
746 @example
747 @uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git}
748 @end example
749 @end ignore
750
751 @item
752 If the patch is clearly in response to an existing issue, then
753 update that issue with the @code{Patch-new} label and a link to
754 the patch (either on the mailing list archives or the codereview
755 url).
756
757 @item
758 After adding the issue, please send a response email to the same
759 group(s) that the initial patch was sent to.
760
761 If the initial email was sent to multiple mailing lists (such as
762 both @code{bugs} and @code{devel}), then reply to all those
763 mailing lists as well.  The email should contain a link to the
764 issue you just added.
765
766 @end itemize
767
768 @subheading Helpers: @code{Patch-review} label
769
770 The secondary duty is to do make sure that every issue in the
771 tracker with a @code{Patch-review} label has passed these
772 @qq{obvious} tests:
773
774 @itemize
775 @item
776 Applies automatically to git master.
777
778 It's ok to have offsets, but not conflicts.
779
780 @item
781 Regtest comparison looks ok; no unexpected changes.
782
783 @item
784 Descriptive subject line.
785
786 Avoid subjects like @qq{fixes 123}; instead write @qq{Doc: discuss
787 stacking-dir for BassFigureAlignment (fix 123)}.
788
789 @item
790 Compiles docs from scratch.  Only check this if you have reason to
791 suspect it might not work.
792
793 @item
794 (maybe)
795
796 Check code indentation and style.  This should be easier post-GOP
797 when we have a better-defined code style.
798
799 @end itemize
800
801
802 @subheading Patch Meister
803
804 The Patch Meister will:
805
806 @itemize
807
808 @item
809 send @qq{countdown} emails to
810 @code{lilypond-devel} when patches appear to be ready.
811
812 @item
813 send general requests to review patches, or even nasty requests to
814 review patches.
815
816 @item
817 downgrade patches from @code{Patch-review} to
818 @code{Patch-needs_work} as appropriate.
819
820 @item
821 downgrade patches from @code{Patch-needs_work} to
822 @code{Patch-abandoned} if no actions have been taken in four
823 weeks.
824
825 @end itemize
826
827
828
829
830 @node Summary of project status
831 @section Summary of project status
832
833 @subsubheading Project overview
834
835 Grid view provides the best overview:
836
837 @smallexample
838 @uref{http://code.google.com/p/lilypond/issues/list?mode=grid&y=Priority&x=Type&cells=ids}
839 @end smallexample
840
841 @subsubheading Hindering development
842
843 These issues stop or slow development work:
844
845 @smallexample
846 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Maintainability}
847 @end smallexample
848
849 @subsubheading Easy tasks
850
851 Issues tagged with @code{Frog} indicates a task suitable for a
852 relatively new contributor.  The time given is a quick
853 (inaccurate) estimate of the time required for somebody who is
854 familiar with material in this manual, but does not know anything
855 else about LilyPond development.
856
857 @smallexample
858 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Frog}
859 @end smallexample
860
861 @subsubheading Patches to review
862
863 Patches which have no @qq{obvious} problems:
864
865 @example
866 @uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch-review}
867 @end example
868
869
870