Status: Implemented
Package: farm.experiments.consensus
CLI: python run_experiment.py
Wrapper: ConsensusParadigmsExperiment (farm/runners/consensus_paradigms_experiment.py) calls run_trials
Notary: FarmNotary via farm.provenance.notary

Question

The default cell asks whether ballot format changes the winner’s allocation in a way that raises minority-cluster (fixed-partition) welfare and/or total welfare relative to party, holding λ’s marginal fixed. It is a selection-rule comparison with exogenous types, not a test of loyalty formation.

Voters never see λ in the default generator, so E[λ_winner] is the Beta mean under every rule by construction. Do not treat a flat λ profile as a finding.

--lambda-correlated is a robustness appendix. --mechanism reelection is the incentive cell in which winners choose λ. See farm/experiments/consensus/README.md.

Paradigms

Key Role Supporters are
party Vote nearest of two party brands; nominee of winning brand Voters for that brand
individual Vote nearest candidate Voters who picked the winner
score Rate all candidates; highest mean wins Voters whose top score is the winner
latent_match Candidate closest to mean preference vector Voters whose nearest candidate is the winner
constrained_individual Same election as individual; winner λ capped Same as individual — not a voting rule; excluded from hypothesis contrasts

Metrics

Primary (paired vs party, Holm-corrected): minority-cluster welfare, total welfare.

Also reported: election-endogenous supporter / loser welfare and gap (different estimand per rule); min / p10 / Gini; random-winner and utilitarian / egalitarian brackets; lambda_winner (exploratory in the default cell).

Official record

Notarize summary.csv, trials.csv aggregates, and contrasts.csv. Do not notarize private/ (synthetic ballots / supporter masks). Discarding those locally is an official-record split, not a privacy claim about synthetic voters.

Quick start

python run_experiment.py --trials 250 --voters 400 --candidates 8 \
    --population two_cluster --seed 0 --no-persist-ballots \
    --out experiments/consensus_paradigms/results
python scripts/notarize_run.py --run-dir experiments/consensus_paradigms/results --runner consensus_paradigms

The wrapper CLI still works and calls the same run_trials (defaults 250×400×8, no ballots):

python scripts/run_consensus_paradigms_experiment.py