Bullet Storm — a bullet-voting electorate and the few who spread¶
Generated from 03_c4_b33_bullet-storm.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: Carla
▶ Live on BetterVoting: vote · results ↗ (election w9f4vd · test BV2236).
Scenario¶
Three brigades bullet-vote their champion (5 and silence - many literally leave the rest blank), while a thoughtful minority spreads honest scores. The lesson lives in the Automatic Runoff: a bullet ballot whose champion missed the top-two scored both finalists 0 - it goes EQUAL SUPPORT, silent by its own choice, and the runoff is decided by the voters who gave the count something to work with. Bullet voting is legal, counted - and self-muting.
The electorate (33 ballots, all individual rows): - Astrid brigade: 12 voters (8 bullet, 4 strong_backup) - Boris brigade: 7 voters (6 bullet, 1 weak_backup) - Carla brigade: 8 voters (8 bullet) - the thoughtful few: 6 voters (5 nuanced, 1 ranked_style)
Ballot styles in play (taxonomy: 01_STAR/01_Learn/voting_styles/README.md): - weak_backup: 5 + a grudging 1 backup, rest 0/blank - strong_backup: 5 + a strong 4 backup, rest 0/blank - bullet: choose-one transplant: favorite 5, rest 0/blank - nuanced: full 0-5 range, honest gaps, ties allowed - ranked_style: uses each score once, like a ranking
What the frozen seed produced: Scoring Round Carla 73, Astrid 67, Boris 39, Dolores 27. Runoff Astrid 13 vs Carla 13 (Equal Support 7). The runoff itself is TIED - broken by the next official tiebreaker (higher scoring total). STAR winner: Carla. Choose-One (Plurality) would elect Astrid. RCV-IRV would elect Astrid. The engine flags the classic center-squeeze signature (RCV-IRV the lone outlier).
RANDOM-BUT-HUMAN, reproducible: generated by 06_Other/ballot_style_lab/generate_ballot_styles.py (scenario 'bullet_storm', seed 90) - utilities sampled from the faction model above, then rendered through each voter's ballot style. Per 07_Concepts/topics/simulate_utilities_not_ballots.md this is the 'stress-test the tabulator' job (with human-shaped renderings), not a method-welfare comparison. Regenerate byte-identically: python generate_ballot_styles.py --emit bullet_storm
Ballots¶
Row 1 = candidate names; each later row is one voter's 0–5 scores (a N × prefix = N identical ballots).
Markers on these ballots: - blank · ~ race abstention · & candidate abstention · ? spoiled · % spoiled+reissued — all tabulate as 0 (reported honestly).
Astrid, Boris, Carla, Dolores
1, 5, 0, 0
5, -, 4, -
5, 0, 0, 4
0, 0, 5, 0
0, 0, 5, 0
0, 0, 5, 0
5, -, -, -
5, 0, 0, 0
-, -, 5, -
0, 0, 5, 0
-, -, 5, -
2, 0, 4, 5
-, 5, -, -
5, -, 4, -
3, 2, 5, 4
5, 0, 0, 0
-, 5, -, -
5, 0, 4, 0
-, -, 5, -
5, -, -, -
0, 0, 5, 0
0, 0, 2, 5
-, -, 5, -
5, 0, 0, 0
0, 5, 0, 0
5, 0, 0, 0
0, 5, 0, 0
0, 5, 0, 0
5, -, -, -
1, 0, 5, 4
0, 2, 0, 5
5, 0, 0, 0
0, 5, 0, 0
What the engine says¶
The count, step by step — the rounds and how the winner is reached:
[Divergence from STAR]
STAR = Carla
Choose-One (Plurality) = Astrid (differs from STAR)
RCV-IRV = Astrid (differs from STAR)
Note: no ballots had tied scores, so RCV-IRV vs STAR here is a genuine
method difference, not a tie-breaking artifact.
Note: Ranked Robin (RCV-RR) agrees with STAR, so RCV-IRV is the lone
outlier — the classic center-squeeze signature.
Full round-by-round reports (generated for review):
RCV-IRV rounds: cases_tabulated/03_c4_b33_bullet-storm_RCV-IRV_tabulated.txt
--- STAR Voting Method (single winner) ---
[STAR Voting]
Tabulating 33 ballots.
Count × Astrid,Boris,Carla,Dolores
5 × 0, 0, 5, 0
5 × 5, 0, 0, 0
4 × -, -, 5, -
4 × 0, 5, 0, 0
3 × 5, -, -, -
2 × 5, -, 4, -
2 × -, 5, -, -
1 × 1, 5, 0, 0
1 × 5, 0, 0, 4
1 × 2, 0, 4, 5
1 × 3, 2, 5, 4
1 × 5, 0, 4, 0
1 × 0, 0, 2, 5
1 × 1, 0, 5, 4
1 × 0, 2, 0, 5
('-' = left blank / abstained; '0' = scored zero — both count as 0 stars.)
[STAR Voting: Scoring Round]
The two highest-scoring candidates advance to the next round.
Carla -- 73 -- First place
Astrid -- 67 -- Second place
Boris -- 39
Dolores -- 27
Carla and Astrid advance.
[STAR Voting: Automatic Runoff Round]
The candidate preferred in the most head-to-head matchups wins.
Astrid -- 13 -- Tied for first place
Carla -- 13 -- Tied for first place
Equal Support -- 7
There's a two-way tie for first.
[STAR Voting: Automatic Runoff Round: First tiebreaker]
The highest-scoring candidate wins.
Carla -- 73 -- First place
Astrid -- 67
Carla wins.
[STAR Voting: Winner — STAR Voting Method (single winner)]
Carla
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
| * Astrid | Boris | * Carla | Dolores |
---------------------------------------------------------------------------
* Astrid > | --- |15 - 10 - 8 |13 - 7 - 13 |13 - 15 - 5 |
Boris > | 8 - 10 - 15 | --- | 8 - 9 - 16 | 7 - 20 - 6 |
* Carla > | 13 - 7 - 13 |16 - 9 - 8 | --- |14 - 15 - 4 |
Dolores > | 5 - 15 - 13 | 6 - 20 - 7 | 4 - 15 - 14 | --- |
[Condorcet Winner]
No strict Condorcet winner; unbeaten candidates: Astrid, Carla (pairwise ties)
[Condorcet Loser]
Condorcet Loser: Dolores — loses every head-to-head matchup
[Score Distribution] (how many ballots gave each star rating)
Score
Candidate 5 4 3 2 1 0 Abs | Total Avg all Avg rated
Astrid 12 0 1 1 2 11 6 | 67 2.0 2.5
Boris 7 0 0 2 0 15 9 | 39 1.2 1.6
Carla 11 4 0 1 0 12 5 | 73 2.2 2.6
Dolores 3 3 0 0 0 16 11 | 27 0.8 1.2
Avg all = Total / all ballots — a blank counts as 0, so this is the Total the Scoring Round ranks on, per ballot.
Avg rated = Total / the ballots that scored this candidate (Abs excluded) — support among voters who had an opinion.
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 06_Other/ballot_style_lab/cases/03_c4_b33_bullet-storm.yaml
See also¶
- Methods disagree on this election — its entry in the divergence review ledger
- Center squeeze (topic hub)
- Ties & tie-breaking (topic hub)
- The tie-breaking ladder (full chain)
- Runoff reversal (worked set)
- Ballot & terminology basics
- Glossary · all cases by method
More cases in this set: 01_c3_b31_graders-divide · 02_c4_b40_cliff-city · 04_c4_b47_noise-soup · 05_c3_b38_squeeze-survives · 06_c4_b24_narrow-bands · 07a_c5_b36_herb-council-bloc-3-seats · 07b_c5_b36_herb-council-pr-3-seats · 08_c6_b29_quota-circus-pr-2-seats · 09_c7_b44_park-bloc-4-seats