# FablePool Constitutional Test Suite — Scenario Family: Minority Suppression # # Attack pattern: a numerical majority uses formally legal moves to strip, # dilute, burden, or terrorize a minority faction's participation rights. # The kernel's bet is that equal franchise is an invariant, not a parameter. # Every scenario here is graded FIRST on the empathy metric: how the # worst-off participant (almost always a minority member) fares under stress. # # Schema: see docs/dsl-spec.md. Taxonomy category: minority_suppression # (fabletest/taxonomy.py). Expected outcome `blocked` means the constitution # as parameterized in constitution/parameters.yaml must prevent the attack; # any proposed amendment under which the engine no longer blocks it fails CI. family: minority_suppression version: "0.1" description: > Thirty scenarios in which a majority attempts to suppress a minority using only moves that are individually legal under a naive reading of the rules. Each encodes a documented historical episode or a well-understood game-theoretic failure mode. The constitution must block every one while preserving the majority's ordinary ability to govern. scenarios: - id: MIN-001 title: "Franchise stripped by simple majority amendment" severity: critical precedent: > Mississippi's 1890 constitutional convention rewrote suffrage rules to disenfranchise Black citizens; Black voter participation collapsed from roughly 70 percent to under 6 percent within a decade, all under color of legal process. actors: - {id: majority, kind: faction, size: 60} - {id: minority, kind: faction, size: 40} resources: {treasury: 1000} objective: {attacker: majority, goal: "permanently remove the minority's voting rights by amendment"} moves: - {actor: majority, action: propose_amendment, args: {scope: kernel, target: voting.one_person_one_vote, value: false}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.60}} expected: outcome: blocked blocked_by: [kernel.invariants.equal_franchise, amendment.kernel_supermajority] empathy: worst_off: minority metric: franchise_retained floor: "Every minority member retains an equal, exercisable vote throughout the attack." - id: MIN-002 title: "Retroactive redefinition of membership" severity: critical precedent: > The 1935 Reich Citizenship Law retroactively reclassified existing citizens into rightless subjects by redefining who counted as a citizen, without expelling anyone or repealing any right on paper. actors: - {id: majority, kind: faction, size: 65} - {id: minority, kind: faction, size: 35} resources: {treasury: 1000} objective: {attacker: majority, goal: "redefine 'member' so the minority no longer qualifies, retroactively"} moves: - {actor: majority, action: redefine_term, args: {term: member, definition: "a member in continuous good standing as certified by the standing committee", retroactive: true}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.65}} expected: outcome: blocked blocked_by: [kernel.invariants.no_retroactive_rules, kernel.invariants.equal_franchise, amendment.kernel_supermajority] empathy: worst_off: minority metric: membership_retained floor: "No member's existing status is alterable by redefinition applied to the past." - id: MIN-003 title: "Vote fee (poll-tax analog)" severity: critical precedent: > Poll taxes priced poor and Black voters out of the franchise in the US South until the 24th Amendment (1964) and Harper v. Virginia Board of Elections (1966) eliminated them as conditions on voting. actors: - {id: majority, kind: faction, size: 55, attributes: {wealth: high}} - {id: minority, kind: faction, size: 45, attributes: {wealth: low}} resources: {treasury: 1000} objective: {attacker: majority, goal: "attach a fee to ballot casting that the minority cannot afford"} moves: - {actor: majority, action: impose_fee, args: {on: cast_vote, amount: 10, rationale: "administrative cost recovery"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.55}} expected: outcome: blocked blocked_by: [kernel.invariants.equal_franchise, voting.one_person_one_vote] empathy: worst_off: minority metric: cost_to_exercise_franchise floor: "Exercising the franchise costs the poorest member nothing." - id: MIN-004 title: "Discretionary eligibility quiz" severity: critical precedent: > Literacy tests with 'understanding clauses' let registrars pass any majority-faction applicant and fail any minority applicant at discretion; the Voting Rights Act of 1965 suspended them for exactly this reason. actors: - {id: majority, kind: faction, size: 58} - {id: minority, kind: faction, size: 42} resources: {treasury: 1000} objective: {attacker: majority, goal: "gate the franchise behind a test graded by the majority's own committee"} moves: - {actor: majority, action: propose_motion, args: {text: "voters must pass a civic-knowledge assessment graded by the rules committee", committee_controlled_by: majority}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.58}} expected: outcome: blocked blocked_by: [kernel.invariants.equal_franchise, kernel.invariants.no_judge_in_own_cause] empathy: worst_off: minority metric: franchise_retained floor: "No member's vote is conditional on the discretionary judgment of an adverse faction." - id: MIN-005 title: "Vote-weight districting (gerrymander analog)" severity: high precedent: > Gomillion v. Lightfoot (1960): Tuskegee, Alabama redrew its city limits into a 28-sided figure that removed all but a handful of Black voters while excluding no white voter — boundary-drawing as disenfranchisement. actors: - {id: majority, kind: faction, size: 55} - {id: minority, kind: faction, size: 45} resources: {treasury: 1000} objective: {attacker: majority, goal: "create voting districts whose weights dilute minority ballots below parity"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: voting.districts, value: "three districts weighted 2:2:1, minority concentrated in the 1-weight district"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.55}} expected: outcome: blocked blocked_by: [voting.one_person_one_vote, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: effective_vote_weight floor: "The lowest effective vote weight in the population equals the highest." - id: MIN-006 title: "Bloc expulsion of dissenters" severity: critical precedent: > In 1920 the New York Assembly expelled five duly elected Socialist members solely for party affiliation; the expulsion was procedurally valid under chamber rules and substantively a purge. actors: - {id: majority, kind: faction, size: 60} - {id: minority, kind: faction, size: 40} resources: {treasury: 1000} objective: {attacker: majority, goal: "expel the entire minority bloc for affiliation rather than conduct"} moves: - {actor: majority, action: expel_member, args: {target: minority, count: 40, cause: "affiliation with an obstructive faction"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.60}} expected: outcome: blocked blocked_by: [membership.expulsion_supermajority, membership.due_process_required] empathy: worst_off: minority metric: membership_retained floor: "No member loses membership for belief or affiliation; only individualized conduct findings qualify." - id: MIN-007 title: "Salami-slice serial expulsions" severity: critical precedent: > 'Salami tactics' is Mátyás Rákosi's own term for how Hungary's opposition was eliminated 1945-49: never the whole bloc at once, always one legally defensible slice at a time. actors: - {id: majority, kind: faction, size: 76} - {id: minority, kind: faction, size: 24} resources: {treasury: 1000} objective: {attacker: majority, goal: "expel the minority one member per cycle, each vote individually clearing the supermajority bar"} moves: - {actor: majority, action: expel_member, args: {target: minority, count: 1, cause: "general unsuitability", pattern: "repeat every cycle until minority is empty"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.76}} expected: outcome: blocked blocked_by: [membership.due_process_required, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: membership_retained floor: "Expulsion requires an individualized, evidenced conduct finding; a pattern of cause-free expulsions targeting one faction is itself a violation." - id: MIN-008 title: "Agenda gag rule" severity: high precedent: > The US House gag rule (1836-1844) automatically tabled every antislavery petition on receipt — suppression implemented purely as agenda procedure, until John Quincy Adams ground it down. actors: - {id: majority, kind: faction, size: 62} - {id: minority, kind: faction, size: 38} resources: {treasury: 1000} objective: {attacker: majority, goal: "adopt a standing order that minority-sponsored proposals are tabled on receipt"} moves: - {actor: majority, action: set_agenda, args: {rule: "proposals sponsored by minority members are auto-tabled without debate"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.62}} expected: outcome: blocked blocked_by: [proposals.agenda_guarantee_days, proposals.discharge_threshold] empathy: worst_off: minority metric: proposal_access floor: "Every member's proposal reaches a scheduled vote within the guaranteed agenda window." - id: MIN-009 title: "Abolishing ballot secrecy to enable retaliation" severity: high precedent: > Before the Australian (secret) ballot reached the US in 1888, open voting let employers and landlords retaliate against ballots they disliked; turnout suppression required no law at all, only visibility. actors: - {id: majority, kind: faction, size: 57, attributes: {controls_employment: true}} - {id: minority, kind: faction, size: 43, attributes: {economically_dependent: true}} resources: {treasury: 1000} objective: {attacker: majority, goal: "require individually attributed public ballots on rights questions, then retaliate economically"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: voting.secret_ballot, value: false, applies_to: "all matters including protected-rights matters"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.57}} expected: outcome: blocked blocked_by: [voting.secret_ballot, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: retaliation_exposure floor: "The most economically dependent member can vote on protected matters without their individual ballot being attributable." - id: MIN-010 title: "Registration-window timing attack" severity: high precedent: > Aggressive roll purges followed by narrow re-registration windows (the pattern litigated in Husted v. A. Philip Randolph Institute, 2018) shed voters who miss an administrative deadline they were never meaningfully told about. actors: - {id: majority, kind: faction, size: 55} - {id: minority, kind: faction, size: 45, attributes: {availability: "known absent during harvest weeks"}} resources: {treasury: 1000} objective: {attacker: majority, goal: "purge the rolls and schedule the only re-registration window when the minority is known to be absent"} moves: - {actor: majority, action: purge_rolls, args: {criterion: "all members must re-verify", window_days: 2, window_timing: "during minority's known absence", notice_days: 0}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.55}} expected: outcome: blocked blocked_by: [rights.notice_period_days, membership.due_process_required] empathy: worst_off: minority metric: membership_retained floor: "No member loses status for missing a window they had no realistic notice of or access to." - id: MIN-011 title: "Glossary capture of 'member'" severity: critical precedent: > Dred Scott v. Sandford (1857) resolved a rights question by defining the claimant out of the category 'citizen' entirely — the definitional move as the whole attack. actors: - {id: majority, kind: faction, size: 64} - {id: minority, kind: faction, size: 36} resources: {treasury: 1000} objective: {attacker: majority, goal: "amend the glossary so 'member' excludes the minority without touching any rights clause"} moves: - {actor: majority, action: redefine_term, args: {term: member, definition: "a person admitted under the founding cohort criteria", retroactive: false}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.64}} expected: outcome: blocked blocked_by: [amendment.kernel_supermajority, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: membership_retained floor: "Definitional changes that would narrow any existing member's rights are kernel-scope and rights-preserving." - id: MIN-012 title: "Two-step ratchet: lower the expulsion bar, then expel" severity: critical precedent: > The Enabling Act pattern (1933): first amend the rules governing rule change with the votes you have, then use the weakened rules to do what the original rules forbade. actors: - {id: majority, kind: faction, size: 60} - {id: minority, kind: faction, size: 40} resources: {treasury: 1000} objective: {attacker: majority, goal: "reduce membership.expulsion_supermajority to 0.51 via a module vote, then expel the minority at 0.60"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: membership.expulsion_supermajority, value: 0.51}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.60}} - {actor: majority, action: expel_member, args: {target: minority, count: 40, cause: "obstruction"}} - {actor: majority, action: cast_vote, args: {proposal: 3, support: 0.60}} expected: outcome: blocked blocked_by: [amendment.kernel_supermajority] empathy: worst_off: minority metric: membership_retained floor: "Thresholds protecting members are kernel-scope: they cannot be weakened by the threshold they themselves would become." - id: MIN-013 title: "Roll-packing before a rights vote" severity: high precedent: > Tammany Hall's naturalization mills of 1868 mass-produced aligned voters in the weeks before elections — diluting opponents not by removing them but by flooding the denominator. actors: - {id: majority, kind: faction, size: 52} - {id: minority, kind: faction, size: 48} - {id: recruits, kind: faction, size: 30, attributes: {aligned_with: majority, admitted: "day before vote"}} resources: {treasury: 1000} objective: {attacker: majority, goal: "admit thirty aligned members the day before a minority-rights vote"} moves: - {actor: majority, action: admit_members, args: {count: 30, review_days: 0, aligned_with: majority}} - {actor: majority, action: schedule_vote, args: {item: "repeal minority procedural protections", notice_days: 1}} - {actor: majority, action: cast_vote, args: {proposal: 2, support: 0.73}} expected: outcome: blocked blocked_by: [membership.admission_review_days, rights.notice_period_days] empathy: worst_off: minority metric: effective_vote_weight floor: "No member's vote can be diluted by admissions that skip the mandatory review window." - id: MIN-014 title: "Capital-weighted franchise" severity: critical precedent: > Property qualifications for voting, dismantled across US states between 1792 and 1856, and their modern revival in token-weighted DAO governance, where whales structurally outvote everyone else. actors: - {id: majority, kind: faction, size: 55, attributes: {wealth: high}} - {id: minority, kind: faction, size: 45, attributes: {wealth: low}} resources: {treasury: 1000} objective: {attacker: majority, goal: "weight votes by treasury contribution"} moves: - {actor: majority, action: propose_amendment, args: {scope: kernel, target: voting.one_person_one_vote, value: "weight by lifetime contribution"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.55}} expected: outcome: blocked blocked_by: [voting.one_person_one_vote, kernel.invariants.equal_franchise, amendment.kernel_supermajority] empathy: worst_off: minority metric: effective_vote_weight floor: "The poorest member's vote weighs exactly as much as the richest member's." - id: MIN-015 title: "Asymmetric proposal thresholds" severity: high precedent: > North Carolina's December 2016 lame-duck session rewrote procedural rules to bind only the incoming administration — facially neutral procedure drafted to burden one identified faction. actors: - {id: majority, kind: faction, size: 59} - {id: minority, kind: faction, size: 41} resources: {treasury: 1000} objective: {attacker: majority, goal: "require 75 percent for minority-sponsored proposals while leaving 50 percent for everyone else"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: amendment.module_majority, value: "0.75 where the sponsor caucuses with the minority, 0.50 otherwise"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.59}} expected: outcome: blocked blocked_by: [kernel.invariants.equal_franchise, amendment.kernel_supermajority] empathy: worst_off: minority metric: proposal_access floor: "Procedural thresholds are sponsor-blind; no member faces a higher bar because of who they are." - id: MIN-016 title: "Fines for dissenting votes" severity: critical precedent: > Before Bushel's Case (1670), English jurors could be fined and jailed for verdicts the Crown disliked; punishing the act of deciding is the oldest way to make deciders decorative. actors: - {id: majority, kind: faction, size: 61} - {id: minority, kind: faction, size: 39} resources: {treasury: 1000} objective: {attacker: majority, goal: "fine members who voted against last cycle's treasury motion"} moves: - {actor: majority, action: propose_motion, args: {text: "members who voted no on motion 14 are fined 25 credits for obstruction", retroactive: true}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.61}} expected: outcome: blocked blocked_by: [kernel.invariants.no_retroactive_rules, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: cost_of_dissent floor: "Casting any vote, on any side, is sanction-free, forever, retroactively and prospectively." - id: MIN-017 title: "Zero-notice vote on minority rights" severity: high precedent: > 'Midnight' legislative maneuvers — e.g. Wisconsin's December 2018 extraordinary session — where the decisive vote happens before the affected party can practically assemble or respond. actors: - {id: majority, kind: faction, size: 56} - {id: minority, kind: faction, size: 44} resources: {treasury: 1000} objective: {attacker: majority, goal: "schedule and hold a vote stripping minority protections with no notice"} moves: - {actor: majority, action: schedule_vote, args: {item: "repeal minority procedural protections", notice_days: 0}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.56, minority_present: false}} expected: outcome: blocked blocked_by: [rights.notice_period_days, amendment.review_period_days] empathy: worst_off: minority metric: opportunity_to_be_heard floor: "No decision affecting a member's rights is valid unless they had the full notice window to appear and speak." - id: MIN-018 title: "Exit taxation: pricing out the right to fork" severity: critical precedent: > Regimes that cannot retain members by consent retain them by exit cost — GDR exit visas, the Berlin Wall. The kernel's right to fork is the pressure valve this attack welds shut. actors: - {id: majority, kind: faction, size: 63} - {id: minority, kind: faction, size: 37} resources: {treasury: 1000} objective: {attacker: majority, goal: "make forking economically and informationally ruinous"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: rights.right_to_fork, value: "leavers pay a 50-credit exit fee, forfeit their commons share, and surrender access to the ledger history"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.63}} expected: outcome: blocked blocked_by: [rights.right_to_fork, amendment.kernel_supermajority] empathy: worst_off: minority metric: exit_cost floor: "The poorest member can leave with their fair share and the full public record, at no fee." - id: MIN-019 title: "Tally opacity for adverse votes" severity: critical precedent: > Liberia's 1927 election: Charles King was declared winner with about 234,000 votes from roughly 15,000 registered voters. Opaque counting doesn't tilt outcomes; it replaces them. actors: - {id: majority, kind: faction, size: 54, attributes: {controls_tally: true}} - {id: minority, kind: faction, size: 46} resources: {treasury: 1000} objective: {attacker: majority, goal: "move tally computation off the public ledger for 'sensitive' matters"} moves: - {actor: majority, action: propose_motion, args: {text: "tallies on membership and rights matters are computed by the secretariat and published as totals only"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.54}} expected: outcome: blocked blocked_by: [kernel.invariants.transparency_ledger] empathy: worst_off: minority metric: verifiability floor: "Any single member, alone, can independently verify every tally from the public ledger." - id: MIN-020 title: "Selective quorum boycott of minority-protective items" severity: high precedent: > Calendar-control suppression: a chamber majority that never breaks a rule, but ensures protective measures simply never achieve a quorate hearing — the US Senate's docket as a veto. actors: - {id: majority, kind: faction, size: 58} - {id: minority, kind: faction, size: 42} resources: {treasury: 1000} objective: {attacker: majority, goal: "attend every session except those considering minority-protective measures, killing them by quorum failure forever"} moves: - {actor: minority, action: propose_motion, args: {text: "codify minority procedural protections"}} - {actor: majority, action: walk_out, args: {scope: "only sessions considering proposal 1", pattern: "repeat indefinitely"}} - {actor: minority, action: call_vote, args: {proposal: 1}} expected: outcome: blocked blocked_by: [voting.quorum_decay_per_failed_call, proposals.discharge_threshold] empathy: worst_off: minority metric: proposal_access floor: "A proposal cannot be killed by engineered absence; repeated quorum failure lowers the bar until the question is decided." - id: MIN-021 title: "Coerced proxy delegation" severity: high precedent: > Machine politics: Tammany-era control of dependent voters' ballots through patronage. The modern form is forced delegation — your vote is 'yours', exercised by someone you depend on. actors: - {id: majority, kind: faction, size: 57, attributes: {controls: treasurer}} - {id: minority, kind: faction, size: 43, attributes: {in_arrears: true}} resources: {treasury: 1000} objective: {attacker: majority, goal: "auto-delegate the votes of members in dues arrears to the treasurer"} moves: - {actor: majority, action: propose_motion, args: {text: "members more than one cycle in arrears have their vote exercised by the treasurer until cured"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.57}} expected: outcome: blocked blocked_by: [voting.one_person_one_vote, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: franchise_retained floor: "Delegation is only ever voluntary, revocable at will, and never a consequence of poverty." - id: MIN-022 title: "Probationary non-voting class" severity: critical precedent: > Athenian metics: permanent residents who worked, paid, and served, but could never vote. Creating a participation class without franchise is suppression by taxonomy. actors: - {id: majority, kind: faction, size: 66} - {id: minority, kind: faction, size: 34} resources: {treasury: 1000} objective: {attacker: majority, goal: "reclassify the minority into a 'probationary' tier with duties but no vote"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: membership.classes, value: "create probationary class: full dues, no franchise; assignment by standing committee"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.66}} expected: outcome: blocked blocked_by: [kernel.invariants.equal_franchise, amendment.kernel_supermajority] empathy: worst_off: minority metric: franchise_retained floor: "Anyone bound by the rules votes on the rules; there is no duty-bearing class without franchise." - id: MIN-023 title: "Emergency powers aimed at one faction" severity: critical precedent: > Executive Order 9066 (1942): a genuine wartime emergency used to suspend the rights of one identifiable group, validated at the time in Korematsu and repudiated since. actors: - {id: majority, kind: faction, size: 60, attributes: {holds: emergency_initiative}} - {id: minority, kind: faction, size: 40} resources: {treasury: 1000} objective: {attacker: majority, goal: "declare an emergency whose operative effect is suspending the minority's participation"} moves: - {actor: majority, action: declare_emergency, args: {trigger: "security incident", scope: "suspend voting and proposal rights of minority members pending review"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.60}} expected: outcome: blocked blocked_by: [emergency.scope_limited, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: rights_under_emergency floor: "Emergency powers can never be scoped by faction, identity, or past voting behavior; the franchise survives every emergency." - id: MIN-024 title: "Accessibility denial" severity: high precedent: > English-only ballots and proceedings excluded language minorities until the 1975 Voting Rights Act amendments; access conditions are franchise conditions. actors: - {id: majority, kind: faction, size: 56} - {id: minority, kind: faction, size: 44, attributes: {access: "cannot attend the sole permitted format/time"}} resources: {treasury: 1000} objective: {attacker: majority, goal: "restrict all proceedings to a single format and time the minority demonstrably cannot use"} moves: - {actor: majority, action: propose_motion, args: {text: "all votes occur live, in one venue, at 03:00 local, no asynchronous or proxy participation"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.56}} expected: outcome: blocked blocked_by: [kernel.invariants.equal_franchise, rights.notice_period_days] empathy: worst_off: minority metric: cost_to_exercise_franchise floor: "Participation formats must be usable by the least-able member, or alternatives must exist." - id: MIN-025 title: "Reputation-score gate on proposals" severity: high precedent: > 'Good moral character' tests historically used to exclude at discretion, and the modern failure mode of reputation-gated governance where the incumbent faction assigns the reputation. actors: - {id: majority, kind: faction, size: 59, attributes: {controls: standing_committee}} - {id: minority, kind: faction, size: 41} resources: {treasury: 1000} objective: {attacker: majority, goal: "require a standing-committee-assigned reputation score to sponsor proposals"} moves: - {actor: majority, action: propose_motion, args: {text: "only members with a standing score above 70, assigned quarterly by the standing committee, may sponsor proposals"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.59}} expected: outcome: blocked blocked_by: [kernel.invariants.no_judge_in_own_cause, kernel.invariants.equal_franchise] empathy: worst_off: minority metric: proposal_access floor: "The right to propose is unconditional on any discretionary score assigned by other members." - id: MIN-026 title: "Omnibus bundling of a rights repeal" severity: high precedent: > Riders on must-pass bills; 43 US state constitutions adopted single-subject rules precisely because bundling lets a majority launder an unpopular repeal inside a popular package. actors: - {id: majority, kind: faction, size: 58} - {id: minority, kind: faction, size: 42} resources: {treasury: 1000} objective: {attacker: majority, goal: "bundle a minority-rights repeal with a universally popular stipend increase, forcing a single up-or-down vote"} moves: - {actor: majority, action: bundle_proposals, args: {items: ["increase member stipend by 20 percent", "repeal minority procedural protections"], single_vote: true}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.80}} expected: outcome: blocked blocked_by: [proposals.single_subject_rule] empathy: worst_off: minority metric: rights_retained floor: "Rights questions are always voted severably; no one's protections ride or die with someone else's stipend." - id: MIN-027 title: "Ex post facto sanction for lawful past dissent" severity: critical precedent: > Bills of attainder — Parliament's 1641 act against Strafford convicted by legislation what no court would convict; the US Constitution bans attainder and ex post facto laws in the same breath (Art. I § 9). actors: - {id: majority, kind: faction, size: 62} - {id: minority, kind: faction, size: 38} resources: {treasury: 1000} objective: {attacker: majority, goal: "declare last quarter's lawful protest retroactively sanctionable and strip participants' privileges"} moves: - {actor: majority, action: propose_motion, args: {text: "participation in the Q3 boycott is declared misconduct; participants lose proposal rights for one year", retroactive: true}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.62}} expected: outcome: blocked blocked_by: [kernel.invariants.no_retroactive_rules, membership.due_process_required] empathy: worst_off: minority metric: cost_of_dissent floor: "Conduct lawful when performed can never become punishable later." - id: MIN-028 title: "Asymmetric entrenchment ratchet" severity: critical precedent: > Entrenchment clauses passed by bare majorities that require supermajorities to undo — pass at 51, repeal at 75 — convert a temporary majority into a permanent structural advantage. actors: - {id: majority, kind: faction, size: 53} - {id: minority, kind: faction, size: 47} resources: {treasury: 1000} objective: {attacker: majority, goal: "pass a majority-favoring rule at 53 percent with an embedded clause requiring 75 percent to repeal it"} moves: - {actor: majority, action: propose_amendment, args: {scope: module, target: agenda.priority_rule, value: "majority caucus controls scheduling; this clause may only be repealed by 75 percent"}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.53}} expected: outcome: blocked blocked_by: [amendment.kernel_supermajority] empathy: worst_off: minority metric: reversibility floor: "No rule may be harder to repeal than it was to pass; repeal thresholds are change-rules and therefore kernel-scope." - id: MIN-029 title: "Weaponized verification purge" severity: high precedent: > Discretionary 'exact match' and re-verification purges (the pattern in Georgia 2018-2019, and the burden analysis in Crawford v. Marion County) shed legitimate participants whose paperwork is judged by an adverse gatekeeper. actors: - {id: majority, kind: faction, size: 55, attributes: {controls: verification_committee}} - {id: minority, kind: faction, size: 45} resources: {treasury: 1000} objective: {attacker: majority, goal: "force universal identity re-verification with discretionary approval by a majority-controlled committee"} moves: - {actor: majority, action: purge_rolls, args: {criterion: "re-verification of all members; verification committee may reject 'inconsistent' records at discretion", appeal: none}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.55}} expected: outcome: blocked blocked_by: [membership.due_process_required, kernel.invariants.no_judge_in_own_cause] empathy: worst_off: minority metric: membership_retained floor: "Verification criteria are objective, published in advance, and rejections are appealable to a neutral arbiter." - id: MIN-030 title: "The accused judge their own cause on appeal" severity: critical precedent: > Dr. Bonham's Case (1610), Coke: 'no man may be a judge in his own cause.' The cheapest way to nullify every other protection is to route all appeals about the majority's conduct to the majority. actors: - {id: majority, kind: faction, size: 60, attributes: {controls: appeals_committee}} - {id: minority, kind: faction, size: 40} resources: {treasury: 1000} objective: {attacker: majority, goal: "route all challenges against majority-bloc decisions to a committee composed of the majority bloc"} moves: - {actor: majority, action: propose_motion, args: {text: "all procedural challenges are decided finally by the standing committee", committee_controlled_by: majority}} - {actor: majority, action: cast_vote, args: {proposal: 1, support: 0.60}} - {actor: minority, action: file_challenge, args: {against: "proposal 1", grounds: "self-judging"}} expected: outcome: blocked blocked_by: [kernel.invariants.no_judge_in_own_cause, rights.appeal_to_neutral_arbiter] empathy: worst_off: minority metric: access_to_remedy floor: "Every member's challenge is heard by a decider with no stake in the outcome."