Quorum — did enough of the electorate show up?¶
One line: quorum is a turnout threshold, separate from who wins: enough of the eligible electorate must participate for the election to count. It's opt-in (set eligible_voters and/or quorum), and a cast abstention counts toward it — showing up and turning in a blank ballot is still participation.
→ What an abstention is: GLOSSARY · the abstention vs Equal Support distinction: the abstention lesson · how results are reported: STAR Reporting.
How it works in the engine¶
Quorum is only checked when a file opts in. Two inputs:
eligible_voters— the size of the electorate (aliases:electorate,registered_voters). This is an external number; it is not in the ballots.quorum— the threshold (alias:minimum_quorum):- omitted → default: a majority (>50%) of eligible voters;
- a percentage (
"50%", or0.5) → that fraction of eligible voters; - an integer ≥ 1 → an absolute minimum number of ballots.
Participation = total ballots cast, abstentions included. If quorum is not met, the engine declares no winner (turnout failed), rather than crowning one on too few votes. A percentage/majority quorum needs eligible_voters; without it the engine says "quorum not assessed" rather than inventing a denominator.
Worked example — the abstention that carries quorum¶
A 10-member board; six submit a ballot, one of them blank. No explicit quorum, so the default is a majority of 10 — at least 6 (quorum_demo_c3_b6.yaml):
Quorum: 6 of 10 eligible voters participated (60% turnout); requires more than 50% (>= 6). MET.
Tabulating 6 ballots. Note: 1 of 6 ballots is marked as an abstention.
...
Anna wins.
Voters with a preference: 5 of 6 (1 Equal Support).
Anna 3 (60%) vs Ben 2 (40%); majority = 3.
The blank ballot is the sixth participant. Because a cast abstention counts toward quorum, turnout reaches 6 and the election is valid — drop that abstention and quorum would fail (5 of 10). The abstainer changed no candidate's score, but their presence made the result count. Full report: quorum_demo_c3_b6_tabulated.txt.
Won the count, but not elected (quorum fails)¶
Take the exact same six ballots — Anna wins the tabulation — and change only the assumed electorate. For teaching, invent one: "the electorate is the turnout plus another 100%," so eligible_voters: 12 (quorum_fail_demo_c3_b6.yaml). (That "cast + X%" rule is a demo device only — real elections use the actual registered roll, never a formula off the ballots.)
--- STAR Voting Method (single winner) ---
Quorum: 6 of 12 eligible voters participated (50% turnout); requires more than 50% (>= 7). NOT MET.
No winner declared — quorum not reached.
Exactly half turned out, and a quorum is a strict majority, so 50% fails by one. Anna won the vote, but winning the vote and being elected are different things when turnout falls short — the engine stops before declaring a winner. (Note it bails before tabulating, so it doesn't reprint who would have won; that's the quorum-met run above, on the same ballots.)
Why eligible_voters isn't auto-filled from the ballots¶
It's tempting to default eligible_voters to the number of ballots cast — but that makes participation always equal eligibility, so turnout would always read 100% and quorum would always pass, defeating the entire check. A turnout quorum is meaningful only against the real electorate, which has to be supplied from outside the ballot data. So the engine keeps eligible_voters an explicit, optional input and stays silent when it's unknown. (For the same reason there's no "eligible = cast + X%" engine option — it would bake a fiction into the tool when you can already type a literal number for a demo, as the files above do.)
Quorum vs the runoff denominator — three different "how many"¶
Don't confuse these (they answer different questions):
| Count | Question it answers |
|---|---|
| Eligible voters | how many could vote (the electorate) — the quorum denominator |
| Ballots cast (incl. abstentions) | how many did participate — the quorum numerator |
| Voters with a preference | of those, how many picked between the two finalists — the runoff percentage denominator |
An abstention drops out of the runoff denominator (no preference) but stays in the quorum numerator (still participated). That's the whole reason the two counts can differ — see Equal Support vs abstention.