]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/administration.itexi
CG: improve Patchy documentation
[lilypond.git] / Documentation / contributor / administration.itexi
1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @node Administrative policies
3 @chapter Administrative policies
4
5 This chapter discusses miscellaneous administrative issues which
6 don't fit anywhere else.
7
8 @menu
9 * Meta-policy for this document::
10 * Environment variables::
11 * Meisters::
12 * Patchy::
13 * Administrative mailing list::
14 * Grand Organization Project (GOP)::
15 * Grand LilyPond Input Syntax Standardization (GLISS)::
16 * Unsorted policies::
17 @end menu
18
19 @node Meta-policy for this document
20 @section Meta-policy for this document
21
22 The Contributor's Guide as a whole is still a work in progress,
23 but some chapters are much more complete than others.  Chapters
24 which are @qq{almost finished} should not have major changes
25 without a discussion on @w{@code{-devel}}; in other chapters, a
26 disorganized @qq{wiki-style dump} of information is encouraged.
27
28 Do not change (other than spelling mistakes) without discussion:
29
30 @itemize
31
32 @item
33 @ref{Introduction to contributing}
34
35 @item
36 @ref{Working with source code}
37
38 @end itemize
39
40 Please dump info in an appropriate @@section within these manuals,
41 but discuss any large-scale reorganization:
42
43 @itemize
44
45 @item
46 @ref{Compiling}
47
48 @item
49 @ref{Documentation work}
50
51 @item
52 @ref{Issues}
53
54 @item
55 @ref{Regression tests}
56
57 @item
58 @ref{Programming work}
59
60
61 @end itemize
62
63 Totally disorganized; do whatever the mao you want:
64
65 @itemize
66
67 @item
68 @ref{Website work}
69
70 @item
71 @ref{LSR work}
72
73 @item
74 @ref{Release work}
75
76 @item
77 @ref{Administrative policies}
78
79 @end itemize
80
81
82 @node Environment variables
83 @section Environment variables
84
85 Some maintenance scripts and instructions in this guide rely on
86 the following environment variables.  They should be predefined in
87 LilyDev distribution (see @ref{LilyDev}); if you set up your own
88 development environment, you can set them by appending these settings to
89 your @file{~/.bashrc} (or whatever defines your default environment
90 variables for the user account for LilyPond development), then logging
91 out and in (adapt directories to your setup):
92
93 @example
94 LILYPOND_GIT=~/lilypond-git
95 export LILYPOND_GIT
96 LILYPOND_BUILD_DIR=~/lilypond-git/build
97 export LILYPOND_BUILD_DIR
98 @end example
99
100 The standard build and install procedure (with @code{autogen.sh},
101 @code{configure}, @code{make}, @code{make install}, @code{make doc}
102 @dots{}) does not rely on them.
103
104 In addition, for working on the website, @code{LILYPOND_WEB_MEDIA_GIT}
105 should be set to the repository lilypond-extra, see
106 @ref{lilypond-extra}.
107
108
109 @node Meisters
110 @section Meisters
111
112 We have four jobs for organizing a team of contributors:
113
114 @itemize
115
116 @item
117 Bug Meister: trains new Bug Squad volunteers, organizes who works
118 on which part of their job, checks to make sure that everything is
119 running smoothly, and has final say on our policy for Issues.
120
121 Currently: Colin H
122
123 @item
124 Doc Meister: trains new doc editors/writers, organizes who works
125 on which part of the job, checks to make sure that everything is
126 running smoothly, and has final say on our policy for
127 Documentation.  Also includes LSR work.
128
129 Currently: Graham
130
131 @item
132 Translation Meister: trains new translators, updates the
133 translation priority list, and handles merging branches (in both
134 directions).
135
136 Currently: Francisco
137
138 @item
139 Frog Meister: is responsible for code patches from (relatively)
140 inexperienced contributors.  Keeps track of patches, does initial
141 reviewing of those patches, sends them to @w{@code{-devel}} when
142 they've had some initial review on the Frog list, pesters the
143 @w{@code{-devel}} community into actually reviewing said patches, and
144 finally pushes the patches once they're accepted.  This person is
145 @emph{not} responsible for training new programmers, because that
146 would be far too much work -- his/her job is @qq{only} to guide
147 completed patches through our process.
148
149 Currently: Mike Solomon
150
151 @end itemize
152
153 @node Patchy
154 @section Patchy
155
156 @subheading Introduction
157
158 Patchy is a set of Python scripts to automate two administrative
159 tasks:
160
161 @itemize
162 @item
163 @code{lilypond-patchy-staging.py}: checks that new commits in
164 @code{staging} can compile the regtests and documentation before
165 merging @code{staging} into @code{master}.
166
167 (completely automatic)
168
169 @item
170 @code{test-patches.py}: checks that patches apply to Git @code{master},
171 compile, and lets a human check that there are no big unintended
172 changes to the regtests.
173
174 (requires some human input)
175
176 @end itemize
177
178 @subheading Installing Patchy
179
180 To install Patchy, you should do the following:
181
182 @enumerate
183 @item
184 Create a new user on your box to run Patchy; this is a security
185 step for your own protection.  It is recommended that this should
186 not be an administrator.  New users are created from System;
187 Administration; Users and Groups.
188
189 @item
190 Get the Patchy scripts from
191 @example
192 @uref{https://github.com/gperciva/lilypond-extra/}
193 @end example
194 Patchy is in the @file{patches/} directory.
195
196 @item
197 Put the scripts and Python libraries contained in @file{patches} in a
198 sensible place on your system; this can be done by appending
199 @file{patches/} full path to the @var{PATH} of the user that runs
200 Patchy.
201
202 @item
203 Create a new git repository with
204 @example
205 git clone git://git.sv.gnu.org/lilypond.git
206 @end example
207 This will create a directory called lilypond with the repo in it.
208 Make sure it's where you want it and name it lilypond-git
209 (assuming you want to follow the standard naming conventions).
210
211 @item
212 Create environment variables @var{LILYPOND_GIT} and
213 @var{LILYPOND_BUILD_DIR}, see @ref{Environment variables}.
214
215 @item
216 Run Patchy once to set up config files, answer @q{@code{n}} when it
217 asks for going on, unless the default config file happens to suit your
218 setup:
219 @example
220 lilypond-patchy-staging.py
221 @end example
222
223 @item
224 Edit @file{$HOME/.lilypond-patchy-config} to provide the location of
225 your local lilypond Git repository, working directories for your build
226 directory, your results directory, compiler options and notification
227 method.  If you don't want to use email notification, then delete
228 everything after @code{smtp_command:}.
229
230 @item
231 Ensure that your new user has git push access.  Follow the
232 instructions in the CG at @ref{Commit access}.  Do not set
233 password protection for the key --- if you do you will not be able
234 to run patchy unattended.
235
236 @end enumerate
237
238 @subheading lilypond-patchy-staging.py
239
240 @code{lilypond-patchy-staging.py} is run with
241 @example
242 python lilypond-patchy-staging.py
243 @end example
244 Not much appears to happen except you can see a lot of CPU gets used
245 if you open System Monitor. There's not much point running
246 @code{lilypond-patchy-staging.py} unless there is something in
247 @code{staging} to be merged to @code{master}, however, if there's
248 nothing new in @code{staging} then the script won't waste resources by
249 compiling anything.
250
251 The script fetches the current patches in staging and runs
252 @code{make}, @code{make test} and @code{make doc} to ensure that all of
253 these complete error-free. If you have set Patchy up to use email,
254 it emails its results to you.  If you haven't, then you can view
255 them in a logfile.  It also merges @code{staging} into @code{master}.
256
257 When you have run Patchy a few successful times with email sending,
258 you are ready for running it as a cron job. First, make sure you have
259 the following in @file{$HOME/.lilypond-patchy-config} to avoid
260 email flood:
261
262 @example
263 [notification]
264 notify_non_action = no
265 @end example
266
267 Then, assuming Patchy run with user account @code{patchy}, write the
268 following to @file{$HOME/lilypond-patchy.cron}, adapting it as
269 necessary (the @code{/2} means @qq{run this every 2 hours}):
270 @example
271 02 0-23/2 * * * /home/patchy/git/lilypond-extra/patches/lilypond-patchy-staging.py
272 @end example
273
274 @warning{@code{cron} will not inherit environment variables from
275 your main setup, so you must re-define any variables inside
276 @file{$HOME/lilypond-patchy.cron}. For instance, @var{LILYPOND_GIT}
277 may need to be defined if @var{git_repository_dir} is not correctly
278 set in @file{$HOME/.lilypond-patchy-config}.}
279
280 Finally, install the cron job (you may need superuser privileges for
281 this):
282 @example
283 crontab -u patchy /home/patchy/lilypond-patchy.cron
284 @end example
285
286 @subheading test-patches.py
287 @code{test-patches.py} prepares a regtest comparison for a human to
288 quickly glance at, to determine if the patch is ready for a review.
289 After looking at the comparison (or the lack of a comparison in the
290 case of problems), run @code{accept-patch.py} or
291 @code{reject-patch.py}.
292
293 Once a patch has gotten a "LGTM" from Patchy, it should be
294 reviewed by relevant developers, and if it passes this, it can be
295 considered for countdown (see @ref{Commits and patches}) and
296 pushing to staging (see @ref{Pushing to staging}).
297
298
299 @node Administrative mailing list
300 @section Administrative mailing list
301
302 A mailing list for administrative issues is maintained at
303 @code{lilypond-hackers@@gnu.org}.
304
305 This list is intended to be used for discussions that should be kept
306 private. Therefore, the archives are closed to the public.
307
308 Subscription to this list is limited to certain senior developers.
309
310 At the present time, the list is dormant.
311
312 Details about the criteria for membership, the types of discussion
313 to take place on the list, and other policies for the hackers list
314 will be finalized during the
315 @ref{Grand Organization Project (GOP)}.
316
317
318
319 @node Grand Organization Project (GOP)
320 @section Grand Organization Project (GOP)
321
322 GOP has two goals:
323
324 @itemize
325 @item
326 Clarify the various development tasks by writing down the policies
327 and techniques and/or simplifying the tasks directly.
328
329 @item
330 Get more people involved in development: specifically, find people
331 to do easy tasks to allow advanced developers to concentrate on
332 difficult tasks.
333
334 @end itemize
335
336 @menu
337 * Motivation::
338 * Ongoing jobs::
339 * Policy decisions::
340 * Policy decisions (finished)::
341 @end menu
342
343 @node Motivation
344 @subsection Motivation
345
346 Most readers are probably familiar with the LilyPond Grand
347 Documentation Project, which ran from Aug 2007 to Aug 2008. This
348 project involved over 20 people and resulted in an almost complete
349 rewrite of the documentation. Most of those contributors were
350 normal users who decided to volunteer their time and effort to
351 improve lilypond for everybody. By any measure, it was a great
352 success.
353
354 The Grand Organization Project aims to do the same thing with a
355 larger scope -- instead of focusing purely on documentation, the
356 project aims to improve all parts of LilyPond and its community.
357 Just as with GDP, the main goal is to encourage and train users to
358 become more involved.
359
360 If you have never contributed to an open-source project before --
361 especially if you use Windows or OSX and do not know how to
362 program or compile programs -- you may be wondering if there's
363 anything you can do. Rest assured that you @emph{can} help.
364
365 @subheading "Trickle-up" development
366
367 One of the reasons I'm organizing GOP is "trickle-up"
368 development.  The idea is this: doing easy tasks frees up advanced
369 developers to do harder tasks.  Don't ask "am I the @emph{best}
370 person for this job"; instead, ask "am I @emph{capable} of doing
371 this job, so that the current person can do stuff I @emph{can't}
372 do?".
373
374 For example, consider lilypond's poor handling of grace notes in
375 conjunction with clef and tempo changes. Fixing this will require
376 a fair amount of code rewriting, and would take an advanced
377 developer a few weeks to do. It's clearly beyond the scope of a
378 normal user, so we might as well sit back and do nothing, right?
379
380 No; we @emph{can} help, indirectly. Suppose that our normal user
381 starts answering more emails on lilypond-user. This in turn means
382 that documentation writers don't need to answer those emails, so
383 they can spend more time improving the docs. I've noticed that all
384 doc writers tackle harder and harder subjects, and when they start
385 writing docs on scheme programming and advanced tweaks, they start
386 contributing bug fixes to lilypond. Having people performing these
387 easy-to-moderate bug fixes frees up the advanced developers to
388 work on the really hard stuff... like rewriting the grace note
389 code.
390
391 Having 1 more normal user answering emails on lilypond-user won't
392 have a dramatic @q{trickle-up} effect all by itself, of course. But if
393 we had 8 users volunteering to answer emails, 6 users starting to
394 write documentation, and 2 users editing LSR... well, that would
395 free up a lot of current bug-fixing-capable contributors to focus
396 on that, and we could start to make a real dent in the number of
397 bugs in lilypond. Quite apart from the eased workload, having that
398 many new helpers will provide a great moral boost!
399
400 @node Ongoing jobs
401 @subsection Ongoing jobs
402
403 Although GOP is a short-term project, the main goal is to train
404 more people to handle ongoing jobs. The more people doing these
405 jobs, the lighter the work will be, and the more we can get done
406 with lilypond!
407
408 Also, it would be nice if we had at least one "replacement" /
409 "understudy" for each role -- too many tasks are only being done
410 by one person, so if that person goes on vacation or gets very
411 busy with other matters, work in that area grinds to a halt.
412
413 @subheading Jobs for normal users
414
415 @itemize
416 @item Consultant:
417 LilyPond is sometimes critized for not listening to users, but
418 whenever we ask for opinions about specific issues, we never get
419 enough feedback. This is somewhat aggravating.
420 We need a group of users to make a dedicated effort to test and
421 give feedback. If there's new documentation, read it. If there's
422 an experimental binary, download it and try compiling a score with
423 it. If we're trying to name a new command, think about it and give
424 serious suggestions.
425
426 @item lilypond-user support:
427 I think it would be nice if we had an official team of users
428 helping other users.
429
430 @item LilyPond Report:
431 Keeping a monthly newsletter running is a non-trivial task.  A lot
432 of work is needed to organize it; it would be great if we could
433 split up the work. One person could write the Snippet of the
434 Month, another person could do Quotes of the Month, another person
435 could do interviews, etc.
436
437 @item Documentation:
438 Although GDP (the Grand Documentation Project) did great work,
439 there's still many tasks remaining.
440
441 @item Translations:
442 Keeping the documentation translations is a monumental task; we
443 need all the help we can get!
444
445 @end itemize
446
447 @subheading Jobs for advanced users for developers
448
449 @itemize
450 @item Git help for writers:
451 We often receive reports of typos and minor text updates to the
452 documentation. It would be great if somebody could create
453 properly-formatted patches for these corrections.
454
455 Technical requirements: ability to run @ref{LilyDev}.
456
457 @item LSR editor:
458 LSR contains many useful examples of lilypond, but some snippets
459 are out of date and need updating. Other snippets need to be
460 advertized, and new snippets need to be sorted. We could use
461 another person to handle LSR.
462
463 Technical requirements: use of a web browser. LilyPond
464 requirements: you should be familiar with most of Notation
465 chapters 1 and 2 (or be willing to read the docs to find out).
466
467 @item Join the Frogs:
468 "Frogs" are a team of bug-fixers (because frogs eat bugs, and you
469 often find them in Ponds of Lilies) and new feature implementors.
470
471 Technical requirements: development environment (such as
472 @ref{LilyDev}), ability to read+write scheme and/or C++ code.
473
474 @end itemize
475
476
477 @node Policy decisions
478 @subsection Policy decisions
479
480 There are a number of policy decisions -- some of them fairly
481 important -- which we have been postponing for a few years.  We
482 are now discussing them slowly and thoroughly; agenda and exact
483 proposals are online:
484
485 @example
486 @uref{http://lilypond.org/~graham/gop/index.html}
487 @end example
488
489 Below is a list of policies which are not @qq{on the agenda} yet.
490
491 Note that the presence of an item on this list does @emph{not}
492 mean that everybody thinks that something needs to be done.
493 Inclusion in this simply means that one developer thinks that we
494 should discuss it.  We are not going to filter this list; if any
495 developer thinks we should discuss something, just add it to the
496 bottom of the list.  (the list is unsorted)
497
498 As GOP progresses, items from this list will be put on the agenda
499 and removed from this list.  I generally try to have one month's
500 discussion planned in advance, but I may shuffle things around to
501 respond to any immediate problems in the developer community.
502
503 There are some item(s) not displayed here; these are questions
504 that were posed to me privately, and I do not feel justified in
505 discussing them publicly without the consent of the person(s) that
506 brought them up. They will initially be discussed privately on the
507 lilypond-hackers mailing list -- but the first question will be
508 "do we absolutely need to do this privately", and if not, the
509 discussion will take place on lilypond-devel like the other items.
510
511 In most policy discussions in lilypond over the past few years,
512 the first half (or more) is wasted arguing on the basis of
513 incorrect or incomplete data; once all the relevant facts are
514 brought to light, the argument is generally resolved fairly
515 quickly.  In order to keep the GOP discussions focused, each topic
516 will be introduced with a collection of relevant facts and/or
517 proposals.  It is, of course, impossible to predict exactly which
518 facts will be relevant to the discussion -- but spending an hour
519 or two collecting information could still save hours of
520 discussion.
521
522 @warning{The estimated time required for "prep work", and the
523 following discussion, has been added to each item.  At the moment,
524 there is an estimated 30 hours of prep work and 140 hours of
525 discussion.}
526
527 @itemize
528 @item @strong{Patch reviewing}:
529 At the time of this writing, we have 23 (known) patches waiting
530 for review.  Some from main developers; some from new developers.
531 We desperately need more people helping with lilypond, but
532 ignoring patches is the best way to drive potential contributors
533 away.  This is not good.
534
535 (prep: 2 hours.  discuss: 10 hours)
536
537 @item @strong{Official links to other organizations?}:
538 There's something called the "software freedom conservancy", and
539 in general, there's a bunch of "umbrella organizations". Joining
540 some of these might give us more visibility, possibly leading to
541 more users, more developers, maybe even financial grants or use in
542 schools, etc.
543
544 (prep: 2 hours.  discuss: 5 hours)
545
546 @item @strong{Issue tracking with google code}:
547 We use the google issue tracker, but this means that we are
548 relying on a commercial entity for a large part of our
549 development. Would it be better (safer in the long run) to use the
550 savannah bug tracker?
551
552 (prep: 1 hour.  discuss: 5 hours)
553
554 @item @strong{Patch review tool}:
555 Reitveld is inconvenient in some respects: it requires a google
556 account, and there's no way to see all patches relating to
557 lilypond. Should we switch to something like gerritt?
558 @uref{http://code.google.com/p/lilypond/issues/detail?id=1184}
559
560 (prep: 5 hours.  discuss: 15 hours)
561
562 @item @strong{Clarity for sponsorships}:
563 We currently do not advertize bounties and sponsorships on the
564 webpage.  How much advertising do we want, and what type?
565 Should we change the "structure" / "framework" for bounties?
566
567 (prep: 2 hours.  discuss: 10 hours)
568
569 @item @strong{code readability}:
570 "Our aim when producing source code for Lilypond in whatever
571 language is that it should be totally comprehensible to a
572 relatively inexperienced developer at the second reading."
573
574 Rationale:
575 - aids maintainability of code base
576 - "second reading" so newer developers can look up unfamiliar
577   stuff
578 - will help to keep things simple, even if the code is doing
579   complex stuff discourages "secret squirrel" coding, e.g.  "how
580   much functionality can I squeeze into as few characters as
581   possible" "comments are for wimps"
582 - will aid not *discouraging* new developers to join the project
583
584 (prep: 2 hours.  discuss: 10 hours)
585
586 @item @strong{C++ vs. scheme}:
587 what should be in scheme, what should be in C++, what can/should
588 be ported from one to the other, etc.  Questions of
589 maintainability, speed (especially considering guile 2.0), and the
590 amount of current material in either form, are important.
591
592 (prep: 5 hours.  discuss: 15 hours)
593
594 @item @strong{always make an issue number for patches}:
595 there is a proposal that we should always have a google code issue
596 number for every patch.  This proposal is closely tied to our
597 choice of patch review tool; if we switch to a different tool (as
598 suggested in a different proposal), this proposal may become moot.
599
600 (prep: 1 hour.  discuss: 5 hours)
601
602 @item @strong{initalizer lists}:
603 shoudl we use initalizer lists for C++?  AFAIK they make no
604 difference for built-in types, but there's some weird case where
605 it's more efficient for objects, or something.
606
607 Probably not worth making this a weekly thing on its own, but we
608 can probably wrap it up with some other code-related questions.
609
610 (prep: 15 minutes.  discuss: 3 hours)
611
612 @end itemize
613
614 @node Policy decisions (finished)
615 @subsection Policy decisions (finished)
616
617 Here is a record the final decisions, along with links to the
618 discussions.
619
620 @menu
621 * GOP-PROP 1 - python formatting::
622 * GOP-PROP 2 - mentors and frogs::
623 * GOP-PROP 3 - C++ formatting::
624 * GOP-PROP 4 - lessons from 2.14::
625 * GOP-PROP 5 - build system output (not accepted)::
626 * GOP-PROP 6 - private mailing lists::
627 * GOP-PROP 7 - developers as resources::
628 * GOP-PROP 8 - issue priorities::
629 * GOP-PROP 9 - behavior of make doc::
630 @end menu
631
632 @node GOP-PROP 1 - python formatting
633 @subsubsection GOP-PROP 1 - python formatting
634
635 We will follow the indentation described in PEP-8.
636 @uref{http://www.python.org/dev/peps/pep-0008/}
637
638 @itemize
639 @item
640 use 4 spaces per indentation level
641
642 @item
643 never mix tabs and spaces (for indentation)
644
645 @item
646 Code indented with a mixture of tabs and spaces should be
647 converted to using spaces exclusively
648
649 Once this is done, we should add @code{python -tt} to the build
650 system to avoid such errors in the future.
651
652 @end itemize
653
654 There should be absolutely no tab characters for indentation in
655 any @code{.py} file in lilypond git.  All such files should be
656 converted to use spaces only.
657
658 @subsubheading Discussions
659
660 @smallexample
661 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00060.html}
662 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00084.html}
663 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00310.html}
664 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00574.html}
665 @end smallexample
666
667
668 @node GOP-PROP 2 - mentors and frogs
669 @subsubsection GOP-PROP 2 - mentors and frogs
670
671 Nothing much was decided.  The list of responsibilities was
672 slightly altered; see the new one in @ref{Mentors}.  We should
673 encourage more use of the Frogs mailing list.  There's a list of
674 contributor-mentor pairs in:
675
676 @smallexample
677 @uref{https://github.com/gperciva/lilypond-extra/blob/master/people/mentors.txt}
678 @end smallexample
679
680 That's pretty much it.
681
682 @subsubheading Discussions
683
684 @smallexample
685 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00311.html}
686 @uref{}
687 @uref{}
688 @end smallexample
689
690
691 @node GOP-PROP 3 - C++ formatting
692 @subsubsection GOP-PROP 3 - C++ formatting
693
694 Speaking academically, C++ code style is a "solved problem". Let's
695 pick one of the existing solutions, and let a computer deal with
696 this.  Humans should not waste their time, energy, and creativity
697 manually adding tabs or spaces to source code.
698
699 We have modified @code{fixcc.py} to use astyle, along with extra
700 regex tweaks.
701
702 @itemize
703 @item
704 the final script will be run @strong{blindly} on the lilypond
705 source code.  We will accept whatever formatting the final version
706 of this script produces, with no manual tweaking.
707
708 @item
709 patches which have been run through this tool will not be rejected
710 for style reasons.  Any code formatting @qq{desires} which are not
711 enforced by @code{fixcc.py} will not be considered grounds for
712 rejecting a patch.
713
714 @item
715 for now, this style will not be enforced.  It is not cause for
716 concern if patches which do not follow the formatting done by
717 @code{fixcc.py} are pushed.  From time to time, Graham will run
718 the formatter on the entire code base, and commit the resulting
719 changes.
720
721 In a few months, we will tighten up this policy item (with some
722 sort of automatic processing), but that is outside the scope of
723 this policy item and is a matter for later discussion.
724
725 @item
726 after the proposal is accepted, we will leave some time for
727 existing patches to be accepted and pushed.  The script was
728 run on the source code on @strong{2011 August 01}.
729
730 @end itemize
731
732 @subheading GNU code
733
734 LilyPond is a GNU project, so it makes sense to follow the GNU
735 coding standards.  These standards state:
736
737 @quotation
738 We don’t think of these recommendations as requirements, because
739 it causes no problems for users if two different programs have
740 different formatting styles.
741
742 But whatever style you use, please use it consistently, since a
743 mixture of styles within one program tends to look ugly. If you
744 are contributing changes to an existing program, please follow the
745 style of that program. 
746 @end quotation
747
748 (@uref{http://www.gnu.org/prep/standards/html_node/Formatting.html})
749
750 With that in mind, we do not think that we must blindly follow the
751 formatting given by the currrent version of Emacs.
752
753 @subheading Implementation notes
754
755 We can avoid some of the style change pollution in git history by
756 ignoring whitespaces changes:
757
758 @example
759 git diff -w
760 @end example
761
762 @subsubheading Discussions
763
764 @smallexample
765 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00526.html}
766 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00796.html}
767 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00200.html}
768 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00525.html}
769 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00751.html}
770 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00751.html}
771 @end smallexample
772
773
774 @node GOP-PROP 4 - lessons from 2.14
775 @subsubsection GOP-PROP 4 - lessons from 2.14
776
777 @subheading History
778
779 A brief history of releases:
780
781 @multitable @columnfractions .2 .2 .3
782 @headitem date (YYYY-MM-DD) @tab version @tab comment
783 @item 2008-10-28 @tab 2.11.63 @tab nobody checking regtests
784 @item 2008-11-17 @tab 2.11.64
785 @item 2008-11-29 @tab 2.11.65
786 @item 2008-12-23 @tab 2.12.0
787 @item 2009-01-01 @tab @tab somewhere around here, Graham becomes
788 officially release manager, but Han-Wen still builds the actual
789 releases
790 @item 2009-01-01 @tab 2.12.1
791 @item 2009-01-25 @tab 2.12.2
792 @item 2009-02-28 @tab 2.13.0
793 @item 2009-06-01 @tab 2.13.1 @tab note jump in time!
794 @item 2009-06-27 @tab 2.13.2 @tab first Graham release?
795 @item 2009-07-03 @tab 2.13.3
796 @item 2009-09-09 @tab @tab Graham arrives in Glasgow, gets a
797 powerful desktop computer, and begins serious work on GUB (sending
798 bug reports to Jan).  It takes approximately 100 hours until GUB
799 is stable enough to make regular releases.
800 @item 2009-09-24 @tab 2.13.4
801 @item 2009-10-02 @tab 2.13.5
802 @item 2009-10-22 @tab 2.13.6
803 @item 2009-11-05 @tab 2.13.7
804 @item ...
805 @item 2010-01-13 @tab 2.12.3
806 @item ...
807 @item 2010-03-19 @tab 2.13.16 @tab Bug squad starts doing a few
808 regtest comparisons, but IIRC the effort dies out after a few
809 weeks (BLUE)
810 @item ...
811 @item 2010-08-04 @tab 2.13.29 @tab Phil starts checking regtests (BLUE)
812 @item ...
813 @item 2011-01-12 @tab 2.13.46 @tab release candidate 1 (GREEN)
814 @item ...
815 @item 2011-05-30 @tab 2.13.63 @tab release candidate 7 (GREEN)
816 @item 2011-06-06 @tab 2.14.0
817 @end multitable
818
819 @c A graphical display of bugs:
820 @c 
821 @c @image{bugs-2.13-visualization,png}
822 @c @image{zoom-2.13-visualization,png}
823
824 @subheading Carl's analysis of the bugs
825
826 A @file{csv} spreadsheet is available.
827
828 @smallexample
829 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00852.html}
830 @end smallexample
831
832 @example
833 @uref{lilypond-issues-analysis.csv}
834 @uref{lilypond-issues-analysis-trim-duplicates.csv}
835 @end example
836
837 There 148 issues marked with Priority=Critical in the tracker.
838
839 I've done an analysis, and it looks to me like there was initially
840 a backlog of critical issues that weren't fixed, and little work
841 was being done to eliminate critical issues.
842
843 Somewhere about 2010-08-01, critical issues started to disappear,
844 but occasional new ones appeared.
845
846 There were a couple of major changes that introduced unanticipated
847 regressions (new spacing code, beam collision avoidance).  These
848 produced more than the expected number of regressions.
849
850 It appears to me that we didn't really get serious about
851 eliminating critical bugs until about 2010-06-15 or so.  After
852 that point, the number of critical bugs more-or-less steadily
853 decreased until we got to a release candidate.
854
855 Of particular interest, the first release candidate of 2.14 was
856 released on 2011-01-12.  Over the next 10 days, about a dozen bugs
857 were reported and fixed.  Release candidate 2 came out on
858 2011-02-09.   No surge of bugs occurred with this release.
859 Candidate 3 came out on 2011-03-13; we got 2 bugs per week.
860 Candidate 4 came out on 2011-03-29; 2 new bugs.  Candidate 6 came
861 out on 2011-04-07.  We got a couple of bugs per week.
862
863 @subheading Notes, commentary, and opinions
864
865 @example
866 Han-Wen: Overall, I think this cycle took too long
867 Mike: I agree
868 Graham: +1
869 @end example
870
871 @subsubheading Discussions
872
873 @smallexample
874 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00797.html}
875 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00364.html}
876 @uref{}
877 @end smallexample
878
879
880 @node GOP-PROP 5 - build system output (not accepted)
881 @subsubsection GOP-PROP 5 - build system output (not accepted)
882
883 This proposal was too broad; after a month of discussion, Graham
884 withdrew the proposal.  Portions of it will be introduced in later
885 proposals.
886
887 @subsubheading Discussions
888
889 @smallexample
890 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00320.html}
891 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00527.html}
892 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00753.html}
893 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg01042.html}
894 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00116.html}
895 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00310.html}
896 @end smallexample
897
898
899 @node GOP-PROP 6 - private mailing lists
900 @subsubsection GOP-PROP 6 - private mailing list
901
902 Potentially sensitive or private matters will be referred to
903 Graham.  He will then decide who should discuss the matter on an
904 ad-hoc basis, and forward or CC them on future emails.
905
906 For emphasis, the project administrators are Han-Wen, Jan, and
907 Graham; those three will always be CC'd on any important
908 discussions.
909
910 The lilypond-hackers mailing list will be removed.
911
912 @subheading History
913
914 There is some unhappy history about this idea in our development
915 community:
916
917 @example
918 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-09/msg00178.html}
919 @uref{http://news.lilynet.net/spip.php?article121}
920 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-11/msg00076.html}
921 @end example
922
923 @subheading Other projects
924
925 The idea of private mailing lists is hardly uncommon in
926 open-source software.  For example,
927
928 @example
929 @uref{http://lwn.net/Articles/394660/}   about debian-private
930 @uref{http://subversion.apache.org/mailing-lists.html}  private@@
931 @uref{http://www.freebsd.org/administration.html#t-core}
932 @uref{http://foundation.gnome.org/legal/}   board members pledge
933 to keep certain matters confidential
934
935 every security team of every linux distribution and OS
936 @end example
937
938 In fact, Karl Fogel's @qq{Producing Open Source Software}
939 explicitly suggests a private mailing list for some circumstances:
940
941 @example
942 [on granting commit/push access to a contributor]
943
944 But here is one of the rare instances where secrecy is
945 appropriate. You can't have votes about potential committers
946 posted to a public mailing list, because the candidate's feelings
947 (and reputation) could be hurt.
948
949 @uref{http://producingoss.com/en/consensus-democracy.html#electorate}
950 @end example
951
952 @subheading Board of governers, voting, etc?
953
954 Many projects have an official board of directors, or a list of
955 @qq{core developers}, with set term limits and elections and
956 stuff.
957
958 I don't think that we're that big.  I think we're still small
959 enough, and there's enough trust and consensus decisions, that we
960 can avoid that.  I would rather that we kept on going with
961 trust+consensus for at least the next 2-3 years, and spent more
962 time+energy on bug fixes and new features instead of
963 administrative stuff.
964
965 Project administrators are Han-Wen, Jan, and Graham.
966
967 @subsubheading Discussions
968
969 @smallexample
970 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00783.html}
971 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg01004.html}
972 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00117.html}
973 @end smallexample
974
975
976 @node GOP-PROP 7 - developers as resources
977 @subsubsection GOP-PROP 7 - developers as resources
978
979 We shall treat developers (and contributors) as
980 @strong{Independent volunteers}: each person does whatever they
981 want, whenever they want.  We have busy careers and lives; we make
982 no expectations of action from anybody (with the exception of the
983 6 people in @qq{Meister} positions).
984
985 @subsubheading Discussions
986
987 @smallexample
988 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg01092.html}
989 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00087.html}
990 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00497.html}
991 @end smallexample
992
993
994 @node GOP-PROP 8 - issue priorities
995 @subsubsection GOP-PROP 8 - issue priorities
996
997 We will delete the @qq{priority} field of the issue tracker
998 altogether.  The @qq{type} system will be tweaked.
999
1000 Type-critical:
1001
1002 @itemize
1003
1004 @item
1005 a reproducible failure to build either @code{make} or @code{make
1006 doc}, from an empty build tree, in a first run, if
1007 @code{configure} does not report any errors.
1008
1009 @item
1010 any program behaviour which is @strong{unintentionally} worse than
1011 the previous stable version or the current development version.
1012 Developers may always use the @qq{this is intentional}, or even
1013 the @qq{this is an unavoidable effect of an improvement in another
1014 area}, reason to move this to a different type.
1015
1016 @item
1017 anything which stops contributors from helping out (e.g.
1018 lily-git.tcl not working, source tree(s) not being available,
1019 LilyDev being unable to compile git master, inaccurate
1020 instructions in the Contributor's Guide 2 Quick start).
1021
1022 To limit this scope of this point, we will assume that the
1023 contributor is using the latest LilyDev and has read the relevant
1024 part(s) of the Contributor's Guide.  Problems in other chapters of
1025 the CG are not sufficient to qualify as Type-Critical.
1026
1027 @end itemize
1028
1029 @subsubheading More new/changed types and labels
1030
1031 Unless otherwise specified, the current types and labels will
1032 continue to be used.  The new types introduced by this proposal
1033 are:
1034
1035 @itemize
1036
1037 @item
1038 Type-crash: any segfault, regardless of what the input file looks
1039 like or which options are given.  Disclaimer: this might not be
1040 possible in some cases, for example certain guile programs (we
1041 certainly can't predict if a piece of scheme will ever stop
1042 running, i.e. the halting problem), or if we rely on other
1043 programs (i.e. ghostscript).  If there are any such cases that
1044 make segfault-prevention impossible, we will document those
1045 exceptions (and the issue will remain as a "crash" instead of
1046 "documentation" until the warning has been pushed).
1047
1048 @item
1049 Type-maintainability: anything which makes it difficult for
1050 serious contributors to help out (e.g. difficult to find the
1051 relevant source tree(s), confusing policies, problems with
1052 automatic indentation tools, etc).
1053
1054 @item
1055 Type-ugly: replaces Type-collision, and it will include things
1056 like bad slurs in addition to actual collision.
1057
1058 @end itemize
1059
1060 A new label will be added:
1061
1062 @itemize
1063 @item
1064 (label) Needs_evidence: it is not clear what the correct output
1065 should look like.  We need scans, references, examples, etc.
1066
1067 @end itemize
1068
1069 @subheading Reminding users about stars
1070
1071 We can remind users that they can @qq{star} an issue to indicate
1072 that they care about it.  Since we resolved to treat developers as
1073 independent volunteers, there is no expectation that anybody will
1074 look at those stars, but if any developer want to organize their
1075 work schedule according to the stars, they are welcome to do so.
1076
1077 @subsubheading Discussions
1078
1079 @smallexample
1080 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00019.html}
1081 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00277.html}
1082 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00413.html}
1083 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00624.html}
1084 @uref{}
1085 @end smallexample
1086
1087
1088 @node GOP-PROP 9 - behavior of make doc
1089 @subsubsection GOP-PROP 9 - behavior of make doc
1090
1091 If there are build problems, then it should be easier to find out
1092 why it's failing.  This will be achieved with log files, as well
1093 as possibly including scripts which automatically display portions
1094 of those log files for a failing build.
1095
1096 We will also add targets for building a specific manual (for
1097 quick+easy checking of doc work), as well as for building all
1098 documentation in a specific language (either English or a
1099 translated language).
1100
1101 When you run @code{make doc},
1102
1103 @itemize
1104
1105 @item
1106 All output will be saved to various log files, with the exception
1107 of output directly from @code{make(1)}.
1108
1109 Note that @code{make(1)} refers to a specific executable file on
1110 unix computers, and is not a general term for the build system.
1111
1112 @item
1113 By default, no other output will be displayed on the console, with
1114 one exception: if a build fails, we might display some portion(s)
1115 of log file(s) which give useful clues about the reason for the
1116 failure.
1117
1118 The user may optionally request additional output to be printed;
1119 this is controlled with the @code{VERBOSE=x} flag.  In such cases,
1120 all output will still be written to log files; the console output
1121 is strictly additional to the log files.
1122
1123 @item
1124 Logfiles from calling lilypond (as part of lilypond-book) will go in
1125 the relevant
1126 @file{$LILYPOND_BUILD_DIR/out/lybook-db/12/lily-123456.log} file.  All
1127 other logfiles will go in the @file{$LILYPOND_BUILD_DIR/logfiles/}
1128 directory.
1129
1130 A single @code{make doc} will therefore result in hundreds of log
1131 files.  Log files produced from individual lilypond runs are not
1132 under our control; apart from that, I anticipate having one or two
1133 dozen log files.  As long as it is clear which log file is
1134 associated with which operation(s), I think this is entirely
1135 appropriate.  The precise implementation will be discussed for
1136 specific patches as they appear.
1137
1138 @item
1139 Both stderr and stdout will be saved in @code{*.log}.  The order
1140 of lines from these streams should be preserved.
1141
1142 @item
1143 There will be no additional @qq{progress messages} during the
1144 build process.  If you run @code{make --silent}, a non-failing
1145 build should print absolutely nothing to the screen.
1146
1147 @item
1148 Assuming that the loglevels patch is accepted, lilypond (inside
1149 lilypond-book) will be run with --loglevel=WARN.
1150 @uref{http://codereview.appspot.com/4822055/}
1151
1152 @item
1153 Ideally, a failing build should provide hints about the reason why
1154 it failed, or at least hints about which log file(s) to examine.
1155
1156 @end itemize
1157
1158 If this proposal is accepted, none of these policies will be
1159 assumed to apply to any other aspect of the build system.
1160 Policies for any other aspect of the build system will be
1161 discussed in separate proposals.
1162
1163 @subheading Don't cause more build problems
1164
1165 However, there is a danger in this approach, that vital error
1166 messages can also be lost, thus preventing the cause of the
1167 failure of a make being found.  We therefore need to be
1168 exceptionally careful to move cautiously, include plenty of tests,
1169 and give time for people to experiment/find problems in each stage
1170 before proceeding to the next stage.
1171
1172 This will be done by starting from individual lilypond calls
1173 within lilypond-book, and slowly moving to @qq{larger} targets of
1174 the build system -- after the individual lilypond calls are are
1175 producing the appropriate amount of output and this is saved in
1176 the right place and we can automatically isolate parts of a
1177 failing build, we will work on lilypond-book in general, and only
1178 then will we look at the build system itself.
1179
1180 @subheading Implementation notes
1181
1182 There is an existing make variable QUIET_BUILD, which
1183 alter the amount of output being displayed
1184 (@uref{
1185 http://lilypond.org/doc/v2.15/Documentation/contributor/useful-make-variables}
1186 ).  We are not planning on keeping this make variable.
1187
1188 The standard way for GNU packages to give more output is with a
1189 @code{V=x} option.  Presumably this is done by increasing
1190 @code{x}?  If we support this option, we should still write log
1191 files; we would simply print more of the info in those log files
1192 to screen.
1193
1194 The command @code{tee} may be useful to write to a file and
1195 display to stdout (in the case of VERBOSE).
1196
1197
1198 @subsubheading Discussions
1199
1200 @smallexample
1201 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00378.html}
1202 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00703.html}
1203 @end smallexample
1204
1205
1206 @ignore
1207 @n ode GOP-PROP 10 - scheme indentation
1208 @s ubsubsection GOP-PROP 10 - scheme indentation
1209
1210 still under discussion
1211
1212 @subsubheading Discussions
1213
1214 @smallexample
1215 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00625.html}
1216 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg01026.html}
1217 @c @uref{}
1218 @end smallexample
1219 @end ignore
1220
1221
1222
1223 @node Grand LilyPond Input Syntax Standardization (GLISS)
1224 @section Grand LilyPond Input Syntax Standardization (GLISS)
1225
1226 @subheading Summary
1227
1228 @itemize
1229 @item
1230 Start: sortly after 2.14 comes out, which is currently estimated
1231 to happen in January 2011.
1232
1233 @item
1234 Length: 6-12 months.  We're not going to rush this.
1235
1236 @item
1237 Goal: define an input which we commit to being
1238 machine-updateable for the forseeable future.  Any future patches
1239 which change the syntax in a non-convert-ly-able format will be
1240 rejected.  (subject to the limitations, below)
1241 Once this is finished, we will release lilypond 3.0.
1242
1243 @end itemize
1244
1245
1246 @subheading The Problem
1247
1248 One of the biggest complaints people have with lilypond -- other
1249 than silly thing like "there's no gui" -- is the changing syntax.
1250 Now, inventing a language or standards is difficult.  If you set
1251 it in stone too soon, you risk being stuck with decisions which
1252 may limit matters.  If you keep on updating the syntax,
1253 interaction with older data (and other programs!) becomes complex.
1254
1255 @subheading Scope and Limitations
1256
1257 @itemize
1258 @item
1259 tweaks will not be included.  Anything with \override, \set,
1260 \overrideProperty, \tweak, \revert, \unset... including even those
1261 command names themselves... is still fair game for NOT_SMART
1262 convert-ly updates.
1263
1264 @item
1265 other than that, everything is on the table.  Is it a problem to
1266 have the tagline inside \header?  What should the default behavior
1267 of \include be?  When we abolish \times, do we move to \tuplet 3:2
1268 or \tuplet 2/3 or what (for typical triplets in 4/4 time)?
1269
1270 @item
1271 we need to get standards for command names.  This will help users
1272 remember them, and reduce the options for future names (and
1273 potential renamings later on).  \commandOn and \commandOff seem to
1274 work well (should we *always* have an Off command?), but what
1275 about the "command" part?  Should it be \nounVerbOn, or
1276 \verbNounOn ?  Or \verbNotesWithExtraInformationOn ?
1277
1278 @item
1279 we need standards for the location of commands.  Ligature
1280 brackets, I'm looking at you.  (non-postfix notation must die!)
1281
1282 @item
1283 this Grand Project doesn't affect whether we have a 2.16 or not.
1284 The main problem will be deciding what to do (with a bit of
1285 messiness anticipated for \tuplet); we should definitely release a
1286 2.16 before merging _any_ of these changes.
1287
1288 @item
1289 we obviously can't /guarantee/ that we'll /never/ make any
1290 non-convert-ly changes in the basic format.  But we *can*
1291 guarantee that such changes would force lilypond 4.0, and that we
1292 would only do so for overwhelmingly good reasons.
1293
1294 @end itemize
1295
1296 @subheading Workflow
1297
1298 @itemize
1299 @item
1300 We're going to have lots and lots of emails flying around.  The
1301 vast majority won't really fit into either -devel or -user, so
1302 we'll use a list devoted to syntax issues.
1303
1304 @item
1305 Once we have a serious proposal that gained general acceptance
1306 from the separate syntax mailing list, I'll bring it to -devel.
1307 We're not going to make any changes without discussing it on
1308 -devel, but if we're going to have huge threads about English
1309 grammar and silly ideas, and I don't want to clutter up -devel.
1310 Once whatever chaotic silliness on the syntax list is settled
1311 down, I'll bring the ideas to -devel.
1312
1313 @item
1314 as with GDP, I'll moderate the discussion.  Not as with mailist
1315 moderation, but rather by introducing issues at specific times.
1316 We don't want a free-for-all discussion of all parts of the syntax
1317 at once; nothing will get resolved.
1318
1319 @item
1320 Whenever possible, we'll decide on policies at the highest level
1321 of abstraction.  For example, consider \numericTimeSignature,
1322 \slurUp, \xNotesOn, \startTextSpan, and \verylongfermata.  One of
1323 them starts with the name of the notation first (slur).  One has
1324 an abbreviation (x instead of cross).  One has the verb at the end
1325 (On), another has it at the beginning (start).  The adjective can
1326 come at the beginning (numeric, x) or end (Up).  Most are in
1327 camelCase, but one isn't (verylongfermata).
1328
1329 @item
1330 Instead of arguing about each individual command, we'll decide on
1331 abstract questions.  Should each command begin the notation-noun,
1332 or the verb?  Should all commands be in camelCase, or should we
1333 make everything other than articulations in camelCase but make
1334 articulations all lower-case?  Are abbreviations allowed?
1335
1336 @item
1337 Once we've answered such fundamental questions, most of the syntax
1338 should fall into place pretty easily.  There might be a few odd
1339 questions left ("is it a span, or a spanner?"), but those can be
1340 settled fairly quickly.
1341
1342 @end itemize
1343
1344 @subheading Implementation
1345
1346 Nothing until the project is finished, then we declare the next
1347 stable release (2.16.0 or 2.18.0 ?) to be the final 2.x version,
1348 release it, then apply all the GLISS syntax changes and start
1349 testing a beta for 3.0 a week or two later.
1350
1351 @subheading Discussion
1352
1353 Don't respond to any of the specifics yet.  Yes, we all have our
1354 pet irritations (like "what's up with \paper and \layout?!").
1355 There will be plenty of time to discuss them once GLISS starts.
1356
1357 That said, we have a list of specific items that people really
1358 wanted to have written down.  See @ref{Specific GLISS issues}.
1359
1360 @menu
1361 * Specific GLISS issues::
1362 @end menu
1363
1364
1365 @node Specific GLISS issues
1366 @subsection Specific GLISS issues
1367
1368 @itemize
1369 @item
1370 add regtests for every piece of syntax (not one-command-per-file,
1371 but making a few files which, between them, use every single piece
1372 of syntax.)  This is a great test for convert-ly.
1373
1374 @item
1375 should GLISS cover suggested conventions?  (indentation,
1376 one-bar-per-line, etc -- the kind of stuff we list for the
1377 lilypond formatting in the docs ?)
1378
1379 @item
1380 how much (if any) syntactic sugar should we add?  i.e.
1381 @example
1382   \instrumentName #'foo
1383 % instead of
1384   \set Staff.instrumentName
1385 @end example
1386 ?  Carl: maybe yes, Neil: no.  (for example, it fails for
1387 pianostaff)
1388
1389 @item
1390 the values that are used as arguments to common used overrides.
1391 Sometimes they are a symbol (e.g. #'around), sometimes a
1392 predefined variable referring to a Scheme value or object (e.g.
1393 #LEFT, #all-visible ). The main trouble is that for novice users
1394 it is not clear when there should be an apostrophe and when not.
1395
1396 @item
1397 When do we need -\command and when is it just \command ?
1398
1399
1400 @item
1401 Command-line options to the lilypond binary.  -dfoo counts as a
1402 tweak; we won't be trying to pin those down.
1403
1404 @item
1405 @verbatim
1406 \layout {
1407   \context { \Score
1408 % vs.
1409 \layout {
1410   \context {
1411     \Score
1412 @end verbatim
1413
1414 @item
1415 If would be pedagogically simpler to realize this difference if
1416 the syntax was separate if you define a context from scratch (as
1417 is the case with \RemoveEmptyStaffContext) or if it's defined by
1418 adding onto an existing context. For example, a syntax like
1419
1420 @verbatim
1421 \context{
1422  % Copy the current settings of the Staff context:
1423  \use Staff
1424  % do whatever additional settings
1425 }
1426 %%% could be used to distinguish from
1427 \context{
1428  % Take settings from a variable:
1429  \Variable
1430  % do whatever additional settings
1431 }
1432
1433 %%% and
1434
1435 \context{
1436  % Start from scratch:
1437  \type ...
1438  \name ...
1439  \consists ...
1440  ...
1441 }
1442 @end verbatim
1443
1444 @item
1445 Capitalization of identifiers: \VoiceOne ?
1446
1447 @item
1448 @verbatim
1449 %%% Allow
1450 { music expression } * 4
1451 %%% instead of
1452 \repeat unfold 4 { music expression }
1453 @end verbatim
1454
1455 ?  patch here:
1456 @smallexample
1457 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-04/msg00467.html}
1458 @end smallexample
1459
1460 @item
1461 Personally, I find it easier to understand when there's a repeated
1462 8 in the half-bar position; it's much easier to see that you have
1463 two groups of 4:
1464
1465 @example
1466 c8 c c c c8 c c c
1467 %%% instead of one group of eight:
1468 c8 c c c c c c c
1469 @end example
1470
1471 @item
1472 trivially simple bar-lines:
1473
1474 c1 | c1 |
1475
1476 encourage, allow, or discourage, or disallow?
1477
1478 @item
1479 indentation of \\ inside a @{@} construct.
1480
1481
1482 @item
1483 barline checks at the end of line should be preceded by at least 2
1484 spaces?  barline checks should line up if possible (i.e.  if you
1485 can use less than 4, 8, X empty spaces before a barline check to
1486 make them line up?)
1487
1488 @item
1489 Why doesn't \transpose respect \relative mode?
1490
1491
1492 @item
1493 on \score vs. \new Score
1494
1495 But in the light of a consistent syntax and semantic, I see no
1496 reason (from the users POV) to disallow it.  After all, the real
1497 top-level context is a \book @{@}, isn't it, and I don't see a point
1498 in disallowing a \new Score construct just like \new Staff.
1499
1500 From a syntactical POV, I see the following pros for \new Score:
1501 - You can write \with @{ ... @} for every other context but \Score,
1502 which (for consistency) should also work with \new Score.
1503 - When there's a \new Foo Bar, there's also a \context Foo Bar,
1504   which makes the same as a parallel instantiation of all Bar's.
1505 - [Quoting Rune from
1506 @uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/msg14713.html}
1507   "I know that the \score-statement is a syntactical construct,
1508 but I think it would be nice to hide this fact from the users.  I
1509 think we could make the use of score-block much more intuitive if
1510 changing the syntax to \new \Score and adding an implicit
1511 sequential-statement to the score."
1512
1513
1514 @item
1515 Discussion on
1516 @uref{http://code.google.com/p/lilypond/issues/detail?id=1322}
1517 about \new vs. \context.
1518
1519
1520 @item
1521 Let users add their own items to the parser?  comment 11 on:
1522 @uref{http://code.google.com/p/lilypond/issues/detail?id=1322}
1523
1524 @item
1525 should engravers be pluralized (note_heads_engraver) or not
1526 (note_head_engraver) ?
1527
1528 @item
1529 should we allow numbers in identifier names?  Issue:
1530 @uref{http://code.google.com/p/lilypond/issues/detail?id=1670}
1531
1532 @item
1533 should we officially allow accented characters?  in general, how
1534 do we feel about utf-8 stuff?
1535
1536 @item
1537 for the sake of completeness/simplicity, what about *disallowing*
1538 the "one-note" form of a music expression?  i.e. only allowing
1539 stuff like
1540 @verbatim
1541   \transpose c d { e1 }
1542   \transpose c d << e1 >>
1543 @end verbatim
1544
1545 and never allowing
1546 @verbatim
1547   \transpose c d e1
1548 @end verbatim
1549
1550 @item
1551 What should be the officially encouraged way of writing music for
1552 transposing instruments? Maybe it should be simplified?
1553 See http://lists.gnu.org/archive/html/lilypond-user/2011-07/msg00130.html
1554
1555 @end itemize
1556
1557
1558 @node Unsorted policies
1559 @section Unsorted policies
1560
1561 @subsubheading Language-specific mailing lists
1562
1563 A translator can ask for an official lilypond-xy mailing list once
1564 they've finished all @qq{priority 1} translation items.
1565
1566 @subsubheading Performing yearly copyright update (@qq{grand-replace})
1567
1568 At the start of each year, copyright notices for all source files
1569 should be refreshed by running the following command from the top of
1570 the source tree:
1571
1572 @example
1573 make grand-replace
1574 @end example
1575
1576 Internally, this invokes the script @file{scripts/build/grand-replace.py},
1577 which performs a regular expression substitution for old-year -> new-year
1578 wherever it finds a valid copyright notice.
1579
1580 Note that snapshots of third party files such as @file{texinfo.tex} should
1581 not be included in the automatic update; @file{grand-replace.py} ignores these
1582 files if they are listed in the variable @code{copied_files}.
1583
1584
1585 @subsubheading Push git access
1586
1587 Git access is given out when a contributor has a significant
1588 record of patches being accepted without problems.  If existing
1589 developers are tired of pushing patches for a contributor, we'll
1590 discuss giving them push access.  Unsolicited requests from
1591 contributors for access will almost always be turned down.
1592