Releases: BrightSpots/rcv
build-develop: Have dominion autoload use both names and codes (alt) (#908)
For Dominion, properly auto-load both names and Dominion GUIDs as codes
v1.3.1-RC3
What's Changed
Full Changelog: v1.3.1-RC2...v1.3.1-RC3
v1.3.1-RC2
What's Changed
Full Changelog: v1.3.1...v1.3.1-RC2
v1.3.2 (84df706)
Updates for v1.3.2 have been tested only on Windows OS. v1.3.2 is for installation on Windows OS only
v1.3.2 was certified in the state of California on April 22, 2024.
What's Changed
- Explicit TDP instructions for a secure, hardened OS install with secure BIOS
- TDP instructions for two Windows OS accounts. One Administrator level Windows account for installation and initial configuration. A separate ‘RCTab’ Windows standard account for running the tabulation with only necessary permissions that will not have access to make administrative changes to the machine that could be a security issue
- Read-Only RCTab output files, each with a corresponding read-only .hash file that contains the SHA512 hash of file contents to ensure they haven’t been edited
- Automatic, programmatic verification of the cryptographic signature of all input CVRs using FIPS 140-2 certified libraries. This verification step ensures both the integrity (CVR contents have not been edited) and provenance (CVRs came from the Hart voting system) of the Hart CVRs. RCTab will throw a halting error and tabulation will not begin if cryptographic validation of Hart’s CVR signature is not successful.
- Major updates in the TDP throughout section 07 (I-M) to specifically address the California Voting System Standards section 9.6 System Security Specification
- Gradle
caches
package is built with release to enable airgapped build
Code Changes
- make all output files read-only (#687) by @artoonie in #749
- include SHA256 for output files (#752) cherry-pick onto 1.3.2 by @artoonie in #758
- RSA Validation: Cherry-Picked ont 1.3.2 release by @artoonie in #764
- no saving into user accounts (cherry-pick onto 1.3.2) by @artoonie in #768
- FIPS Compliance by @artoonie in #765
- Allow bouncycastle to build on non-Oracle JDKs by @artoonie in #769
- downgrade bouncycastle by @artoonie in #773
- bump version number to 1.3.2 by @artoonie in 0eacbb4
- fix too strict security provider checking by @artoonie in c15bf17
Full Changelog: v1.3.1...v1.3.2
v1.3.1
Certification:
This release has not yet been tested to VVSG requirements. If you need a version of the software tested to VVSG requirements, please use a newer certified version (above, if it exists), or version 1.2.0, available below.
Bug fixes:
- Fixed XML parsing failing when running built version (#625)
Backend updates:
- Releases for all platforms are now automatically built by GitHub when published (#282)
Full Changelog: v1.3.0...v1.3.1
v1.3.0
Certification:
This release has not yet been tested to VVSG requirements. If you need a version of the software tested to VVSG requirements, please use version 1.2.0, available below. We will update this page when 1.3.0 has been tested by a Voting System Test Laboratory to VVSG requirements.
New features:
- Added support for multi-file Dominion format (#569)
- Allows batch elimination and "continue until two candidates remain" to be enabled in multi-pass IRV mode (#611)
- Allows users to specify multiple CVR files at once in the GUI (#617)
- Adds validation highlighting to the GUI when clicking the "add" buttons for candidates and CVRs (#618)
- Changed audit logs to include validation outcome (#616)
Bug fixes:
- Fixed Hare Quota (#562)
- Fixed build for M1 Macbooks (#586)
- Fixed crashes when % was in file paths (#601)
- Fixed inaccurate
overvoteRule
error message (#609) - Fixed bug in logic for exhaustIfMultipleContinuing overvote rule (#610)
- Fixed bug where
treatBlankAsUndeclaredWriteIn
validation failure for certain providers wouldn't actually fail validation (#618)
Other improvements:
- Rebranded "Unversal RCV Tabulator" as "RCTab" (#603)
- Updated license from AGPL to MPL 2.0 (#604)
- Exits gracefully if all declared candidates fall beneath minimum vote threshold (#608)
- Moved validation of provided overvote delimiter and overvote label into
performBasicCvrSourceValidation
so user is alerted when clicking the "add" button in the CVR tab (#618) - Updated documentation and help text (#547, #614, #617)
Backend updates:
- Enabled CI, which runs tests, Checkstyle, and Spotbugs (#576)
- Addressed all outstanding Checkstyle and Spotbugs warnings (#587)
- Internal clean-up to conform to VVSG coding requirements (#600, #602, #606)
- Changed
ContestConfig.validate()
and associated methods to return a set of validation errors instead of anisValid
boolean (#618) - checkstyle-suppressions.xml location is now handled in
build.gradle
to avoid needing to manually modifygoogle_checks.xml
in the future (#544) - Updated dependencies to latest versions:
- JDK 17.0.2
- JavaFX 18
- Gradle 7.5.1
- Checkstyle google_checks.xml 10.3.2
- Checkstyle plugin 10.3.2
- spotbugs 4.7.1
- spotbugs-gradle-plugin 5.0.9
- org.openjfx.javafxplugin 0.0.11
- org.beryx.jlink 2.25.0
- com.fasterxml.jackson.core:jackson-* 2.13.3
- org.junit.jupiter.junit-jupiter-* 5.9.0
- org.apache.commons:commons-csv 1.9.0
- org.apache.poi:poi-ooxml 5.2.2
Full Changelog: v1.2.0...v1.3.0
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
v1.1.0
Certification:
Based on the testing performed by Pro V&V, a certified Voting System Testing Laboratory, and the results obtained, the Universal RCV Tabulator v1.1.0 solution is believed to meet the applicable requirements set forth by the EAC-approved VVSG 1.0.
New features:
- Added support for converting Dominion JSON CVRs to generic .csv format (including precinct portions) (#404, #406, #407, #408, #415, #439)
- Added multiSeatBottomsUpPercentageThreshold option (#403)
- Added CLI option to convert Dominion CVR to generic .csv (#408)
- New GUI menu and conversion options (can now convert to CDF and convert Dominion to generic via the GUI) (#408, #421)
- Added Dominion Alaska CVR to sample_input folder
Bug fixes:
- Batch elimination now works properly with singleSeatContinueUntilTwoCandidatesRemain (#396)
- In a multi-seat contest, if someone wins in the first round, we now automatically eliminate undeclared write-ins before we eliminate any other candidates; previously, we treated UWIs like a normal candidate, which meant we potentially eliminated other candidates with lower tallies first (#397)
- If UWI exceeds the winning threshold in the initial count, we no longer mistakenly elect this candidate (#398)
Backend updates:
- Updated dependencies to latest version: JDK, JavaFX, Checkstyle google_checks.xml, Checkstyle plugin, org.openjfx.javafxplugin, org.beryx.jlink, org.apache.commons:commons-csv, org.apache.poi:poi-ooxml, com.fasterxml.jackson.core:jackson-*
- Added special code to test configs to obviate the need to update the version with each increment (#426)
- Updated tests and improved test coverage
- Copyright update (#414)
- Code cleanup
v1.0.1
Based on the testing performed by Pro V&V, a certified Voting System Testing Laboratory, and the results obtained, the Universal RCV Tabulator solution meets the requirements set forth by the EAC-approved VVSG 1.0 to be used with the ES&S EVS 5.0.0.0 through 6.0.4.0 software.
Changelog:
- Added Checkstyle plugin to Gradle and set it up for Google format
- Minor refactoring to address Checkstyle issues
v1.0.0
v1.0.0