From 69dfc2654316fbd40afe4a471a7536ce2678eb78 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 18 Jun 2025 14:49:41 -0700 Subject: [PATCH 1/5] 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. --- peps/pep-0772.rst | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 49a12955116..277f54b4f13 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -205,14 +205,15 @@ A Packaging Council election consists of the following phases: rights for other community-wide votes that may occur during that year. * **Phase 2**: Packaging Council Electors may nominate any individual for the Council election, including - themselves. Nominees do not need to be PSF members, but nominations must include information + themselves. Nominees must themselves be PSF members, and nominations must include information about the nominee's relevant affiliations. * **Phase 3**: Each Elector receives a ballot consisting of all eligible nominees, which Electors - use to cast their vote for the Packaging Council. They can assign zero to five stars to each - candidate. Voting is performed anonymously. The outcome of the vote is determined using the `STAR - voting system`_, modified to use the `Multi-winner Bloc STAR`_ approach. If a tie occurs, it may - be resolved by mutual agreement among the candidates, or else the winner will be chosen at random. + use to cast their vote for the Packaging Council. The mechanics of the election (i.e. the + software used to conduct the election, the algorithm used to determine the outcome of the vote, + etc.) are conducted by the PSF, in accordance with the `PSF bylaws`_ and its regular Board + election procedures. If a tie occurs, it may be resolved by mutual agreement among the + candidates, or else the winner will be chosen at random. Each phase will last two weeks. @@ -243,6 +244,10 @@ original cohort. Each Council member's term will be two years, from when their elections are finalized until the next elections for their cohort are finalized. +As Packaging Council elections will generally align with the timing of PSF Board elections, any +members elected in an "off cycle" Council election (such as the initial Council election) will +similarly serve until the next regular election for their cohort. + .. _whole-council: Only for elections of the entire Packaging Council (such as the initial Council election), the two @@ -285,7 +290,7 @@ packaging development could itself be harmful and erode trust. PSF staff members are not permitted to serve as members of the Packaging Council. -Currently serving Steering Council members are not permitted to concurrently serve as members of the Packaging +Serving Steering Council members are not permitted to concurrently serve as members of the Packaging Council. In a Council election, if more than two of the top five vote-getters work for the same employer, then only the @@ -294,10 +299,19 @@ elevated in the vote rank. This process is repeated until a valid Packaging Cou process a full Council cannot be formed, disqualified vote-getters are re-qualified in the rank order of their vote tally until a full Council can be formed. +If fewer than five members are to be elected, an analogous procedure is applied in order to +guarantee that no more than two members of the entire Packaging Council work for the same employer. + During a Packaging Council term, if changing circumstances cause this rule to be broken (for instance, due to a Council member changing employment), then one or more Council members must resign to remedy the issue, and the resulting vacancies can then be filled as `normal `_. +Code of Conduct +--------------- + +All Packaging Council Electors and Packaging Council members are subject to, and must abide by the +PSF `Code of Conduct`_, its enforcement procedures, and its remedies for adjudicated violations. + .. _electors: ========================== @@ -311,10 +325,13 @@ Responsibilities Packaging Council Electors participate in formal votes to elect the Packaging Council. The eligibility of Packaging Council Electors is equivalent to the Article IV, section 4.2 voting -membership defined in the `PSF Bylaws `_. Should those bylaws -change in the future, the eligibility of Packaging Council Electors will similarly change to match. -As with PSF voting membership, Packaging Council Electors must affirm their intention to vote in -Packaging Council elections every year. +membership defined in the `PSF bylaws`_. Should those bylaws change in the future, the eligibility +of Packaging Council Electors will similarly change to match. Packaging Council Electors must +affirm their intention to vote in Packaging Council elections in a manner and process similar to PSF +Board voting membership affirmations. + +PSF voting members may opt-out (annually or indefinitely) from Packaging Council elections +independently of their choice to vote in PSF Board elections. .. _process: @@ -358,10 +375,8 @@ Steering Council's elections. This PEP uses a cohort-based model, derived from the PSF Board's elections which enables continuity of members across a changing Council. -There is a trade-off between continuity of the Council and full reshuffles. This PEP -takes the position that continuity will be more valuable for the Python -Packaging domain, especially combined with the vote of no confidence, automatic -removal of inactive voters, and regular elections. +There is a trade-off between continuity of the Council and full reshuffles. This PEP takes the +position that continuity will be more valuable for the Python Packaging ecosystem. ------------------------------- Term limits for council members @@ -482,5 +497,5 @@ packaging user experience. .. _virtualenv: https://packaging.python.org/en/latest/key_projects/#virtualenv .. _Packaging Workgroup: https://wiki.python.org/psf/PackagingWG .. _User Success Workgroup: https://github.com/psf/user-success-wg/ -.. _STAR voting system: https://www.starvoting.org/ -.. _Multi-winner Bloc STAR: https://www.starvoting.org/multi_winner +.. _PSF bylaws: https://www.python.org/psf/bylaws/ +.. _Code of Conduct: https://policies.python.org/python.org/code-of-conduct/ From 23fa475e3b07c35f11bdeafca0242898641bdb74 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 24 Jun 2025 18:43:56 -0700 Subject: [PATCH 2/5] Update peps/pep-0772.rst Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- peps/pep-0772.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 277f54b4f13..27761760e91 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -205,7 +205,7 @@ A Packaging Council election consists of the following phases: rights for other community-wide votes that may occur during that year. * **Phase 2**: Packaging Council Electors may nominate any individual for the Council election, including - themselves. Nominees must themselves be PSF members, and nominations must include information + themselves. Nominees must themselves be PSF voting members, and nominations must include information about the nominee's relevant affiliations. * **Phase 3**: Each Elector receives a ballot consisting of all eligible nominees, which Electors From 001ca5649c54f82336bfe3f9e00a4e67e58728f6 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 24 Jun 2025 18:52:26 -0700 Subject: [PATCH 3/5] Fix the `PSF voting members` link --- peps/pep-0772.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 27761760e91..b898b6733f0 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -198,8 +198,8 @@ Election of the Packaging Council A Packaging Council election consists of the following phases: * **Phase 1**: Packaging Council Electors are determined by opt-in self-selection of the `PSF voting - members `_. The PSF voting membership is informed that Packaging Council ballots - will be available, and any PSF voting member can request a ballot. The PSF may choose to solicit + members`_. The PSF voting membership is informed that Packaging Council ballots will be + available, and any PSF voting member can request a ballot. The PSF may choose to solicit participation for both the PSF Board elections and Packaging Council elections at the same time. Packaging Council Electors retain their voting rights for the entire year, and may exercise such rights for other community-wide votes that may occur during that year. @@ -499,3 +499,4 @@ packaging user experience. .. _User Success Workgroup: https://github.com/psf/user-success-wg/ .. _PSF bylaws: https://www.python.org/psf/bylaws/ .. _Code of Conduct: https://policies.python.org/python.org/code-of-conduct/ +.. _PSF voting members: https://www.python.org/psf/membership/ From 9e18740344468e39e84ceb5888c326947c53b13d Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Sun, 29 Jun 2025 11:05:24 -0700 Subject: [PATCH 4/5] 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 --- peps/pep-0772.rst | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index b898b6733f0..ad876b20a22 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -304,7 +304,7 @@ guarantee that no more than two members of the entire Packaging Council work for During a Packaging Council term, if changing circumstances cause this rule to be broken (for instance, due to a Council member changing employment), then one or more Council members must resign to remedy the issue, and -the resulting vacancies can then be filled as `normal `_. +the resulting vacancies can then be filled as :ref:`normal `. Code of Conduct --------------- @@ -353,8 +353,8 @@ thirds of Electors express a lack of confidence, then the vote succeeds. There are two forms of no-confidence votes: those targeting a single member, and those targeting the Council as a whole. The initial call for a no-confidence vote must specify which type is intended. If a single-member vote succeeds, then that member is removed from the Council and the resulting vacancy can be handled by the -`normal process `_. If a whole-Council vote succeeds, the Council is dissolved and a new Council -election is triggered immediately, using the rules for `whole Council `_ elections. +:ref:`normal process `. If a whole-Council vote succeeds, the Council is dissolved and a new Council +election is triggered immediately, using the rules for :ref:`whole Council ` elections. ----------------------- Changing the governance @@ -405,11 +405,12 @@ on that work without paying any membership fee. Approval voting in the election ------------------------------- -An earlier non-public draft of this PEP used an approval voting process, which aligned with what :pep:`13` -stated at the time of writing. The Python core team has changed their governance to use Bloc STAR and this PEP -was updated to align with that for the same reasons as the core team's move to Bloc STAR: it better captures -voter intention in the results. It is also expected that the same election machinery can be used for both -elections. +An earlier non-public draft of this PEP used an approval voting process, which aligned with what +:pep:`13` stated at the time of writing. The Python core team has changed their governance to use +Bloc STAR, and this PEP was temporarily changed to use the same mechanism. However, since Packaging +Council elections will now be concurrent with PSF Board elections, with the same voting constituency +(i.e. PSF voting membership), and administered by the same returns officer, this PEP was updated to +align Packaging Council elections with PSF Board elections. ------------------------------------------------------------------ Disallow multiple people from the same organization on the council From 9acb712987fac234d238ca7f83e9ff86362e63d5 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Mon, 21 Jul 2025 09:26:19 -0700 Subject: [PATCH 5/5] Incorporate the latest round of PSF Board feedback --- peps/pep-0772.rst | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index ad876b20a22..44a608cee24 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -217,13 +217,12 @@ A Packaging Council election consists of the following phases: Each phase will last two weeks. -The Packaging Council election process is managed by a returns officer nominated by the Python -Steering Council. The PSF shall maintain records of the elections as well as run the annual -election for the Packaging Council. The Steering Council must certify the results of the election -and may work with the returns officer in whatever capacity is necessary to validate the integrity of -the election. Election transparency being of paramount importance for trust in the process, full -vote totals *before* any exclusions, while maintaining anonymity, should be made public when -technically possible. +The Packaging Council election process is managed by a returns officer nominated by the PSF Board. +The PSF shall maintain records of the elections as well as run the annual election for the Packaging +Council. The PSF Board must certify the results of the election and may work with the returns +officer in whatever capacity is necessary to validate the integrity of the election. Election +transparency being of paramount importance for trust in the process, full vote totals *before* any +exclusions, while maintaining anonymity, should be made public when technically possible. Quorum for Packaging Council votes (either cohort election or votes of no confidence) is 50% of Electors. @@ -271,8 +270,9 @@ If a Council member drops out of touch and cannot be contacted for a month or longer, then the rest of the Council may vote to replace them (with a simple majority vote, where the missing member is recorded as an abstention). -If a full Packaging Council cannot be seated by this process, the Python Steering Council can appoint new -Packaging Council members to fill the vacancies, or call for new Packaging Council elections. +If a full Packaging Council cannot be seated by this process, the PSF Board, in consultation with +the Python Steering Council, can appoint new Packaging Council members to fill the vacancies, or +call for new Packaging Council elections. Conflicts of interest --------------------- @@ -342,10 +342,11 @@ Vote of no confidence --------------------- In exceptional circumstances, a vote of no confidence may be called to remove a sitting Packaging -Council member, or the entire council. The Python Steering Council may call such votes of no +Council member, or the entire Council. The Python Steering Council may call such votes of no confidence, with no second being necessary. Anyone may request such a vote of no confidence from the Steering Council regardless of the requester's membership or affiliation, and the Steering -Council has full discretion to call for the vote or not. +Council has discretion to call for the vote or not. The PSF Board may overrule the Steering Council +to initiate a vote of no confidence. The vote of no confidence lasts for two weeks. Each Elector votes for or against. If at least two thirds of Electors express a lack of confidence, then the vote succeeds.