election_title: Noise Soup — weak factions, cross-winds, flat-liners and static
bv_test_id: BV2237
bv_election_id: 74pbyg
bv_results_url: https://bettervoting.com/74pbyg/results

scenario_description: |-
  The messy-reality fixture: two loose leans instead of crisp camps, a
  crosswind bloc, pure-noise voters, flat-line no-preference ballots, one race
  abstention (~), one spoiled ballot (?), and stray blank cells. No clean
  story planted - whatever structure the count finds, it found in the noise.
  Watch the full pairwise matrix: weak, noisy electorates are exactly where
  Condorcet's neat ordering starts to wobble.

  The electorate (47 ballots, all individual rows):
    - leans A-B: 10 voters (4 strong_backup, 3 nuanced, 3 ranked_style)
    - leans C-D: 13 voters (6 nuanced, 4 slate, 3 weak_backup)
    - crosswind: 11 voters (5 cliff35, 3 nuanced, 2 anyone_but, 1 protest)
    - static: 11 voters (6 ranked_style, 3 chaos, 2 flat)
    - plus 2 marker row(s): 1 spoiled ballot, 1 race abstention

  Ballot styles in play (taxonomy:
  01_STAR/01_Learn/voting_styles/README.md):
    - slate: partisan slate: equal 5s for the in-group, 0 outside
    - flat: flat-liner: same score for everyone
    - anyone_but: 5 for everyone except the villain (0)
    - chaos: pure noise (fuzzing voter)
    - nuanced: full 0-5 range, honest gaps, ties allowed
    - cliff35: cliff ballot: 0 or 3-5, nothing in between
    - ranked_style: uses each score once, like a ranking
    - weak_backup: 5 + a grudging 1 backup, rest 0/blank
    - strong_backup: 5 + a strong 4 backup, rest 0/blank
    - protest: all zeros plus a lone least-bad 1

  What the frozen seed produced: Scoring Round Beth 120, Caleb 113, Dana 112,
  Aaron 109. Runoff Caleb 18 vs Beth 16 (Equal Support 13). STAR winner:
  Caleb. No Condorcet winner - the pairwise order wobbles (see the full
  matrix). Choose-One (Plurality) would elect Aaron. RCV-IRV would elect Beth.
  Approval would elect Beth. RCV-RR would elect Beth.

  RANDOM-BUT-HUMAN, reproducible: generated by
  06_Other/ballot_style_lab/generate_ballot_styles.py (scenario 'noise_soup',
  seed 217) - 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 noise_soup

voting_method: STAR
num_winners: 1
ballots: |-
  Aaron, Beth, Caleb, Dana
      5,    5,     5,    5
      3,    3,     3,    3
      5,    5,     0,    5
      0,    4,     4,    3
      2,    5,     3,    4
      5,    0,     3,    1
      5,    0,     0,    0
      4,    5,     2,    3
      0,    0,     1,    5
      0,    2,     5,    2
      2,    5,     3,    4
      4,    5,     -,    -
      4,    0,     0,    5
      1,    5,     0,    2
      5,    5,     0,    5
      0,    0,     5,    0
      0,    0,     5,    0
      ?,    ?,     ?,    ?
      5,    3,     4,    2
      2,    4,     5,    3
      ~,    ~,     ~,    ~
      5,    0,     0,    0
      0,    0,     0,    0
      1,    5,     0,    2
      0,    2,     5,    2
      1,    -,     -,    5
      3,    4,     5,    2
      0,    5,     0,    5
      5,    4,     2,    3
      3,    0,     5,    4
      -,    -,     1,    5
      5,    2,     2,    0
      2,    5,     0,    0
      -,    5,     5,    5
      0,    0,     5,    3
      4,    5,     0,    0
      5,    4,     2,    0
      5,    3,     5,    0
      0,    3,     4,    5
      5,    0,     5,    0
      5,    3,     2,    4
      4,    2,     3,    5
      0,    0,     4,    5
      -,    5,     4,    -
      0,    0,     1,    0
      4,    5,     3,    2
      0,    2,     2,    3

expected_winners:
  - Caleb

# file: 04_c4_b47_noise-soup.yaml
