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