BV15 — Plurality + abstentions: the turnout undercount¶
Method: plurality · 1 seat · Expected winner: Andre · full count →
BetterVoting test BV15 (4h89vj, "Basic – 2 candidates – Plurality – Abstain"). The Plurality instance of bettervoting#740 — a reporting gap, not a tabulation bug. BetterVoting elects the right winner (Andre) but its results widget reports only the meaningful ballots as "voters," dropping the fully-abstained ones from the headline turnout. The count is short by exactly the number of abstentions.
▶ Live on BetterVoting: vote · results ↗ (election 4h89vj).
Reference file: bv15_4h89vj_plurality_abstain.yaml (expected_winners: [Andre]). Frozen export: bv15_4h89vj_plurality_abstain_bv_export.json. Backs sheet row BV15. Issue: bettervoting#740 ("Add 'stats for nerds' widget including abstentions").
The finding (label it right)¶
The sheet/tracker calls this "star-server#740", but the repo moved from star-server to bettervoting — the number stayed, so it is bettervoting#740. And #740 is not a tabulation error: its title is "Add 'stats for nerds' widget including abstentions," and the body (Adam's own report) says "We are missing abstentions in the vote count… As-is: 2 voters. Should be: 5 voters (3 abstentions and 2 meaningful)." The winner is computed correctly; the displayed turnout is what's wrong.
Crucially, BetterVoting's backend already has the numbers. The frozen export's summaryData reads nTallyVotes: 7, nAbstentions: 5 (7 + 5 = 12 cast) — correct. So #740 is purely that the results UI never surfaces the 5 abstentions or the 12-ballot total; it shows the 7 as if that were the whole turnout.
The election¶
Plurality, 2 candidates, 12 ballots — five for Andre, two for Blake, five blank:
Count × Andre,Blake
5 × 1,0 Andre (a choose-one vote for Andre)
2 × 0,1 Blake (a choose-one vote for Blake)
5 × -,- blank — true abstentions (no vote for anyone)
Andre 5, Blake 2 → Andre wins (BV tieBreakType: none; no tie).
Method: Plurality (matches BV)¶
This file uses voting_method: Plurality — the method BV actually ran. Single-winner Plurality tabulates through the STAR path (equivalent for single-mark 0/1 ballots), so LH still prints the score distribution and the self-reconciling runoff turnout line that #740 is about. (An earlier version modelled this as a STAR 5/0 ballot on the mistaken belief that LH had no Plurality method — it does: single-winner via the STAR path, multi-winner as SNTV.)
The LH report (the accounting #740 wants)¶
--- Choose-One / Plurality Voting Method (single winner) ---
Tabulating 12 ballots.
Andre Blake
X -
X -
X -
X -
X -
- X
- X
- -
- -
- -
- -
- -
Count the marks: Andre 5 · Blake 2
(5 ballot(s) marked nobody.)
Winner — Choose-One / Plurality Voting Method (single winner)
Andre (5 of 12 marks)
The Abs column (5 for each candidate = the 5 blank ballots) and the runoff line 7 of 12 (5 Equal Support) are precisely the "stats for nerds" turnout breakdown #740 asks BetterVoting to add — LH reconciles 12 = 7 + 5 on the page. Full audit copy: _tabulated mirror.
LH ↔ BetterVoting¶
| Quantity | BetterVoting summaryData |
LH engine | Agree? |
|---|---|---|---|
| Winner | Andre | Andre | ✓ |
| Meaningful ballots | nTallyVotes 7 |
7 (voters with a preference) | ✓ |
| Abstentions | nAbstentions 5 |
5 (blank ballots) | ✓ |
| Ballots cast | (7 + 5 =) 12 | 12 | ✓ |
Both engines agree on every number. The only gap is display: LH puts 12 = 7 + 5 on the results page; BetterVoting's widget currently shows the 7 alone. This case pins the correct turnout accounting as the reference for #740 — and shows LH's runoff-reconciliation line as a ready model for the fix.
See also¶
- This set's lesson (README) · small_case abstention lesson — the LH↔BV "no-preference" reconciliation these cases share.
- Abstention vs Equal Support — minimal STAR test — the STAR sibling of this counting question.
- Ballot & terminology basics · Glossary · BV registry.