From 2f50c7a3f26c7d0ef5c04427ff583f1e2f83bd40 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 20 May 2025 11:07:34 -0400 Subject: [PATCH 01/12] Updates based on conversations at PyCon * Align PPC Electors with PSF voting members as described in the PSF bylaws. Rather than the previous categories, this approach is generally deemed to be both equitable and workable. * Update the mechanics and timeline of PPC elections, into three phases: self-selection of Electors, nominations of Council members, voting * Remove the language around initial membership and adding a new member, as these are no longer necessary. * Add language about the call for deanonymization of ballots in cases where foul play is suspected. * Clarify the PSC's role in approving changes to this PEP, and responsibilities in certain corner cases of the election process. * Explicitly disallow PSC members from concurrently serving on the PPC. * Clarify language around the expectation of the PSC and PSF to adjust existing standing delegations * Unify language around "Packaging Council Electors" rather than "voting members" * Added an acknowledgments section * Various spelling, grammar, and wording fixes --- peps/pep-0772.rst | 331 ++++++++++++++++++++++++---------------------- 1 file changed, 171 insertions(+), 160 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 1dd3e9b6586..787ad16dbf7 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -43,7 +43,7 @@ the PyPA and the tooling maintained by the PyPA became the baseline tooling for Python packaging, with additional package ecosystems using and building on top of the tools and interoperability standards maintained by the PyPA. -:pep:`609` formalised PyPA's authority over the existing packaging tools, the +:pep:`609` formalized the PyPA's authority over the existing packaging tools, the interoperability standards and their operation as a group of independent projects under the same umbrella that aim to be interoperable. It also stated that PyPA should be expected to provide opinions, insight and experience when @@ -111,13 +111,13 @@ offer more tactical work, longer term strategic vision, and fundraising support to all parts of this ecosystem. Some expectations around the formation of a Packaging Council are that they -will facilitate: +will: * Work with PSF staff and the newly formed `User Success Workgroup`_ toward improving the user experience around packaging. -* A more stable packaging ecosystem that is more responsive to community input. -* Increased transparency and clearer shared goals for the packaging ecosystem. -* Increased tactical and fundraising support from the PSF, to increase capacity +* Facilitate a more stable packaging ecosystem that is more responsive to community input. +* Increase transparency and clearly share the goals for the packaging ecosystem. +* Facilitate tactical and fundraising support from the PSF, to increase capacity and funding available to packaging tools. ============= @@ -136,8 +136,8 @@ Mandate The council shall work to: * Maintain the quality and stability of the Python packaging standards. -* Formalise and maintain the relationship with the core team as well as the - PSF. +* Formalize and maintain the relationship with the Python core team as well as the + Python Software Foundation. * Establish appropriate decision-making processes. * Improve Python packaging's user experience. * Make contributing as accessible, inclusive, and sustainable as possible. @@ -157,22 +157,22 @@ The council shall: * Look for ways to use their direct authority as little as possible - seeking consensus and consent over voting. -To use its powers, the council votes. Every council member must either vote or -explicitly abstain. Members with conflicts of interest on a particular vote -must abstain. Passing requires support from a majority of non-abstaining -council members. +To use its powers, the Packaging Council votes. Every Council member must either vote or explicitly +abstain. Members with conflicts of interest on a particular vote must abstain. Passing requires +support from a majority of non-abstaining Council members. -Whenever possible, the council is expected to share its decisions and processes +Whenever possible, the Packaging Council is expected to share its decisions and processes publicly in a timely fashion. Delegations ----------- The Packaging Council gains its authority over packaging matters via delegation from the Python -Steering Council. Upon acceptance of this PEP, the Steering Council will formally issue a standing -delegation to the Packaging Council for PEPs related to Python packaging. The bodies would work -together on issues that intersect the packaging domain and language stewardship (including the -CPython implementation, standard library, and distribution). +Steering Council. Upon acceptance of this PEP, the Steering Council is expected to formally issue a +standing delegation to the Packaging Council for PEPs related to Python packaging, superseding the +existing individual standing delegations. The bodies would work together on issues that intersect +the packaging domain and language stewardship (including the CPython implementation, standard +library, and distribution). The PSF Board is encouraged to formally deactivate the Packaging Workgroup and the Packaging Council would take on the responsibilities of the PSF's Packaging @@ -184,201 +184,191 @@ making process that governs the technical projects under the PyPA umbrella. Processes ========= -Election of the council ------------------------ +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 + are available, and any PSF voting member can request the 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. + +* **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 + about the nominee's relevant affiliations. -A council election consists of two phases: +* **Phase 3**: Each Elector uses their ballot to cast their vote for the 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. -* Phase 1: A :ref:`voting member ` can nominate any individual for the council - elections, including themselves. Nominations must include information about the nominee's - relevant affiliations. Nominees for the Packaging Council do not need to be voting members. -* Phase 2: Each voting member 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. +Each phase will last two weeks. -Each phase should last two weeks. +The Packaging Council election process is managed by one Returning 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 election process is managed by one Returning Officer nominated by the -outgoing Packaging Council. For the initial election, the Returning Officer -will be nominated by the PSF Executive Director. +Ballots are ordinarily kept anonymous to all (including the Returning Officer) but with sufficient information +to deanonymize them. Deanonymization requires a supermajority (two-thirds) vote of at least two of the Python +Steering Council, the PSF Board, and the current Packaging Council. Deanonymization must only be done to +investigate the possibility of coordinated/inauthentic activity in the Packaging Council election that does +not, in the view of the bodies that vote to deanonymize, accurately represent the Python Packaging community. +The proposal to deanonymize must identify to whom ballot identities are revealed (which cannot be the general +public). "Anonymous" in this context shall be deemed to include software that can show identities to the +Returning Officer or their designees in response to explicit user action, provided it does not show it by +default. + +It is expected that any deanonymization request acted on will be followed by a proposal to change this PEP in +order to address any identified irregularities that precipitated such a request. -The PSF shall maintain records of the elections as well as run the annual -election for the council. Term ---- -There shall be two cohorts of council members: Cohort A composed of two members +There shall be two cohorts of Council members: Cohort A composed of two members and Cohort B composed of three members. -Each council member shall be elected for a two-year term, unless they are -replacing a council member that resigned, was removed, or otherwise becomes +Each Council member shall be elected for a two-year term, unless they are +replacing a Council member that resigned, was removed, or otherwise becomes vacant, in which case such replacement members shall be elected to a term sufficient to complete a two-year term as measured from the term of the original cohort. -Each council member's term will be two years, from when their elections are -finalised until the next elections for their cohort are finalised. +Each Council member's term will be two years, from when their elections are +finalized until the next elections for their cohort are finalized. + +.. _whole-council: + +Only for elections involving the entire Packaging Council (such as the initial Council election), the two +candidates receiving the highest number of votes shall be designated Cohort A with a two year term, and the +three candidates receiving the next highest number of votes shall be designated Cohort B with a one year term. -Only for elections involving the entire council (like the initial council -election), the two candidates receiving the highest number of votes shall be -designated Cohort A with a two year term, and the three candidates receiving -the highest number of votes after shall be designated Cohort B with a one year -term. +There are no term limits for individual Council members. -There are no term limits for individual council members. +.. _vacancy: Vacancies --------- -Council members may resign their position at any time. +Packaging Council members may resign their position at any time. -Whenever there is a vacancy during the regular council term, the council may +Whenever there is a vacancy during the regular Packaging Council term, the Council may vote to appoint a replacement to serve out the rest of the term. -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 +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. + Conflicts of interest --------------------- -No more than two Packaging Council members should be employed by or -significantly affiliated with the same entity. An entity is a company, a -company and its subsidiaries, or another incorporated entity such as a -non-profit or educational institution with its own mission and goals. PSF -members are explicitly exempt from this restriction, but *not* PSF directors -or officers. +No more than two Packaging Council member may be employed by or significantly affiliated with the same +entity. An entity is a company and its subsidiaries, or another incorporated entity such as a non-profit or +educational institution with its own mission and goals. Significant affiliation includes, at the least, +receiving wages for current work, officer/director roles, and 25% or more ownership stake. PSF membership at +any member class (as defined by Article IV of the PSF bylaws) does not count as an affiliation for this +purpose. -While we trust council members to act in the best interests of Python rather -than themselves or their employers, the mere appearance of any one company -dominating Python development could itself be harmful and erode trust. +While we expect and trust Packaging Council members to act in the best interests of Python rather than +themselves or their affiliations, the mere appearance of any one such organization dominating Python +development could itself be harmful and erode trust. -PSF staff members are not permitted to be members of the Packaging Council. +PSF staff members are not permitted to 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 whichever of them ranked lowest is disqualified and the -6th-ranking candidate moves up into 5th place; this is repeated until a valid -council is formed. +Currently serving Steering Council members are not permitted to concurrently serve as members of the Packaging +Council. -During a 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. +In a Council election, if more than two of the top five vote-getters work for the same employer, then only the +top two such vote-getters are elected and the others are disqualified, with the remaining vote-getters +elevated in the vote rank. This process is repeated until a valid Packaging Council is formed. If after this +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. -.. _voting-member: +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 `_. --------------- -Voting members --------------- +.. _electors: -Responsibility -============== +========================== +Packaging Council Electors +========================== + +---------------- +Responsibilities +---------------- -Voting members participate in formal votes to elect the Packaging Council. +Packaging Council Electors participate in formal votes to elect the Packaging Council. .. _process: Processes ========= -Initial membership ------------------- - -Initial set of voting members will include anyone who has taken the time to -formalise their participation in the packaging community. This includes: - -* PyPA members: Anyone with the triage bit or commit bit, or at least one - project in the PyPA organisation. -* Packaging workgroup members: Anyone who is listed on the Packaging WG charter - who is willing to participate is welcome. -* Interested core team members: Any Python core team member who is willing to - participate is welcome. -* Wider community members: An initial set of for-profit companies, nonprofit - organizations, academic or educational institutions and smaller unaffiliated - projects would be invited to nominate three individuals to represent them. - See :ref:`the initial set of community voting members `. - -Adding a new member -------------------- - -New voting members are added by a simple majority vote by the current -membership. Quorum for adding new members is 50%. - -A vote to add a new member is triggered when a voting member calls for one -publicly on an appropriate communication channel, and another voting member -seconds the call within two weeks. - -The vote lasts for one week. Each member can vote for or against. - Removal of a member ------------------- -In order to maintain a reasonable expectation of quorum, failure to participate -in Packaging Council elections for two consecutive council elections -automatically removes a person from the list of voting members, until they -re-submit their intention to resume their participation to the Packaging -Council in writing. +In order to maintain a reasonable expectation of quorum, failure to participate in Packaging Council elections +for two consecutive council elections automatically removes a person from the list of Packaging Council +Electors, until they re-submit their intention to resume their participation to the Packaging Council in +writing. -In exceptional circumstances, it may be necessary to remove someone from the -voting members against their will (for example: egregious and ongoing code of -conduct violations). A voting member may be removed by a two-thirds majority -vote by the Packaging Council (in practice: 4:1 for a council with five -members). +In exceptional circumstances, it may be necessary to remove someone from the Electors against their will (for +example: egregious and ongoing code of conduct violations). An Elector may be removed by a two-thirds majority +vote by the Packaging Council (in practice: 4:1 for a council with five members). -If the relevant voting member is also on the Packaging Council, then they can -participate in the vote. They are removed from the Packaging Council if the -vote removes them as a voting member. The vacancy is filled as per the process -for filling vacancies in the Packaging Council. +If the relevant Elector is also on the Packaging Council, then they can participate in the vote. They are +removed from the Packaging Council if the vote removes them as an Elector. The vacancy is filled as per the +`normal process `_. Vote of no confidence --------------------- -In exceptional circumstances, the voting members may remove a sitting council -member, or the entire council, via a vote of no confidence. +In exceptional circumstances, the Electors may remove a sitting Council member, or the entire Council, via a +vote of no confidence. -A no-confidence vote is triggered when a voting member calls for one publicly -on an appropriate public communication channel, and another voting member -seconds the call within one week. +A no-confidence vote is triggered when an Elector calls for one publicly on an appropriate public +communication channel, and another Elector seconds the call within one week. -The vote lasts for two weeks. Each voting member votes for or against. If at -least two thirds of voters express a lack of confidence, then the vote -succeeds. Quorum for a vote of no confidence is 50%. +The vote 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. Quorum for a vote of no confidence is 50% of Electors. -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 in the usual way. If a whole-council vote succeeds, the -council is dissolved and a new council election is triggered immediately. +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. ----------------------- Changing the governance ----------------------- -Changes to this governance model, once it is accepted, will require at least a -two-thirds majority of votes cast in a vote, which should be open for two -weeks. +Changes proposed to this governance model must be approved by the Python Steering Council. ============== Rejected Ideas ============== ---------------------------------------- -Annual elections for all council members +Annual elections for all Council members ---------------------------------------- -An annual term for council members is the approach taken for the Python +An annual term for Council members is the approach taken for the Python 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. +Council. -There is a trade-off between continuity of the council and reshuffles. This PEP +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 space, especially combined with the vote of no confidence, automatic -removal of inactive voters and regular elections. +Packaging domain, especially combined with the vote of no confidence, automatic +removal of inactive voters, and regular elections. ------------------------------- Term limits for council members @@ -388,28 +378,36 @@ While this is viewed as valuable for boards in general, this was rejected because of the size of the pool of interested and qualified people who might serve. +------------------- +Elector eligibility +------------------- + +Previous iterations of this PEP's draft proposed different membership rules for identifying the Packaging +Council Electors. After extensive discussion among stakeholders, and after seeking the widest possible +feedback, the PEP authors agreed that aligning Packaging Council Electors with PSF Board voting membership was +both the most equitable and most workable arrangement. + ------------------------------- 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. +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. ------------------------------------------------------------------ -Disallow multiple people from the same organisation on the council +Disallow multiple people from the same organization on the council ------------------------------------------------------------------ This PEP currently mirrors the Python Steering Council's limit, that at most two individuals related to a single organisation can be on the council. -Limiting it to one is workable; although it hasn't come up in the SC, people do -move around, and we wouldn't want good candidates to either make employment -decisions based on PC membership, or have to resign based on an employment -change. Limiting it to a maximum of two, plus votes of no confidence is -probably sufficient safety from any undue employer influence. +Limiting it to one is workable; although it hasn't come up in the Steering Council, people do move around, and +we wouldn't want good candidates to either make employment decisions based on Packaging Council membership, or +have to resign based on an employment change. Limiting it to a maximum of two, plus votes of no confidence is +likely sufficient to avoid any undue employer influence. --------------------------------------------------------------------------- Establishing specific processes for Packaging Council and PyPA relationship @@ -417,7 +415,18 @@ Establishing specific processes for Packaging Council and PyPA relationship As noted in the abstract, the focus of this PEP is on providing a minimal-but-solid foundation for further governance decisions. The specifics of -this relationship would be figured out by the inaugural council. +this relationship would be figured out by the inaugural Council. + +.. _electors: + +========================== +Packaging Council Electors +========================== + +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 similar change to match. As with PSF voting membership, +Packaging Council Electors must affirm their intention to vote in Packaging Council elections every year. .. _appendix_a: @@ -439,7 +448,7 @@ To that end, the process for approval for this PEP will be: .. _appendix_b: =================================================== -Appendix B: Operational suggestions for the council +Appendix B: Operational suggestions for the Council =================================================== This section is based on what the PEP's authors view as things that would be @@ -448,7 +457,7 @@ These are non-binding yet strongly encouraged. The PSF will designate a staff person to be the Packaging Council's official liaison who will regularly attend meetings, since it is expected that the -Packaging Council will meet on a regular basis (twice a month). +Packaging Council will meet on a regular basis (e.g. twice a month). * Coordinate with the Steering Council on PEPs that need input from both groups. @@ -467,14 +476,16 @@ Packaging Council will meet on a regular basis (twice a month). * Provide casual real-time opportunities for people to bring topics that are not PEPs, like office hours, a forum channel, or panels at Python events. -.. _appendix_c: - -==================================================== -Appendix C: Initial list of community voting members -==================================================== +=============== +Acknowledgments +=============== -This appendix will list the initial set of community voting members once the :ref:`process of -selecting ` those community members has been completed. +The language and spirit of this PEP is the work of many committed and passionate contributors across +the entire Python packaging ecosystem. The PEP authors wish to thank everyone who has participated +and provided input, and we sincerely believe that this PEP and its intended outcomes are much better +because of that participation. This PEP is just one (albeit important) step, and we encourage and +celebrate the ongoing contributions of all Python packaging stakeholders toward an ever-improving +packaging user experience. .. _Python Packaging Authority (PyPA): https://packaging.python.org/en/latest/glossary/#term-Python-Packaging-Authority-PyPA From 98ac01e0da446b8d47cf67c740917448641734a1 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 20 May 2025 11:24:19 -0400 Subject: [PATCH 02/12] Fix duplicate anchor --- peps/pep-0772.rst | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 787ad16dbf7..3f4efd53777 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -307,6 +307,11 @@ 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 similar change to match. As with PSF voting membership, +Packaging Council Electors must affirm their intention to vote in Packaging Council elections every year. + .. _process: Processes @@ -417,17 +422,6 @@ As noted in the abstract, the focus of this PEP is on providing a minimal-but-solid foundation for further governance decisions. The specifics of this relationship would be figured out by the inaugural Council. -.. _electors: - -========================== -Packaging Council Electors -========================== - -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 similar change to match. As with PSF voting membership, -Packaging Council Electors must affirm their intention to vote in Packaging Council elections every year. - .. _appendix_a: ========================================= From feb27656092310110b2a5b2a2747c88006dba34d Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 20 May 2025 10:42:37 -0700 Subject: [PATCH 03/12] 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 3f4efd53777..9f07f3112a2 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -269,7 +269,7 @@ Packaging Council members to fill the vacancies, or call for new Packaging Counc Conflicts of interest --------------------- -No more than two Packaging Council member may be employed by or significantly affiliated with the same +No more than two Packaging Council members may be employed by or significantly affiliated with the same entity. An entity is a company and its subsidiaries, or another incorporated entity such as a non-profit or educational institution with its own mission and goals. Significant affiliation includes, at the least, receiving wages for current work, officer/director roles, and 25% or more ownership stake. PSF membership at From 90c562289c2501f6134eefccea5ae62a9dbf3100 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 20 May 2025 10:43:32 -0700 Subject: [PATCH 04/12] 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 9f07f3112a2..2dff6020135 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -321,7 +321,7 @@ Removal of a member ------------------- In order to maintain a reasonable expectation of quorum, failure to participate in Packaging Council elections -for two consecutive council elections automatically removes a person from the list of Packaging Council +for two consecutive Council elections automatically removes a person from the list of Packaging Council Electors, until they re-submit their intention to resume their participation to the Packaging Council in writing. From c726967e25bc54c16f02b2dc13eafb20a39f7438 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 20 May 2025 10:43:48 -0700 Subject: [PATCH 05/12] 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 2dff6020135..9db3f7b9035 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -327,7 +327,7 @@ writing. In exceptional circumstances, it may be necessary to remove someone from the Electors against their will (for example: egregious and ongoing code of conduct violations). An Elector may be removed by a two-thirds majority -vote by the Packaging Council (in practice: 4:1 for a council with five members). +vote by the Packaging Council (in practice: 4:1 for a Council with five members). If the relevant Elector is also on the Packaging Council, then they can participate in the vote. They are removed from the Packaging Council if the vote removes them as an Elector. The vacancy is filled as per the From bf72ee07237e1a4195e50a5d2d97b9c3c60e3c4f Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 12:54:28 -0700 Subject: [PATCH 06/12] Update peps/pep-0772.rst Co-authored-by: Geoffrey Thomas --- 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 9db3f7b9035..e168fa198fa 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -272,7 +272,7 @@ Conflicts of interest No more than two Packaging Council members may be employed by or significantly affiliated with the same entity. An entity is a company and its subsidiaries, or another incorporated entity such as a non-profit or educational institution with its own mission and goals. Significant affiliation includes, at the least, -receiving wages for current work, officer/director roles, and 25% or more ownership stake. PSF membership at +receiving compensation for current work, officer/director roles, and 25% or more ownership stake. PSF membership at any member class (as defined by Article IV of the PSF bylaws) does not count as an affiliation for this purpose. From d9fb30ffa30b258ec1ea6f89ae01c21cace3caac Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 13:27:49 -0700 Subject: [PATCH 07/12] Update peps/pep-0772.rst Co-authored-by: Geoffrey Thomas --- 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 e168fa198fa..ec11aca15a8 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -309,7 +309,7 @@ Packaging Council Electors participate in formal votes to elect the Packaging Co 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 similar change to match. As with PSF voting membership, +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. .. _process: From 61d6b8996cfba8056dfcbf5c8ce42e63be27ec66 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 14:03:04 -0700 Subject: [PATCH 08/12] Update peps/pep-0772.rst Co-authored-by: Geoffrey Thomas --- peps/pep-0772.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index ec11aca15a8..38228e06f4b 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -351,6 +351,11 @@ vote succeeds, then that member is removed from the Council and the resulting va `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. +If a no-confidence vote fails, another identical no-confidence +vote (that is, of the same form, and against the same member for +the first form) may not be raised for six months from the initial +call. + ----------------------- Changing the governance ----------------------- From 09bb8c719cead3e22c5fc2e356fd1e93a8bee3c7 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 14:11:25 -0700 Subject: [PATCH 09/12] Update peps/pep-0772.rst Co-authored-by: Geoffrey Thomas --- peps/pep-0772.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index 38228e06f4b..c605fac9ddc 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -395,7 +395,8 @@ Elector eligibility Previous iterations of this PEP's draft proposed different membership rules for identifying the Packaging Council Electors. After extensive discussion among stakeholders, and after seeking the widest possible feedback, the PEP authors agreed that aligning Packaging Council Electors with PSF Board voting membership was -both the most equitable and most workable arrangement. +both the most workable arrangement and the most equitable approach +to include all parts of the Python packaging community. ------------------------------- Approval voting in the election From d7dd8a9976227782fcd910a8d061e7d60c9c5119 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 14:15:22 -0700 Subject: [PATCH 10/12] Update peps/pep-0772.rst Co-authored-by: Carol Willing --- 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 c605fac9ddc..a9ea167bf1f 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -136,7 +136,7 @@ Mandate The council shall work to: * Maintain the quality and stability of the Python packaging standards. -* Formalize and maintain the relationship with the Python core team as well as the +* Formalize and maintain the working relationships with the Python core team as well as the Python Software Foundation. * Establish appropriate decision-making processes. * Improve Python packaging's user experience. From f72ae4c35a6329fd52bfb1b5b032366a7631e383 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 14:23:20 -0700 Subject: [PATCH 11/12] Update peps/pep-0772.rst Co-authored-by: Carol Willing --- 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 a9ea167bf1f..d73639f0f8d 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -278,7 +278,7 @@ purpose. While we expect and trust Packaging Council members to act in the best interests of Python rather than themselves or their affiliations, the mere appearance of any one such organization dominating Python -development could itself be harmful and erode trust. +packaging development could itself be harmful and erode trust. PSF staff members are not permitted to serve as members of the Packaging Council. From 59872c9d7e09011709dcc19fa54710f577ca0afe Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 21 May 2025 17:31:11 -0400 Subject: [PATCH 12/12] Many updates based on GH review --- peps/pep-0772.rst | 93 +++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 51 deletions(-) diff --git a/peps/pep-0772.rst b/peps/pep-0772.rst index d73639f0f8d..727583595bd 100644 --- a/peps/pep-0772.rst +++ b/peps/pep-0772.rst @@ -115,6 +115,8 @@ will: * Work with PSF staff and the newly formed `User Success Workgroup`_ toward improving the user experience around packaging. +* Pronounce on and promote APIs, protocols, interfaces, and other interoperable standards relevant + to Python packaging. * Facilitate a more stable packaging ecosystem that is more responsive to community input. * Increase transparency and clearly share the goals for the packaging ecosystem. * Facilitate tactical and fundraising support from the PSF, to increase capacity @@ -159,7 +161,10 @@ The council shall: To use its powers, the Packaging Council votes. Every Council member must either vote or explicitly abstain. Members with conflicts of interest on a particular vote must abstain. Passing requires -support from a majority of non-abstaining Council members. +support from a majority of non-abstaining Council members, which requires a quorum of 3 +non-abstaining members. If the Packaging Council cannot (e.g., by lack of quorum) or wishes not to +come to a decision on its own, it can also refer the matter to the Steering Council, whose decision +on the matter will be binding. Whenever possible, the Packaging Council is expected to share its decisions and processes publicly in a timely fashion. @@ -208,22 +213,11 @@ A Packaging Council election consists of the following phases: Each phase will last two weeks. -The Packaging Council election process is managed by one Returning 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. - -Ballots are ordinarily kept anonymous to all (including the Returning Officer) but with sufficient information -to deanonymize them. Deanonymization requires a supermajority (two-thirds) vote of at least two of the Python -Steering Council, the PSF Board, and the current Packaging Council. Deanonymization must only be done to -investigate the possibility of coordinated/inauthentic activity in the Packaging Council election that does -not, in the view of the bodies that vote to deanonymize, accurately represent the Python Packaging community. -The proposal to deanonymize must identify to whom ballot identities are revealed (which cannot be the general -public). "Anonymous" in this context shall be deemed to include software that can show identities to the -Returning Officer or their designees in response to explicit user action, provided it does not show it by -default. - -It is expected that any deanonymization request acted on will be followed by a proposal to change this PEP in -order to address any identified irregularities that precipitated such a request. +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. Term @@ -269,12 +263,12 @@ Packaging Council members to fill the vacancies, or call for new Packaging Counc Conflicts of interest --------------------- -No more than two Packaging Council members may be employed by or significantly affiliated with the same -entity. An entity is a company and its subsidiaries, or another incorporated entity such as a non-profit or -educational institution with its own mission and goals. Significant affiliation includes, at the least, -receiving compensation for current work, officer/director roles, and 25% or more ownership stake. PSF membership at -any member class (as defined by Article IV of the PSF bylaws) does not count as an affiliation for this -purpose. +No more than two Packaging Council members may be employed by the same entity. An entity is a +company and its subsidiaries, or another incorporated entity such as a non-profit or educational +institution with its own mission and goals. Significant affiliation includes, at the least, +receiving compensation for current work, officer/director roles, and 25% or more ownership stake. +PSF membership at any member class (as defined by Article IV of the PSF bylaws) does not count as an +affiliation for this purpose. While we expect and trust Packaging Council members to act in the best interests of Python rather than themselves or their affiliations, the mere appearance of any one such organization dominating Python @@ -307,10 +301,11 @@ 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. +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. .. _process: @@ -325,25 +320,18 @@ for two consecutive Council elections automatically removes a person from the li Electors, until they re-submit their intention to resume their participation to the Packaging Council in writing. -In exceptional circumstances, it may be necessary to remove someone from the Electors against their will (for -example: egregious and ongoing code of conduct violations). An Elector may be removed by a two-thirds majority -vote by the Packaging Council (in practice: 4:1 for a Council with five members). - -If the relevant Elector is also on the Packaging Council, then they can participate in the vote. They are -removed from the Packaging Council if the vote removes them as an Elector. The vacancy is filled as per the -`normal process `_. - Vote of no confidence --------------------- -In exceptional circumstances, the Electors may remove a sitting Council member, or the entire Council, via a -vote of no confidence. - -A no-confidence vote is triggered when an Elector calls for one publicly on an appropriate public -communication channel, and another Elector seconds the call within one week. +In exception 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 +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. -The vote 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. Quorum for a vote of no confidence is 50% of Electors. +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. Quorum for a vote of no +confidence is 50% of Electors. 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 @@ -351,10 +339,8 @@ vote succeeds, then that member is removed from the Council and the resulting va `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. -If a no-confidence vote fails, another identical no-confidence -vote (that is, of the same form, and against the same member for -the first form) may not be raised for six months from the initial -call. +If a no-confidence vote fails, another identical no-confidence vote (that is, of the same form, and +against the same member for the first form) may not be raised for six months from the initial call. ----------------------- Changing the governance @@ -392,11 +378,16 @@ serve. Elector eligibility ------------------- -Previous iterations of this PEP's draft proposed different membership rules for identifying the Packaging -Council Electors. After extensive discussion among stakeholders, and after seeking the widest possible -feedback, the PEP authors agreed that aligning Packaging Council Electors with PSF Board voting membership was -both the most workable arrangement and the most equitable approach -to include all parts of the Python packaging community. +Previous iterations of this PEP's draft proposed different membership rules for identifying the +Packaging Council Electors. After extensive discussion among stakeholders, and after seeking the +widest possible feedback, the PEP authors agreed that aligning Packaging Council Electors with PSF +Board voting membership was both the most workable arrangement and the most equitable approach to +include all parts of the Python packaging community. + +PSF membership is used here because it is open to the broadest possible Python community. In +particular, most people doing Python packaging work, do so in public, including contributing to both +PyPA and non-PyPA projects, are likely to be eligible for PSF "Contributing Membership" based on +that work, without paying any membership fee. ------------------------------- Approval voting in the election