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