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