Skip to content

Commit 8c82cb8

Browse files
warsawhugovk
andauthored
PEP 772: Updates based on DPO thread and author discussion w/PSF representatives (#4466)
* Updates based on DPO thread and author discussion w/PSF representatives * Nominees to the PC must now themselves be PSF members. * Take out mention of Bloc STAR and the detailed mechanics of the election process, in order to allow easier administration by the PSF staff. This lets them conduct elections using the same mechanics as Board elections, which currently is not Bloc STAR due to the unavailability of a suitable open source platform. * Describe "off cycle" elections since post-recall elections and the initial election will likely not align with the annual Board election. * Slight rewording of the admonition against sitting SC members from serving on the PC. * Describe what happens in partial (i.e. cohort) elections to ensure the "no two members from the same employer" rule. * Explicitly place the PC and its participants under the PSF CoC. * Explicitly mention that PSF voting members can opt out of PC elections independently of their choice to participate in Board elections. * Update peps/pep-0772.rst Co-authored-by: Hugo van Kemenade <[email protected]> * Fix the `PSF voting members` link * Fix some links and update some historical text Thanks to Stefan for pointing these issues out on DPO. https://discuss.python.org/t/pep-772-packaging-council-governance-process-round-2/93904/19 * Incorporate the latest round of PSF Board feedback --------- Co-authored-by: Hugo van Kemenade <[email protected]>
1 parent 2a0363a commit 8c82cb8

File tree

1 file changed

+55
-37
lines changed

1 file changed

+55
-37
lines changed

peps/pep-0772.rst

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -198,31 +198,31 @@ Election of the Packaging Council
198198
A Packaging Council election consists of the following phases:
199199

200200
* **Phase 1**: Packaging Council Electors are determined by opt-in self-selection of the `PSF voting
201-
members <voting-members>`_. The PSF voting membership is informed that Packaging Council ballots
202-
will be available, and any PSF voting member can request a ballot. The PSF may choose to solicit
201+
members`_. The PSF voting membership is informed that Packaging Council ballots will be
202+
available, and any PSF voting member can request a ballot. The PSF may choose to solicit
203203
participation for both the PSF Board elections and Packaging Council elections at the same time.
204204
Packaging Council Electors retain their voting rights for the entire year, and may exercise such
205205
rights for other community-wide votes that may occur during that year.
206206

207207
* **Phase 2**: Packaging Council Electors may nominate any individual for the Council election, including
208-
themselves. Nominees do not need to be PSF members, but nominations must include information
208+
themselves. Nominees must themselves be PSF voting members, and nominations must include information
209209
about the nominee's relevant affiliations.
210210

211211
* **Phase 3**: Each Elector receives a ballot consisting of all eligible nominees, which Electors
212-
use to cast their vote for the Packaging Council. They can assign zero to five stars to each
213-
candidate. Voting is performed anonymously. The outcome of the vote is determined using the `STAR
214-
voting system`_, modified to use the `Multi-winner Bloc STAR`_ approach. If a tie occurs, it may
215-
be resolved by mutual agreement among the candidates, or else the winner will be chosen at random.
212+
use to cast their vote for the Packaging Council. The mechanics of the election (i.e. the
213+
software used to conduct the election, the algorithm used to determine the outcome of the vote,
214+
etc.) are conducted by the PSF, in accordance with the `PSF bylaws`_ and its regular Board
215+
election procedures. If a tie occurs, it may be resolved by mutual agreement among the
216+
candidates, or else the winner will be chosen at random.
216217

217218
Each phase will last two weeks.
218219

219-
The Packaging Council election process is managed by a returns officer nominated by the Python
220-
Steering Council. The PSF shall maintain records of the elections as well as run the annual
221-
election for the Packaging Council. The Steering Council must certify the results of the election
222-
and may work with the returns officer in whatever capacity is necessary to validate the integrity of
223-
the election. Election transparency being of paramount importance for trust in the process, full
224-
vote totals *before* any exclusions, while maintaining anonymity, should be made public when
225-
technically possible.
220+
The Packaging Council election process is managed by a returns officer nominated by the PSF Board.
221+
The PSF shall maintain records of the elections as well as run the annual election for the Packaging
222+
Council. The PSF Board must certify the results of the election and may work with the returns
223+
officer in whatever capacity is necessary to validate the integrity of the election. Election
224+
transparency being of paramount importance for trust in the process, full vote totals *before* any
225+
exclusions, while maintaining anonymity, should be made public when technically possible.
226226

227227
Quorum for Packaging Council votes (either cohort election or votes of no confidence) is 50% of
228228
Electors.
@@ -243,6 +243,10 @@ original cohort.
243243
Each Council member's term will be two years, from when their elections are
244244
finalized until the next elections for their cohort are finalized.
245245

246+
As Packaging Council elections will generally align with the timing of PSF Board elections, any
247+
members elected in an "off cycle" Council election (such as the initial Council election) will
248+
similarly serve until the next regular election for their cohort.
249+
246250
.. _whole-council:
247251

248252
Only for elections of the entire Packaging Council (such as the initial Council election), the two
@@ -266,8 +270,9 @@ If a Council member drops out of touch and cannot be contacted for a month or
266270
longer, then the rest of the Council may vote to replace them (with a simple
267271
majority vote, where the missing member is recorded as an abstention).
268272

269-
If a full Packaging Council cannot be seated by this process, the Python Steering Council can appoint new
270-
Packaging Council members to fill the vacancies, or call for new Packaging Council elections.
273+
If a full Packaging Council cannot be seated by this process, the PSF Board, in consultation with
274+
the Python Steering Council, can appoint new Packaging Council members to fill the vacancies, or
275+
call for new Packaging Council elections.
271276

272277
Conflicts of interest
273278
---------------------
@@ -285,7 +290,7 @@ packaging development could itself be harmful and erode trust.
285290

286291
PSF staff members are not permitted to serve as members of the Packaging Council.
287292

288-
Currently serving Steering Council members are not permitted to concurrently serve as members of the Packaging
293+
Serving Steering Council members are not permitted to concurrently serve as members of the Packaging
289294
Council.
290295

291296
In a Council election, if more than two of the top five vote-getters work for the same employer, then only the
@@ -294,9 +299,18 @@ elevated in the vote rank. This process is repeated until a valid Packaging Cou
294299
process a full Council cannot be formed, disqualified vote-getters are re-qualified in the rank order of their
295300
vote tally until a full Council can be formed.
296301

302+
If fewer than five members are to be elected, an analogous procedure is applied in order to
303+
guarantee that no more than two members of the entire Packaging Council work for the same employer.
304+
297305
During a Packaging Council term, if changing circumstances cause this rule to be broken (for instance, due to
298306
a Council member changing employment), then one or more Council members must resign to remedy the issue, and
299-
the resulting vacancies can then be filled as `normal <vacancy>`_.
307+
the resulting vacancies can then be filled as :ref:`normal <vacancy>`.
308+
309+
Code of Conduct
310+
---------------
311+
312+
All Packaging Council Electors and Packaging Council members are subject to, and must abide by the
313+
PSF `Code of Conduct`_, its enforcement procedures, and its remedies for adjudicated violations.
300314

301315
.. _electors:
302316

@@ -311,10 +325,13 @@ Responsibilities
311325
Packaging Council Electors participate in formal votes to elect the Packaging Council.
312326

313327
The eligibility of Packaging Council Electors is equivalent to the Article IV, section 4.2 voting
314-
membership defined in the `PSF Bylaws <https://www.python.org/psf/bylaws/>`_. Should those bylaws
315-
change in the future, the eligibility of Packaging Council Electors will similarly change to match.
316-
As with PSF voting membership, Packaging Council Electors must affirm their intention to vote in
317-
Packaging Council elections every year.
328+
membership defined in the `PSF bylaws`_. Should those bylaws change in the future, the eligibility
329+
of Packaging Council Electors will similarly change to match. Packaging Council Electors must
330+
affirm their intention to vote in Packaging Council elections in a manner and process similar to PSF
331+
Board voting membership affirmations.
332+
333+
PSF voting members may opt-out (annually or indefinitely) from Packaging Council elections
334+
independently of their choice to vote in PSF Board elections.
318335

319336
.. _process:
320337

@@ -325,19 +342,20 @@ Vote of no confidence
325342
---------------------
326343

327344
In exceptional circumstances, a vote of no confidence may be called to remove a sitting Packaging
328-
Council member, or the entire council. The Python Steering Council may call such votes of no
345+
Council member, or the entire Council. The Python Steering Council may call such votes of no
329346
confidence, with no second being necessary. Anyone may request such a vote of no confidence from
330347
the Steering Council regardless of the requester's membership or affiliation, and the Steering
331-
Council has full discretion to call for the vote or not.
348+
Council has discretion to call for the vote or not. The PSF Board may overrule the Steering Council
349+
to initiate a vote of no confidence.
332350

333351
The vote of no confidence lasts for two weeks. Each Elector votes for or against. If at least two
334352
thirds of Electors express a lack of confidence, then the vote succeeds.
335353

336354
There are two forms of no-confidence votes: those targeting a single member, and those targeting the Council
337355
as a whole. The initial call for a no-confidence vote must specify which type is intended. If a single-member
338356
vote succeeds, then that member is removed from the Council and the resulting vacancy can be handled by the
339-
`normal process <vacancy>`_. If a whole-Council vote succeeds, the Council is dissolved and a new Council
340-
election is triggered immediately, using the rules for `whole Council <whole-council>`_ elections.
357+
:ref:`normal process <vacancy>`. If a whole-Council vote succeeds, the Council is dissolved and a new Council
358+
election is triggered immediately, using the rules for :ref:`whole Council <whole-council>` elections.
341359

342360
-----------------------
343361
Changing the governance
@@ -358,10 +376,8 @@ Steering Council's elections. This PEP uses a cohort-based model, derived from
358376
the PSF Board's elections which enables continuity of members across a changing
359377
Council.
360378

361-
There is a trade-off between continuity of the Council and full reshuffles. This PEP
362-
takes the position that continuity will be more valuable for the Python
363-
Packaging domain, especially combined with the vote of no confidence, automatic
364-
removal of inactive voters, and regular elections.
379+
There is a trade-off between continuity of the Council and full reshuffles. This PEP takes the
380+
position that continuity will be more valuable for the Python Packaging ecosystem.
365381

366382
-------------------------------
367383
Term limits for council members
@@ -390,11 +406,12 @@ on that work without paying any membership fee.
390406
Approval voting in the election
391407
-------------------------------
392408

393-
An earlier non-public draft of this PEP used an approval voting process, which aligned with what :pep:`13`
394-
stated at the time of writing. The Python core team has changed their governance to use Bloc STAR and this PEP
395-
was updated to align with that for the same reasons as the core team's move to Bloc STAR: it better captures
396-
voter intention in the results. It is also expected that the same election machinery can be used for both
397-
elections.
409+
An earlier non-public draft of this PEP used an approval voting process, which aligned with what
410+
:pep:`13` stated at the time of writing. The Python core team has changed their governance to use
411+
Bloc STAR, and this PEP was temporarily changed to use the same mechanism. However, since Packaging
412+
Council elections will now be concurrent with PSF Board elections, with the same voting constituency
413+
(i.e. PSF voting membership), and administered by the same returns officer, this PEP was updated to
414+
align Packaging Council elections with PSF Board elections.
398415

399416
------------------------------------------------------------------
400417
Disallow multiple people from the same organization on the council
@@ -482,5 +499,6 @@ packaging user experience.
482499
.. _virtualenv: https://packaging.python.org/en/latest/key_projects/#virtualenv
483500
.. _Packaging Workgroup: https://wiki.python.org/psf/PackagingWG
484501
.. _User Success Workgroup: https://github.com/psf/user-success-wg/
485-
.. _STAR voting system: https://www.starvoting.org/
486-
.. _Multi-winner Bloc STAR: https://www.starvoting.org/multi_winner
502+
.. _PSF bylaws: https://www.python.org/psf/bylaws/
503+
.. _Code of Conduct: https://policies.python.org/python.org/code-of-conduct/
504+
.. _PSF voting members: https://www.python.org/psf/membership/

0 commit comments

Comments
 (0)