The resulting Nix Steering Committee for this election is (sorted alphabetically):
- @Ericson2314 (2 year term)
- @fpletz (1 year term)
- @Gabriella439 (2 year term)
- @jtojnar (2 year term)
- @roberth (2 year term)
- @tomberek (1 year term)
- @winterqt (1 year term)
You can verify this as follows:
-
Check that the result matches https://civs1.civs.us/cgi-bin/results.pl?id=E_8589ef69d0e60845 (see the winning set of choices). The terms are assigned according to the individual preference order.
-
Clone this repository. Subsequent commands assume it's available under
SC-election-2024
. -
Download the CIVS ballots from https://civs1.civs.us/cgi-bin/download_ballots.pl?id=E_8589ef69d0e60845 and verify that they match the ones in the repository:
curl 'https://civs1.civs.us/cgi-bin/download_ballots.pl?id=E_8589ef69d0e60845' > civs_ballots.csv diff <(sort civs_ballots.csv) <(sort SC-election-2024/civs_ballots.csv)
-
Download the OpaVote ballots from https://opavote.com/results/6251213851459584 (direct link) and verify that it matches the ones in the repository:
diff ballots1.txt SC-election-2024/opavote_ballots.blt
Note that the ballots will only be available from OpaVote until 2024-12-27, after that you cannot verify this part.
-
The two ballot lists are in very different formats, but should have the same data. To verify that, inspect the code in this repository and run:
nix-build SC-election-2024 -A verifyBallotMatch
-
Recreate the CIVS result (optional, only works if CIVS doesn't change the implementation)
- Create a new poll with these options:
-
Candidates:
asymmetric cafkafk djacu doronbehar Ericson2314 fpletz Gabriella439 getchoo Infinidoge jtojnar kloenk linsui lovesegfault mschwaig numinit nyabinary phaer proofconstruction roberth Scrumplex tomberek winterqt yu-re-ka
-
How many choices will win: 7
-
Make this a test poll: read all votes from a file.
-
Enforce proportional representation (rank of their favorite choice)
-
- Once on the poll control page, load the ballot data from
result/civs_ballots.txt
, which was generated from the previous step. - Close the poll and verify that the results match.
- Create a new poll with these options:
To verify that only people eligible according to the constitution are in the voters.json
file:
- Generate the initial list of automatically eligible people as was done by the EC in this commit, inspect the code of this repository and run
# If you don't have 4TB of space or can't wait 10 CPU days for processing: nix-shell -p cachix --run "cachix use nca" nix-build -A generateVoters ./result
- See the approved exception requests, email changes and voters waiving their voting rights by inspecting the Git history of
voters.json
.
Because OpaVote does not give public access to the list of emails that were invited to vote, you need to trust the EC on it matching voters.json
.
Members of the EC can verify it as follows:
- Download the voter list at https://opavote.com/manage/6251213851459584/final?d=1.
This requires logging into the OpaVote account and is likely only available until 2024-12-27.
The SHA256 hash of the file is
8f10d15ca2c06a4812cf4ab5ebbdfc774bb831487507266acc0f67a9d6b51d42 voter_list.csv
- In
nix-shell -p csvkit jq diffutils
, rundiff \ <(jq -r 'keys[] | select(startswith("@") | not) | ascii_downcase' voters.json | sort) \ <(csvjson voter_list.csv | jq -r '.[] | select((.Voted == true or .Bounce != true) and .Disabled != true) | .Voter' | sort)
Note that:
-
Voters who didn't have an email address in
voters.json
couldn't be invited to vote.They were informed of needing to set an email address (1 2), which some did with subsequent PRs.
-
Some voters were invited, but their email bounced, in which case those voters were given another chance to add a different email.
There is also one special case of somebody being able to vote, but an email being bounced, most likely due to a later reminder email that bounced. That person was not given the chance to add another email. No other bounced emails cast a vote.
-
Some voters voluntarily waived their voter rights and were thus manually disabled by the EC to stop sending email reminders.