- Notifications
You must be signed in to change notification settings - Fork7
psf/elections
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This repository contains the tools and documentation for the way the PythonSoftware Foundation (the PSF) Elections are presently operated. This documentwill cover the tools in the repository and the processes that the ElectionAdministrator is responsible for.
At least once a year, the PSF runs an election. We (at the time of thiswriting) useOpaVote. Election administrators should log intoOpaVote using one of the options on the front page.
It is best to set your account profile timezone toUTC
in order to ensurethat the start/stop dates configured for elections are correct to yourexpectations.
Once signed into OpaVote, locate the button labeled(+) Create Election
.Click it, and then the administrator will be prompted for the followinginformation:
"Title" - the display title, e.g.,
Python Software Foundation Board of Directors Election 2023
"Description" - in the past, administrators used this to explain Approvalvoting and the importance of the election
List of candidates:https://www.python.org/nominations/elections/2023-python-software-foundation-board/nominees/
This election uses Approval Voting.That is to say that you may Approve as many candidatesor bylaws changes as you wish.You may choose to vote for 1, 2, 3, ..., N-1, N, or all N of the candidates.The top M vote-getters will be elected to the board,after all conflict-of-interest, affiliations, and co-affiliation sectionsof the PSF Bylaws have been satisfied.
The candidates have all been nominated on python.orghttps://www.python.org/nominations/elections/
Please carefully read the detailed candidate statementslinked after each candidate's name.There is a wealth of talent, dedication, diversity, and integrityamong these candidates.
It is your responsibility asa voting member of the Python Software Foundationto consider each of these statements.The order that the names appear on this ballot has been randomizedand it will not match the order on the nomination pagewhich is also randomized.
Note: Once you have cast your ballot youWILL NOTbe able to modify it. Please consider the nominations carefullyand cast your ballot once you have come to a decision.
"Email text" - Include basic information on the vote, where to find moreinformation, and a notice regarding the end of voting.
The 2023 election for the Board of Directorsof the Python Software Foundation is open.The full list of candidates is available athttps://python.org/nominations/elections/2023-python-software-foundation-board/nominees.
Voting will close Friday, June 30, 2023 at 11:59 pm UTC as previously announced.Seehttps://www.python.org/nominations/elections/2023-python-software-foundation-board/nominees/for details on the election as well as helpful countdown clocks.
Note: Once you have cast your ballot youWILL NOTbe able to modify it. Please consider the nominations carefullyand cast your ballot once you have come to a decision.
"Language" -
English
"Expert mode" - You MUST enable expert mode! Which will reveal all optionsfollowing this bullet.
"Show results during voting" - "no"
"Voting start date" - Optionally this to the date that voting will start.This will automatically send ballots at 12:01 AM that day(In the timezone specified in your account profile).
"Voting stop date" - Optionally this to the date that voting will end.This will automatically close the election at 11:59 PM that day(In the timezone specified in your account profile).
"Automatic reminders" - "yes"
"Anonymous voting" - "yes"
"Candidate names" - Add the names of candidates as they appear on thenomination statements, one-per-line.
"Method" - "Approval Voting"
"Number of winners" - PerBylaws Section 5.5, 3 or 4 depending onthe outgoing cohort size for a given year. Itmay be more if anyadditional board vacancies have been created.
"Shuffle candidate order": "yes"
Theremay be additional questions such as bylaws changes, if souse the
(+) Add Another Contest
button and use judgement to determinehow to add them.
The Election Adminitsrator (EA) will receive a file with the first name, lastname, membership type, and email address of a voter.In order to add voters to an election,OpaVote requires they be uploaded in an ASCII text file in the format::
email-address
For example::
graffatcolmingov@gmail.comewdurbin@pyfound.org
The format of the file the election administrator typically gets is of theformat::
FirstName,LastName,MembershipType,Email
There is a tool in this repository to handle it calledconvert-exported-csv-for-opavote.py
. This will generate the necessaryformat for OpaVote from the CSV file the EA receives.
It's important to note here that not all voters have a first or last name andsome don't have either.
Running an election begins once the election starts. While an election is inprogress, a few things may happen:
New voters may need to be added as they were missed when the original voterlist was generated
Some voters may need you to send/re-send their ballot notification email
The following sub-sections will cover these in detail.
OpaVote allows us to add new voters after an election has begun althoughthe other details of the election or questions cannot be altered. The process foradding new voters is the same as is detailed above in "Setting up Voters". TheEA will receive a new file full of the details of the voters who were missed.Using that, the EA can generate a new CSV to upload to OpaVote using the sametooling.
OpaVote provides statistics on pending, in-transit, rejected, and deliveredballot emails. It also tracks opens, clicks, and visits.
If a reminder is necessary, it can be sent from the admin console by findingthe voter and clicking "Send Ballot".
If "Automatic reminders" was not selected during election setup,OpaVote will automatically send reminders every three days throughoutthe election period.
The end of an election requires the EA to verify the results of the electionwith OpaVote and then present the results to the Executive Director of the PSF.The Executive Director will then announce the results to the community.At that time, the🌎 Publish Results
button on OpaVote can be used topublish the full results to all voters.
Caution
OpaVote does not retain history of elections. Ensure that you retrievea copy of thevoter_list.csv
from theAll voter statistics
section ofthe election management dashboard. Store it somewhere safe that futureelection administrators or PSF staff will have access to.
This data is pertienet to tracking voter participation over time.
The PSF Bylaws_ state that one-third (1/3) of the members elligible to votewill constitute a quorum. See also:
Except as otherwise required by law, by the Certificate of Incorporationor by these Bylaws, one-third (1/3) of the members entitled to vote (thevoting members), represented in person or represented by proxy, shallconstitute a quorum at a meeting of members.
For electronic votes, a quorum shall be reached as soon as one-third (1/3)of the members entitled to vote (the voting members) have cast their vote.If the voting period ends before a quorum is reached, the vote is declaredvoid.
-- Python Software Foundation Bylaws, Section 3.9. Member Quorum
For example, if there are 999 voters in an election, there must be 333 votescast at least in order to declare quorum.
In the case of a Board of Directors Election, the topN
candidates areaccepted based on the number of open seats in that Election. If there is a tiefor theNth
seat, then there is a script that may be used to break the tiecalledbreak-ties.py
(cleverly named, eh?).
Let's say that there is a 4 way tie between "Candidate 0", "Candidate 3","Candidate 8", and "Candidate 12" and we need 2 more people to round out thetotal, then we would do::
python3 break-ties.py -n 2 \ -c "Candidate 0" \ -c "Candidate 3" \ -c "Candidate 8" \ -c "Candidate 12"
And it would print the winning candidates. Re-running this script will alwaysresult in the same candidates winning the tie breaker. This is by design sothat the tie breaker results may be verified by someone other than the EA.