Additions to the contributing document explaining our new decision-making process.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13962 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2010-09-29 17:56:27 +00:00
parent 89ea98ca56
commit 136bf00615
1 changed files with 76 additions and 20 deletions

View File

@ -812,6 +812,42 @@ repository:
Subversion and Trac so that any commit message in that format will Subversion and Trac so that any commit message in that format will
automatically post a comment to the appropriate ticket. automatically post a comment to the appropriate ticket.
Reverting commits
-----------------
Nobody's perfect; mistakes will be committed. When a mistaken commit is
discovered, please follow these guidelines:
* Try very hard to ensure that mistakes don't happen. Just because we
have a reversion policy doesn't relax your responsibility to aim for
the highest quality possible. Really: double-check your work before
you commit it in the first place!
* If possible, have the original author revert his/her own commit.
* Don't revert another author's changes without permission from the
original author.
* If the original author can't be reached (within a reasonable amount
of time -- a day or so) and the problem is severe -- crashing bug,
major test failures, etc -- then ask for objections on django-dev
then revert if there are none.
* If the problem is small (a feature commit after feature freeze,
say), wait it out.
* If there's a disagreement between the committer and the
reverter-to-be then try to work it out on the `django-developers`_
mailing list. If an agreement can't be reached then it should
be put to a vote.
* If the commit introduced a confirmed, disclosed security
vulnerability then the commit may be reverted immediately without
permission from anyone.
* The release branch maintainer may back out commits to the release
branch without permission if the commit breaks the release branch.
Unit tests Unit tests
========== ==========
@ -1159,11 +1195,8 @@ file. Then copy the branch's version of the ``django`` directory into
.. _path file: http://docs.python.org/library/site.html .. _path file: http://docs.python.org/library/site.html
Deciding on features How we make decisions
==================== =====================
Once a feature's been requested and discussed, eventually we'll have a decision
about whether to include the feature or drop it.
Whenever possible, we strive for a rough consensus. To that end, we'll often Whenever possible, we strive for a rough consensus. To that end, we'll often
have informal votes on `django-developers`_ about a feature. In these votes we have informal votes on `django-developers`_ about a feature. In these votes we
@ -1183,23 +1216,44 @@ Although these votes on django-developers are informal, they'll be taken very
seriously. After a suitable voting period, if an obvious consensus arises seriously. After a suitable voting period, if an obvious consensus arises
we'll follow the votes. we'll follow the votes.
However, consensus is not always possible. Tough decisions will be discussed by However, consensus is not always possible. If consensus cannot be reached, or
all full committers and finally decided by the Benevolent Dictators for Life, if the discussion towards a consensus fizzles out without a concrete decision,
Adrian and Jacob. we use a more formal process.
Any core committer (see below) may call for a formal vote using the same
voting mechanism above. A proposition will be considered carried by the core team
if:
* There are three "+1" votes from members of the core team.
* There is no "-1" vote from any member of the core team.
* The BDFLs haven't stepped in and executed their positive or negative
veto.
When calling for a vote, the caller should specify a deadline by which
votes must be received. One week is generally suggested as the minimum
amount of time.
Since this process allows any core committer to veto a proposal, any "-1"
votes (or BDFL vetos) should be accompanied by an explanation that explains
what it would take to convert that "-1" into at least a "+0".
Whenever possible, these formal votes should be announced and held in
public on the `django-developers`_ mailing list. However, overly sensitive
or contentious issues -- including, most notably, votes on new core
committers -- may be held in private.
Commit access Commit access
============= =============
Django has two types of committers: Django has two types of committers:
Full committers Core committers
These are people who have a long history of contributions to Django's These are people who have a long history of contributions to Django's
codebase, a solid track record of being polite and helpful on the mailing codebase, a solid track record of being polite and helpful on the
lists, and a proven desire to dedicate serious time to Django's development. mailing lists, and a proven desire to dedicate serious time to Django's
development. The bar is high for full commit access.
The bar is very high for full commit access. It will only be granted by
unanimous approval of all existing full committers, and the decision will err
on the side of rejection.
Partial committers Partial committers
These are people who are "domain experts." They have direct check-in access These are people who are "domain experts." They have direct check-in access
@ -1208,10 +1262,12 @@ Partial committers
is likely to be given to someone who contributes a large subframework to is likely to be given to someone who contributes a large subframework to
Django and wants to continue to maintain it. Django and wants to continue to maintain it.
Like full committers, partial commit access is by unanimous approval of all Partial commit access is granted by the same process as full
full committers (and any other partial committers in the same area). committers. However, the bar is set lower; proven expertise in the area
However, the bar is set lower; proven expertise in the area in question is in question is likely to be sufficient.
likely to be sufficient.
Decisions on new committers will follow the process explained above in `how
we make decisions`_.
To request commit access, please contact an existing committer privately. Public To request commit access, please contact an existing committer privately. Public
requests for commit access are potential flame-war starters, and will be ignored. requests for commit access are potential flame-war starters, and will be ignored.