The measure
For every roll call where the parties split, we ask two questions: which way did the Democratic majority vote, and which way did the Republican majority vote? Then we check which of them each member matched. The measure never looks at the member's own party.
Because party is never an input, a party switch shows up as one continuous line rather than a break — and the line often moves before the label does. Strom Thurmond sided with the Democratic majority 82% of the time in 1955 and 17% by 1961, while still a Democrat. He changed parties in 1964.
See Thurmond's arcWhat counts as contested
Legislation and nominations, scored apart
The Senate confirms nominees on the floor, and in recent Congresses those votes swamp the calendar: 476 of the 768 contested Senate roll calls in the 117th Congress were nominations. Blend them in and a member's legislative record disappears. So legislation leads, and nominations sit beside it, labelled.
Blended, she reads as a reliable Democratic vote. Both numbers are true; this one misleads, which is why it is never the headline.
Reading a score
Five display rules. Break any of them and the site starts asserting things that are not true.
The historical record is thin
Every roll call before 1973 has no description — not most, all of them. For an old vote we have a date, usually a bill number, how each member voted and which side that matched. We show exactly that and fill nothing in by hand.
This is why member pages are built around the career arc, not a feed of vote descriptions: a description-led design works for recent Congresses and collapses on the historical record, where some of the most interesting members are.
Validation
Checked against sources the data did not come from.
The errors we look for
Nearly every real defect found while building this was a plausible number, not a crash. None failed a test. All would have shipped looking reasonable.