PEP 8015: Adjust votes (#828)

* Steering Committee: move Roles before Election
* Use Schulze viriant of the Condorcet method
* Suggest CIVS service for online voting
* Change required majority
* Add also a "Annex: Summary on votes" section.
* Company acquisition
This commit is contained in:
Victor Stinner 2018-11-03 02:48:43 +01:00 committed by GitHub
parent 95d98edde9
commit de61996457
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 118 additions and 44 deletions

View File

@ -162,8 +162,9 @@ organized.
The vote is reserved to core developers, is public, and is open for 1
week. Usually the core developer who proposes the promotion has to
describe the work and skills of the candidate in the description of the
vote. A contributor is only promoted if the number of "+1" exceed the
number of "-1"; other votes (null, "+0" and "-0") are ignored.
vote. A contributor is only promoted if two thirds (``>= 2/3``) of
votes approve ("+1") the promotion. Only "+1" and "-1" votes are
accounted; other votes (ex: null, "-0", "+0.5") are ignored.
If the candidate is promoted, usually they get a mentor for 1 month to
help them to handle new responsibilities. If the candidate is not
@ -183,39 +184,6 @@ Steering Committee members are elected for 3 years, a third of it is refreshed e
year. This way, a member will stay for one full Python release but the
committee composition will be updated frequently.
Election of Python Steering Committee Members
---------------------------------------------
The Python Steering Committee is composed of 3 people. They are elected
for three year terms, and each year a member is replaced. A committee
member can be a candidate for the seat they are leaving.
Committee members must be Python core developers. The vote is announced
3 weeks in advance: candidates have to apply during this period. The
vote is reserved to core developers and is open for 1 week. To avoid
self-censorship, the vote uses secret ballots: avoid the risk of
hostility from someone who may get more power (if they get elected).
The vote uses the `Condorcet method
<https://en.wikipedia.org/wiki/Condorcet_method>`_ to rank candidates.
It is important that the
members of the committee reflect the diversity of Python' users and
contributors. A small step to ensure that is to enforce that two members
cannot work for the same company (or subsidiaries of the same company).
In addition, to encourage more people to get involved, a core developer
can only be a committee member twice in their whole life (up to 6 years
total), it can be two mandates in a row.
To bootstrap the process, 3 members will be elected at the committee
creation. The first members will stay for 1, 2 or 3 years (3 years for
the candidate ranked at the first position, 1 year for the candidate
ranked at the third position).
If a committee member steps down, a new vote is organized to replaced them.
If the situation of a committee member changes in a way that no longer
satisfies the committee constraint (eg: they move to the same company as
another committee members), they have to resign.
Python Steering Committee Roles
-------------------------------
@ -240,6 +208,83 @@ The committee keeps the "vision" and consistency of Python. It also makes
sure that important features reach completion. Their ability to pick PEP
delegates is meant to help them to achieve that goal.
Election of Python Steering Committee Members
---------------------------------------------
The Python Steering Committee is composed of 3 members. They are elected
for three year terms, and each year a member is replaced. A committee
member can be a candidate for the seat they are leaving.
Committee members must be Python core developers. It is important that
the members of the committee reflect the diversity of Python' users and
contributors. A small step to ensure that is to enforce that two members
cannot work for the same company (or subsidiaries of the same company).
In addition, to encourage more people to get involved, a core developer
can only be a committee member twice in their whole life (up to 6 years
total), it can be two mandates in a row.
The vote is organized by the Steering Committee. It is announced 3 weeks
in advance: candidates have to apply during this period. The vote is
reserved to core developers and is open for 1 week. To avoid
self-censorship, the vote uses secret ballots: avoid the risk of
hostility from someone who may get more power (if they get elected).
The vote uses the `Schulze/Beatpath/CSSD variant
<https://en.wikipedia.org/wiki/Schulze_method>`_ of the `Condorcet
method <https://en.wikipedia.org/wiki/Condorcet_method>`_ using an
online service like `Condorcet Internet Voting Service (CIVS)
<https://civs.cs.cornell.edu/>`_. This voting method reduces the risk of
tie. It also produces a ranking of all candidates, needed for the
creation of the committee.
In case of tie, a new vote is organized immediately between candidates
involved in the tie using the same voting method and also during 1 week.
If the second vote leads to a tie again, the current Steering Committee
is responsible to seleect the elected member.
If a committee member steps down, a new vote is organized to replace them.
If the situation of a committee member changes in a way that no longer
satisfies the committee constraint (eg: they move to the same company as
another committee member), they have to resign. If the employer is
member is acquired by the employer of another member, the member with
the mandate ending the first has to resign once the acquisition
completes.
Election Creating the Python Steering Committee Members
-------------------------------------------------------
To bootstrap the process, 3 members will be elected at the committee
creation. The vote follow the same rules than regular committee votes,
except that the election needs 3 members, and the vote is organized by
the PSF Board.
If two candidates that should be elected are working for the same
company, only the first in the vote result is elected, the second is not
elected, but the following candidate in the order of the vote result is
elected.
In case of tie, a second vote is organized immediately between
candidates involved in the tie and following candidates to fill the
remaining seats. The vote follows the same rules as the regular
committee vote. If the second vote still result in a tie, the PSF Board
is responsible to elect members and decide their position in the vote
result.
The order in the vote result must be unique for elected members: the
first is elected for 3 years, the second for 2 years, and the third for
1 year.
Example of vote result with a tie:
* A
* B, C
* D
* E
* ...
Candidate A is elected immediately, but a second vote is organized
between B and C. If A and B are working for the same company, A (1st), C
(2nd) and D (3rd) are elected, but B is not elected.
Special Case: Steering Committee Members And PEPs
-------------------------------------------------
@ -331,14 +376,16 @@ Vote on a PEP
When the Python Steering Committee decides that a PEP needs a wider
approval, a vote is organized.
The vote is reserved to core developers, is announced 1 week in advance,
and is open for 1 week. The PEP can still be updated during the 1 week
notice, but must not be modified during the vote. Such vote happens on
The vote is reserved to core developers, is public, is announced 1 week
in advance, and is open for 1 week. The PEP can still be updated during
the 1 week notice, but must not be modified during the vote. Such vote
happens on
the mailing list where the PEP has been discussed. The committee decides
when the vote is organized. The PEP must have been discussed for a
reasonable amount of time before it is put to vote. A PEP is only
approved if the number of "+1" exceed the number of "-1"; other votes
(null, "+0" and "-0") are ignored.
approved if two thirds (``>= 2/3``) of votes approve ("+1") the PEP.
Only "+1" and "-1" votes are accounted; other votes (ex: null, "-0",
"+0.5") are ignored.
Lack of Decision
@ -351,8 +398,8 @@ the obvious risk is that Python fails to evolve.
That's fine. Sometimes, doing nothing is the wisest choice.
How to update this PEP
======================
Change this PEP
===============
The first version of this PEP has been written after Guido van Rossum
decided to resign from his role of BDFL in July 2018. Before this PEP,
@ -365,8 +412,24 @@ announced 3 weeks in advance, is reserved to core developers, happens in
public on the python-committers mailing list, and is open for 1 week.
The proposed PEP change can still be updated during the 3 weeks notice,
but must not be modified during the vote. The change is only approved if
the number of "+1" exceed the number of "-1"; other votes (null, "+0"
and "-0") are ignored.
four fiths (``>= 4/5``) of votes approve ("+1") the change. Only "+1"
and "-1" votes are accounted; other votes (ex: null, "-0", "+0.5") are
ignored.
Annex: Summary on votes
=======================
====================== ======= ====== ======= =================================
Vote Notice Open Ballot Method
====================== ======= ====== ======= =================================
Promote contributor none 1 week public ``>= 2/3`` majority
PEP 1 week 1 week public ``>= 2/3`` majority
Steering Committee 3 weeks 1 week private Condorcet (Schulze/Beatpath/CSSD)
Change this PEP 3 weeks 1 week public ``>= 4/5`` majority
====================== ======= ====== ======= =================================
All these votes are reserved to core developers.
Annex: Examples of Python Teams
@ -506,6 +569,17 @@ Version History
History of this PEP:
* Version 6: Adjust votes
* Specify the Condorcet method: use Schulze/Beatpath/CSSD variant to
elect Python Steering Committee members. Specify how to deal with
tie and the constraint on the employers.
* Vote on promoting a contributor and on PEPs now requires ``>= 2/3``
rather than ``50%+1``.
* Vote on changing this PEP now requires ``>= 4/5`` rather than
``50%+1``.
* Explain how to deal with a company acquisition.
* Version 5: Election of Python Steering Committee Members uses secret
ballots
* Version 4: