Skip to content

#1487 — the Range of Scores chart divides by a number the page never prints

Fixed in Equal-Vote/bettervoting#1516 (2026-08-15). Issue: #1487, filed 2026-08-06.

The finding

On a race with flat ballots the headline and the Range of Scores chart divide by different numbers, and only the headline's is ever shown:

Panel Number Denominator
Headline "1 voters" nTallyVotes = 1 (flat ballots removed)
Stats for Nerds → Range of Scores 33% / 67% 3 — every non-blank ballot

The tall 67% bar is composed entirely of ballots the same page has already declared abstentions, and the number 3 appears nowhere for the reader to divide by.

Mirror image of #1390 / #1431, which had a chart that dropped ballots the tabulator counted. This one keeps ballots the tabulator dropped. Same family as #1117: a number computed over a ballot set that was quietly changed.

Why the denominator was left alone

The chart's denominator is arguably the right one for its question. "Did voters use the full 0–5 range?" is a question about ballots as marked, and a flat ballot is the most extreme case of not using the range — excluding it would bias the answer toward "yes". The defect is that the denominator is invisible, not that it is wrong. So the fix prints it:

  • subtitle carries the count — "…on ballots (10 ballots)"
  • and when that count differs from nTallyVotes, one line names the gap, rendering only when they differ.

Left open deliberately

The issue's third action item — auditing the other Stats for Nerds widgets (Column Distribution, Average Supporter Profile, Name Recognition, Head-to-Head), which all read the same ballotsForRace() helper — is not in the PR. Each asks a different question, so the right denominator is not one answer, and settling four of them inside a labelling change would bury the reasoning.

Provenance

Claim How established
The two denominators read from ScoreRangeWidget.tsx and AnonymizedBallotsContextProvider.tsx
The live 33/67 example from the issue, against hckrf7
The fix renders "(10 ballots)" and the 2-abstention note executed — 10-ballot STAR election seeded locally, 2 of them flat; headline "8 voters", chart "(10 ballots)"
The panel is behind ALL_STATS read from Results.tsx, and reproduced by setting the flag override