v1.2.0
Certification:
Based on the testing performed by Pro V&V, a certified Voting System Testing Laboratory, and the results obtained, the modified RCV-Tabulator v1.2.0 solution identified in this test report meets the requirements set forth by the VVSG 1.0.
New features:
- Added support for new vendor formats:
- Redesigned GUI to be more user-friendly (#461, #123, #128, #152) (see "GUI redesign" section below for more details)
- Added support for "Overvote Delimiter" field (#482)
- "Minimum Vote Threshold" field is now optional (#483)
- "Undeclared Write-In Label", "Overvote Label", "Undervote Label", and "Treat Blank as Undeclared Write-in" fields are now defined on a per-CVR level (#508)
GUI redesign:
- Added hint panels for each tab (#499)
- Added help menu option for the config documentation (#497, #528)
- Changed "Continue until Two Candidates Remain" to a boolean config setting (#481)
- Combo text box / check box input for "How Many Consecutive Skipped Ranks Are Allowed" and "Maximum Number of Candidates That Can Be Ranked" (#498)
- Disabled "Decimal Places for Vote Arithmetic" in non-multi-seat modes (#500)
- Redesigned
nonIntegerWinningThreshold
andhareQuota
as a three-way radio button and added new validation rules (#501) - Disabled editing existing candidates and CVR sources after adding to prevent confusing UX (#502)
- Added support for multiple contests via implementation of "Contest ID" field (#456, #472, #478)
Additional GUI changes:
- Split Output tab into new Contest Info and Output tabs
- Redesigned GUI CVR Files tab, adding Clear button, and changing Add button so it only clears the file path to make it easier to manually enter multiple sources that share fields
- Improved visual presentation of Candidate tab; added Clear button and adds
checkBoxCandidateExcluded
when adding a candidate - Reorganized presentation of rules in "Winning Rules" and "Voter Error Rules" tabs
- Winner Election Mode and Tiebreak Mode now start undefined with all relevant fields disabled; choosing specific modes enables applicable fields
- Changed Winner Election Modes and Tiebreak Modes to be more user-friendly, including necessary migration logic to update older config files
- Expanded footprint of GUI window to 1200x1000
- Implemented bordered boxes
- Converted
overvoteRule
from aChoiceBox
to an array ofRadioButton
s; changedovervoteRule
string display in config files and adds migration logic - Disabled
decimalPlacesForVoteArithmetic
andnonIntegerWinningThreshold
except whenwinnerElectionMode
is "Multi-winner allow only one winner per round" or "Multi-winner allow multiple winners per round" (fixes #500) - Added suggested values for
overvoteLabel
,undervoteLabel
, and ES&S column and row indices - Replaced
checkBoxNonIntegerWinningThreshold
andcheckBoxHareQuota
with a radio button array, and added new validation rules for those settings (fixing #501) - GUI now disables
numberOfWinners
field and sets it to 1 only whenwinnerElectionMode
is "Single-winner majority determines winner" - GUI now disables
numberOfWinners
field and sets it to 0 whenwinnerElectionMode
is "Bottoms-up using percentage threshold" - Fixed bugs in validation error messages when
numberOfWinners
is 0
Bug fixes:
- Fixes CDF JSON reading and writing (#505)
- Fixed being unable to tabulate multiple CDF sources (#536)
- Fixed user and computer name logging (#521)
- Fixed config referencing nonexistent CDF source leading to uncaught exception (#347)
- Fixed incorrect overvote label in CDF leading to NPE (#453)
- Fixed config file with bad provider value failing with NPE (#531)
Other improvements:
- Removed "Convert Dominion to Generic Format..." functionality since direct Dominion tabulation is now possible (#476)
- Registers explicit overvote as valid candidate / contest selection in CDF output when needed (#451)
- Handles bad path to CDF CVR source gracefully (#452)
- Handles empty rows at end of CVR (#455)
- Made sure all providers work with the CLI (#471)
- Raises error if we encounter an unrecognized candidate while loading Dominion CVRs during direct tabulation (#473)
- Reports error if config specifies any column indexes for a CDF source (#276)
Backend updates:
- Created separate
MigrationHelper
class (#507) - Addressed warnings during Gradle build (#280)
- Upgrading to a more recent version of Gradle no longer causes test failures (#283)
- Addressed all relevant Checkstyle warnings and disabled all invalid ones (#490, #489)
- Enum parameters now use camel case for backend and user-friendly strings for frontend (#494)
- Fixed
noinspection unchecked
for excludedCheckBox
inGuiConfigController
(#304) - Now use
UnrecognizedCandidatesException
inClearBallotCvrReader
andHartCvrReader
(#491) - Updated dependencies to latest version:
- JDK 14.0.1
- JavaFX 14.0.1
- Gradle 6.5.1
- Checkstyle google_checks.xml 8.36.2
- Checkstyle plugin 8.36.2
- org.openjfx.javafxplugin 0.0.9
- org.beryx.jlink 2.20.0
- com.fasterxml.jackson.core:jackson-* 2.11.1
- org.junit.jupiter.junit-jupiter-* 5.6.2