STAR's residual split — a coalition bullet-votes itself apart¶
Generated from 05a_residual_split_bullet-voting.yaml — do not edit by hand. Regenerate: python STARVote_LH_tabulation_engine/tools_adam/scripts/build_yaml_pages.py.
Method: STAR (single winner) · 1 seat · Expected winner: Cara
Scenario¶
The honest caveat to "STAR ends vote-splitting": it ends the FORCED kind. A faction can still split ITSELF if it refuses to use the score ballot.
Ada and Ben are on the same side (60 voters); Cara is the opponent (40). Here the Ada/Ben side bullet-votes tribally — Ada-fans give Ben a 0, Ben-fans give Ada a 0 — instead of scoring their ally honestly. Scores: Ada 175, Ben 125, Cara 200. Cara grabs a finalist slot on a split field and wins the runoff, even though 60% preferred that side. STAR did not rescue a split the voters inflicted on themselves: the residual lives only in the top-two runoff.
The cure is in their hands — see 05b_residual_split_expressive-fix.yaml, where the SAME factions score their ally even a 3 and STAR elects the majority side. Deep dive: 07_Concepts/residual_vote_splitting.md
Parameters (from the YAML)¶
blocs:
Allies: [Ada, Ben]
Ballots¶
Row 1 = candidate names; each later row is one voter's 0–5 scores (a N × prefix = N identical ballots).
Count:Ada,Ben,Cara
35:5,0,0 # Ada-fans bullet-vote — refuse to score their ally Ben
25:0,5,0 # Ben-fans bullet-vote — refuse to score their ally Ada
40:0,0,5 # Cara bloc (the minority side)
What the engine says¶
The count, step by step — the rounds and how the winner is reached:
[Vote-splitting check]
Choose-One first choices: Cara 40, Ada 35, Ben 25
Plurality winner: Cara (40, 40.0%)
Bloc 'Allies' = Ada, Ben: combined 60 (60.0%); winner Cara is OUTSIDE it.
=> VOTE SPLITTING: the 'Allies' bloc is an outright majority (60 vs Cara's
40) but split across 2 candidates, so Cara won Choose-One. STAR elected
Cara.
--- STAR Voting Method (single winner) ---
[STAR Voting]
Tabulating 100 ballots.
Count × Ada,Ben,Cara
40 × 0, 0, 5
35 × 5, 0, 0
25 × 0, 5, 0
[STAR Voting: Scoring Round]
The two highest-scoring candidates advance to the next round.
Cara -- 200 -- First place
Ada -- 175 -- Second place
Ben -- 125
Cara and Ada advance.
[STAR Voting: Automatic Runoff Round]
The candidate preferred in the most head-to-head matchups wins.
Cara -- 40 -- First place
Ada -- 35
Equal Support -- 25
Cara wins.
Runoff math:
100 ballots cast
− 25 Equal Support (no preference between the two finalists)
───
75 voters with a preference (majority = 38)
Cara 40 (53%) · Ada 35 (47%)
[STAR Voting: Winner — STAR Voting Method (single winner)]
Cara
Full audit — preference matrix, Condorcet, and score distribution¶
--- Runoff (Preference) Matrix ---
Head-to-head / pairwise comparison
Legend: For - Equal Support - Against
* indicates Top 2 Finalist
| * Ada | Ben | * Cara |
-------------------------------------------------------------
* Ada > | --- |35 - 40 - 25 |35 - 25 - 40 |
Ben > | 25 - 40 - 35 | --- |25 - 35 - 40 |
* Cara > | 40 - 25 - 35 |40 - 35 - 25 | --- |
[Condorcet Winner]
Condorcet Winner: Cara — matches the STAR winner
[Condorcet Loser]
Condorcet Loser: Ben — loses every head-to-head matchup
[Score Distribution] (how many ballots gave each star rating)
Score
Candidate 5 4 3 2 1 0 | Total Avg
Ada 35 0 0 0 0 65 | 175 1.8
Ben 25 0 0 0 0 75 | 125 1.3
Cara 40 0 0 0 0 60 | 200 2.0
Everything in one file: the _tabulated mirror (regenerated on every run; every analysis forced on).
Run it yourself:
python STARVote_LH_tabulation_engine/starvote_larry_hastings.py method_comparisons/split_voting/_main/05a_residual_split_bullet-voting.yaml
See also¶
More cases in this set: 00_plurality_vs_majority · 01_political_left_split · 02_icecream_chocolate_split · 03_lunch_veggie_vs_meat · 04_star_wars_vote_split · 05b_residual_split_expressive-fix · 06_sub_majority_not_spoiled