====================================================================== SOURCE FILE: 02_c4_b40_cliff-city.yaml TABULATED FILE: 02_c4_b40_cliff-city_tabulated.txt ====================================================================== election_title: Cliff City food trucks — everyone scores 0 or 3-5, nothing between bv_test_id: BV2235 bv_election_id: fm8cbv bv_results_url: https://bettervoting.com/fm8cbv/results scenario_description: |- A whole town votes like it's Approval-with-a-volume-knob: every ballot is either 0 ('not my truck') or 3-5 ('one of mine'). Nobody uses 1 or 2 - the middle of the scale is a ghost town. Cliff ballots are the halfway house between Approval (one bit) and full STAR expressiveness; the test is what the all-or-mostly ballots do to the score distribution and how much runoff-deciding information survives the cliff. The electorate (40 ballots, all individual rows): - Arepa crowd: 8 voters (6 cliff35, 1 slate, 1 cliff34) - Bao crowd: 16 voters (12 cliff35, 2 slate, 2 cliff34) - Churro crowd: 9 voters (5 slate, 3 cliff34, 1 cliff35) - grazers: 7 voters (3 cliff34, 2 chaos, 1 anyone_but, 1 flat) Ballot styles in play (taxonomy: 01_STAR/01_Learn/voting_styles/README.md): - cliff35: cliff ballot: 0 or 3-5, nothing in between - slate: partisan slate: equal 5s for the in-group, 0 outside - anyone_but: 5 for everyone except the villain (0) - cliff34: sliver ballot: 0 or 3-4 only - chaos: pure noise (fuzzing voter) - flat: flat-liner: same score for everyone What the frozen seed produced: Scoring Round Bao 100, Churro 99, Arepa 52, Dumpling 46. Runoff Churro 15 vs Bao 14 (Equal Support 11). STAR winner: Churro. Condorcet winner Churro (agrees). Choose-One (Plurality) would elect Bao. RCV-IRV would elect Bao. 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 'cliff_city', seed 123) - 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 cliff_city voting_method: STAR num_winners: 1 ballots: |- Arepa, Bao, Churro, Dumpling 0, 5, 4, 0 0, 5, 0, 0 5, -, -, - 5, 0, 5, 5 0, 5, 0, 0 0, 5, 4, 0 4, 0, 0, 4 0, 3, 4, 0 5, 0, 0, 0 0, 0, 5, 0 0, 0, 5, 0 1, 3, 4, 0 0, 5, 0, 4 0, 5, 4, 0 0, 5, 0, 0 0, 4, 4, 0 0, 4, 4, 0 0, 5, 0, 4 0, 0, 0, 4 0, 0, 4, 0 0, 0, 5, 0 0, 5, 0, 4 5, 0, 4, 0 -, 5, -, - 0, 5, 5, 0 0, 0, 5, 5 3, 3, 3, 3 0, 0, 3, 5 0, 4, 0, 0 4, 0, 4, 0 5, 4, 5, 0 5, 0, 0, 0 5, 0, 4, 0 0, 0, 5, 0 -, 5, 5, 5 0, 0, 4, 3 0, 5, 0, 0 0, 5, 0, 0 5, 0, 0, 0 0, 5, 0, 0 expected_winners: - Churro # file: 02_c4_b40_cliff-city.yaml ====================================================================== TABULATION RESULTS ====================================================================== === Cliff City food trucks — everyone scores 0 or 3-5, nothing between === A whole town votes like it's Approval-with-a-volume-knob: every ballot is either 0 ('not my truck') or 3-5 ('one of mine'). Nobody uses 1 or 2 - the middle of the scale is a ghost town. Cliff ballots are the halfway house between Approval (one bit) and full STAR expressiveness; the test is what the all-or-mostly ballots do to the score distribution and how much runoff-deciding information survives the cliff. The electorate (40 ballots, all individual rows): - Arepa crowd: 8 voters (6 cliff35, 1 slate, 1 cliff34) - Bao crowd: 16 voters (12 cliff35, 2 slate, 2 cliff34) - Churro crowd: 9 voters (5 slate, 3 cliff34, 1 cliff35) - grazers: 7 voters (3 cliff34, 2 chaos, 1 anyone_but, 1 flat) Ballot styles in play (taxonomy: 01_STAR/01_Learn/voting_styles/README.md): - cliff35: cliff ballot: 0 or 3-5, nothing in between - slate: partisan slate: equal 5s for the in-group, 0 outside - anyone_but: 5 for everyone except the villain (0) - cliff34: sliver ballot: 0 or 3-4 only - chaos: pure noise (fuzzing voter) - flat: flat-liner: same score for everyone What the frozen seed produced: Scoring Round Bao 100, Churro 99, Arepa 52, Dumpling 46. Runoff Churro 15 vs Bao 14 (Equal Support 11). STAR winner: Churro. Condorcet winner Churro (agrees). Choose-One (Plurality) would elect Bao. RCV-IRV would elect Bao. 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 'cliff_city', seed 123) - 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 cliff_city --- Runoff (Preference) Matrix --- Head-to-head / pairwise comparison Legend: For - Equal Support - Against * indicates Top 2 Finalist | Arepa | * Bao | * Churro | Dumpling | --------------------------------------------------------------------------- Arepa > | --- |10 - 10 - 20 | 7 - 16 - 17 | 9 - 23 - 8 | * Bao > | 20 - 10 - 10 | --- |14 - 11 - 15 |20 - 14 - 6 | * Churro > | 17 - 16 - 7 |15 - 11 - 14 | --- |18 - 16 - 6 | Dumpling > | 8 - 23 - 9 | 6 - 14 - 20 | 6 - 16 - 18 | --- | [Condorcet Winner] Condorcet Winner: Churro — matches the STAR winner [Condorcet Loser] Condorcet Loser: Dumpling — loses every head-to-head matchup [Divergence from STAR] STAR = Churro Choose-One (Plurality) = Bao (differs from STAR) RCV-IRV = Bao (differs from STAR) Note: 10 of 40 ballots (25%) had equal non-zero scores, so their ranks were decided by candidate priority order. The RCV-IRV result may be an artifact of score-to-rank tie-breaking rather than a deep difference. 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/02_c4_b40_cliff-city_RCV-IRV_tabulated.txt [Runoff Reversal] - Score Round Winner(s) = (Bao) - Runoff Round Winner = (Churro) Candidate Bao earned the highest total score, but Candidate Churro won the automatic runoff — not a malfunction, STAR working as designed: the runoff elects the finalist preferred by the majority (of voters with a preference). --- STAR Voting Method (single winner) --- [STAR Voting] Tabulating 40 ballots. Count × Arepa,Bao,Churro,Dumpling 6 × 0, 5, 0, 0 4 × 0, 0, 5, 0 3 × 0, 5, 4, 0 3 × 5, 0, 0, 0 3 × 0, 5, 0, 4 2 × 0, 4, 4, 0 2 × 5, 0, 4, 0 1 × 5, -, -, - 1 × 5, 0, 5, 5 1 × 4, 0, 0, 4 1 × 0, 3, 4, 0 1 × 1, 3, 4, 0 1 × 0, 0, 0, 4 1 × 0, 0, 4, 0 1 × -, 5, -, - 1 × 0, 5, 5, 0 1 × 0, 0, 5, 5 1 × 3, 3, 3, 3 1 × 0, 0, 3, 5 1 × 0, 4, 0, 0 1 × 4, 0, 4, 0 1 × 5, 4, 5, 0 1 × -, 5, 5, 5 1 × 0, 0, 4, 3 ('-' = left blank / abstained; '0' = scored zero — both count as 0 stars.) [Score Distribution] (how many ballots gave each star rating) Score Candidate 5 4 3 2 1 0 Abs | Total Avg all Avg rated Arepa 8 2 1 0 1 26 2 | 52 1.3 1.4 Bao 15 4 3 0 0 17 1 | 100 2.5 2.6 Churro 9 12 2 0 0 15 2 | 99 2.5 2.6 Dumpling 4 5 2 0 0 27 2 | 46 1.2 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. [STAR Voting: Scoring Round] The two highest-scoring candidates advance to the next round. Bao -- 100 -- First place Churro -- 99 -- Second place Arepa -- 52 Dumpling -- 46 Bao and Churro advance. [STAR Voting: Automatic Runoff Round] The candidate preferred in the most head-to-head matchups wins. Churro -- 15 -- First place Bao -- 14 Equal Support -- 11 Churro wins. Runoff math: 40 ballots cast − 11 Equal Support (no preference between the two finalists) ── 29 voters with a preference (majority = 15) Churro 15 (52%) · Bao 14 (48%) [STAR Voting: Winner — STAR Voting Method (single winner)] Churro