Skip to content

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

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