FAILURE MAP
← Case archive

FA-12751 / Voting rule computation / Open access

Exhausted ballots prevent a continuing-ballot majority · case 01

Exhausted ballots prevent a continuing-ballot majority.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The denominator includes exhausted ballots.

VERIFIED REPAIR

Require strictly more than half of continuing ballots.

Unsuccessful approach: Changing the denominator but accepting equality declares a tied count a majority.

Case contract

Given nonnegative candidate count, continuing count and total count with candidate<=continuing<=total, return whether candidate has a strict majority of continuing ballots. Zero continuing ballots have no majority.

Why this case matters

A deterministic toy ballot model makes the stated counting convention executable.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(votes, continuing, total):
    return votes*2 > total
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('exhaustion changes denominator', solve(N+1,2*N+1,4*N+4), True)
check('half is insufficient', solve(N,2*N,3*N), False)
check('empty electorate', solve(0,0,0), False)
check('unanimous continuing', solve(N,N,5*N), True)
check('minority', solve(N,2*N+1,2*N+1), False)
check('one continuing', solve(1,1,2), True)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
exhaustion changes denominatorFalseTrueFailed
half is insufficientFalseFalsePassed
empty electorateFalseFalsePassed
unanimous continuingFalseTrueFailed
minorityFalseFalsePassed
one continuingFalseTrueFailed

SHA-256 / a48703c0fb0b7387f42a64b1c4704cb971bff1be82d1b6d26a5f1f94046f1c3f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(votes, continuing, total):
    return votes*2 >= continuing
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('exhaustion changes denominator', solve(N+1,2*N+1,4*N+4), True)
check('half is insufficient', solve(N,2*N,3*N), False)
check('empty electorate', solve(0,0,0), False)
check('unanimous continuing', solve(N,N,5*N), True)
check('minority', solve(N,2*N+1,2*N+1), False)
check('one continuing', solve(1,1,2), True)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
exhaustion changes denominatorTrueTruePassed
half is insufficientTrueFalseFailed
empty electorateTrueFalseFailed
unanimous continuingTrueTruePassed
minorityFalseFalsePassed
one continuingTrueTruePassed

SHA-256 / f8995e7232ca3a543145945cd772163d883160eb9d8707615235b0a4f8a1b7b9

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(votes, continuing, total):
    return votes*2 > continuing
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('exhaustion changes denominator', solve(N+1,2*N+1,4*N+4), True)
check('half is insufficient', solve(N,2*N,3*N), False)
check('empty electorate', solve(0,0,0), False)
check('unanimous continuing', solve(N,N,5*N), True)
check('minority', solve(N,2*N+1,2*N+1), False)
check('one continuing', solve(1,1,2), True)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
exhaustion changes denominatorTrueTruePassed
half is insufficientFalseFalsePassed
empty electorateFalseFalsePassed
unanimous continuingTrueTruePassed
minorityFalseFalsePassed
one continuingTrueTruePassed

SHA-256 / 6c8e04c867c2281b350da18892cc11f6addb211b0c19e3ce508f79753cc8d813

Verification & scope

Abstract counting rules only; excludes jurisdictional law, ballot authentication and election operations. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:38:59.839907+00:00.

Case digest / dd0639556e0b5f27d368309d8f0edbefa0df3344f38f967ef2ba99cf88a14ff4