Differences between revisions 9 and 10
Revision 9 as of 2008-03-30 11:53:25
Size: 7084
Comment: small spelling, add another suggestion for "Assigning Tickets"
Revision 10 as of 2008-03-30 11:58:40
Size: 7212
Comment: section cleanup, misc. fixes
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
== Trac Tickets ==

=== Rules ===
== Reasons To Invalidate Trac Tickets ==
Line 13: Line 11:
  === Recommendations ===

 * '''Patches Preferred''':

== Reviewing Patches ==

 * '''100% Doctests''': New code must be 100% doctested. There is no way around this.
 * '''Bug Fixes Must Be Doctested''': The patch that fixes an issue must also contain a doctest specifically to test the problem. This is not always possible, so this is not enforced in certain situations.


= To Sort =

The following is mostly a copy & paste from the relevant sections of a talk mabshoff gave at SD5. They need to be edited and put into the right order.
Line 57: Line 41:
 * '''Patches Preferred''': Patches are easier to review, edit and can be merged without affecting the history. So we greatly prefer patches over bundles. If you do have a large number of patches a bundle can still be better than patches. One alternative to bundles is to use mercurial ques to flatten the history. That might or might not be desirable.

== Reviewing Patches ==

 * '''100% Doctests''': New code must be 100% doctested. There is no way around this.
 * '''Bug Fixes Must Be Doctested''': The patch that fixes an issue must also contain a doctest specifically to test the problem. This is not always possible, so this is not enforced in certain situations.

Trac Guidelines for Sage

Reasons To Invalidate Trac Tickets

  • One Issue Per Ticket: Ticket must cover only one issue and should not be a laundry list of unrelated issues. If a ticket covers more than one issue we cannot close it and while some of the patches have been applied to a given release the ticket would remain in limbo.

  • No Patch Bombs: Code that goes into Sage is peer reviewed. If you show up with an 80,000 line of code bundle that completely rips out a subsystem and replaces it with something else you can imagine that the review process will be a little tedious. These huge patch bombs are problematic for several reasons and we prefer small, gradual changes that are easy to review and apply. This is not always possible [coercion rewrite], but it is still highly recommended that you avoid this style of development unless there is no way around it.

  • Sage Specific: Sage's philosophy is that we ship everything [or close to it] in one source ball to make debugging possible. You can imagine the combinatorial explosion we would have to deal with if you replaced only ten components of Sage with external packages. Once you start replacing some of the more essential components of Sage that are commonly packaged [pari, GAP, lisp, gmp] it is no longer a problem that belongs in our tracker. If you distribution's pari package is buggy for example file a bug report with them. We are usually willing and able to solve the problem, but there are no guarantees that we will help you out. Looking at the open number of tickets that are Sage specific you hopefully will understand why.

  • No Support Discussions: The trac installation is not meant a system to track down problems when using Sage. Tickets should be clearly a bug and not "I tried to do X and I couldn't get it to work. How do I do this". That is usually not a bug in Sage and it is likely that sage-support can answer that question for you. If it turns out that you did hit a bug somebody will open a concise and to the point ticket.

  • No Closing Or Invalidating: Unless you have admin powers in trac [which includes all the people who have ever done releases of Sage] do not close tickets unless you are explicitly told to do so. Since we have email notification now this has become less of an issue. If you think that a ticket is invalid or has been fixed just comment on it and the current release manager will take a look and close it if appropriate. On exception to this rule is if you happen to open the same ticket multiple times in a row. Feel free to close the extras in that case.

  • Solution Must Be Achievable: Tickets must be achievable. Many times tickets that fall into this category usually ran afoul to some of the other rules listed above. A an example would be to "Make Sage the best CAS in the world". There is no metric to measure this properly and it is highly subjective. The ultimate goal of Sage development is world domination, but please don't open a ticket for that.

Milestones vs. Release

  • Milestones are usually goals to be met while working toward a release. In Sage's trac we use milestones instead of releases, but unless somebody volunteers to clean up all the old milestones we will stick with the current model. It doesn't make a whole lot of a difference if we use milestone instead of release.
  • Finely grained releases are good, release early and often is the way to go, especially as more and more patches are coming in.
  • It is a good idea to make a big release and schedule at least one more bugfix release after that to sort out the inevitable "doctest X is broken on distribution Y and compiler Z" problem. Given the number of compilers and operating systems out there one has to be realistic to expect problems. A compile farm would certainly help to catch issues early.

Opening Tickets

  • Before opening a ticket make sure that nobody else has opened a ticket about the same or closely related issue.
  • It is better to open several specific tickets than one that is very broad.
  • Be precise: If foo doesn't work on OSX, but is fine on Linux mention that in the title, also use the keyword option to make searches pick up the issue
  • Be careful with the priority: blocker should be used sparingly, don't be surprised that such a ticket is reclassified. On the other hand tickets that one might consider to be of non-blocker quality might be promoted. When in doubt write an email to sage-devel or ask around on #sage-devel.

Assigning Tickets

  • Each ticket must have a milestone assigned.
  • If a ticket has a patch or spkg that is ready to be reviewed assign it against the current milestone
  • defect vs. enhancement vs. task: this can be tricky, but a defect should be something that leads to an exception or a mathematically wrong result.
  • If you are unsure whom to assign to assign to somebody

  • Certain categories have default people that get assign all issues. One examples is mabshoff for memory leaks

  • If you have been assigned a ticket you should either accept it or assign it back to somebody or tbd. Many people do not accept pending tickets at the moment. You have accepted a ticket if your name has a star next to it.

Working On Tickets

  • Every bug fixed should result in a doctest: Example Zombie det() problem with LinBox, considered fixed twice, but reopened in both cases.

  • Cooperative debugging via IRC is faster by at least a magnitude. If you haven't learned how to use IRC please do so. If you have problems to use IRC because of firewalls, but you do have an account on sage.math you can use irssi via ssh there. If you have a flaky connection you can use it together with screen.
  • This is not an issue with defects, but there are many enhancements possible for Sage and too few developers to implement all the good ideas. But it is useful to keep ideas in a central place because in the google groups they tend to get lost once they drop off the first page.
  • If you are a developer be nice and try to solve a stale/old ticket every once in a while.
  • mhansen, mabshoff and some other people regularly do triage, especially before Bug Days. Triage in this context means that we look at new bugs and classify them according to our perceived priority. It is very likely that different people will see priorities of bugs very differently from us, so please let us know if you see a problem with specific tickets.
  • Patches Preferred: Patches are easier to review, edit and can be merged without affecting the history. So we greatly prefer patches over bundles. If you do have a large number of patches a bundle can still be better than patches. One alternative to bundles is to use mercurial ques to flatten the history. That might or might not be desirable.

Reviewing Patches

  • 100% Doctests: New code must be 100% doctested. There is no way around this.

  • Bug Fixes Must Be Doctested: The patch that fixes an issue must also contain a doctest specifically to test the problem. This is not always possible, so this is not enforced in certain situations.