Skip to content

Releases: BrightSpots/rcv

v1.3.1-RC2

09 Feb 18:54
68d2e19
Compare
Choose a tag to compare
v1.3.1-RC2 Pre-release
Pre-release

What's Changed

  • fix clearballot cvr parsing: ignore any commas in quoted text by @ryu-seg in #796

Full Changelog: v1.3.1...v1.3.1-RC2

v1.3.2 (84df706)

12 Dec 14:40
Compare
Choose a tag to compare
v1.3.2 (84df706) Pre-release
Pre-release

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

Full Changelog: v1.3.1...v1.3.2

dev-2023-06-30

01 Jul 00:36
Compare
Choose a tag to compare
dev-2023-06-30 Pre-release
Pre-release

An in-progress working draft of v2.0. This is in active development and features in this release have not been tested. Do not use for anything other than internal testing.

What's Changed

Full Changelog: v1.3.1...dev-2023-06-30

v1.3.1

25 Apr 20:39
6b2c86d
Compare
Choose a tag to compare

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

18 Aug 07:12
359e0b0
Compare
Choose a tag to compare

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 an isValid boolean (#618)
  • checkstyle-suppressions.xml location is now handled in build.gradle to avoid needing to manually modify google_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

13 Dec 06:36
d4ac2db
Compare
Choose a tag to compare

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 and hareQuota 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 a ChoiceBox to an array of RadioButtons; changed overvoteRule string display in config files and adds migration logic
  • Disabled decimalPlacesForVoteArithmetic and nonIntegerWinningThreshold except when winnerElectionMode 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 and checkBoxHareQuota 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 when winnerElectionMode is "Single-winner majority determines winner"
  • GUI now disables numberOfWinners field and sets it to 0 when winnerElectionMode 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 excluded CheckBox in GuiConfigController (#304)
  • Now use UnrecognizedCandidatesException in ClearBallotCvrReader and HartCvrReader (#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

24 May 07:50
a81a249
Compare
Choose a tag to compare

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

03 Sep 00:28
6019d92
Compare
Choose a tag to compare

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

22 Aug 18:44
f211d6d
Compare
Choose a tag to compare
v1.0.0

v0.1.2-beta

20 Aug 06:54
887aca2
Compare
Choose a tag to compare
v0.1.2-beta Pre-release
Pre-release
  • Computer name and user name now reported at the start of audit logs (fixed #376)
  • Fixed GUI elements rendering with "..." in Linux (fixed #368)
  • Made casing consistent for variable names (fixed #248)
  • Removed or clarified references to "visualizer" (fixed #375)
  • Cleaned up comments (fixed #378)
  • Updated README (fixed #376)