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:
parent
95d98edde9
commit
de61996457
162
pep-8015.rst
162
pep-8015.rst
|
@ -162,8 +162,9 @@ organized.
|
||||||
The vote is reserved to core developers, is public, and is open for 1
|
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
|
week. Usually the core developer who proposes the promotion has to
|
||||||
describe the work and skills of the candidate in the description of the
|
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
|
vote. A contributor is only promoted if two thirds (``>= 2/3``) of
|
||||||
number of "-1"; other votes (null, "+0" and "-0") are ignored.
|
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
|
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
|
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
|
year. This way, a member will stay for one full Python release but the
|
||||||
committee composition will be updated frequently.
|
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
|
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
|
sure that important features reach completion. Their ability to pick PEP
|
||||||
delegates is meant to help them to achieve that goal.
|
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
|
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
|
When the Python Steering Committee decides that a PEP needs a wider
|
||||||
approval, a vote is organized.
|
approval, a vote is organized.
|
||||||
|
|
||||||
The vote is reserved to core developers, is announced 1 week in advance,
|
The vote is reserved to core developers, is public, is announced 1 week
|
||||||
and is open for 1 week. The PEP can still be updated during the 1 week
|
in advance, and is open for 1 week. The PEP can still be updated during
|
||||||
notice, but must not be modified during the vote. Such vote happens on
|
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
|
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
|
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
|
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
|
approved if two thirds (``>= 2/3``) of votes approve ("+1") the PEP.
|
||||||
(null, "+0" and "-0") are ignored.
|
Only "+1" and "-1" votes are accounted; other votes (ex: null, "-0",
|
||||||
|
"+0.5") are ignored.
|
||||||
|
|
||||||
|
|
||||||
Lack of Decision
|
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.
|
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
|
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,
|
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.
|
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,
|
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
|
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"
|
four fiths (``>= 4/5``) of votes approve ("+1") the change. Only "+1"
|
||||||
and "-0") are ignored.
|
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
|
Annex: Examples of Python Teams
|
||||||
|
@ -506,6 +569,17 @@ Version History
|
||||||
|
|
||||||
History of this PEP:
|
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
|
* Version 5: Election of Python Steering Committee Members uses secret
|
||||||
ballots
|
ballots
|
||||||
* Version 4:
|
* Version 4:
|
||||||
|
|
Loading…
Reference in New Issue