-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathBrightSpots-rcv.json
More file actions
3 lines (3 loc) · 347 KB
/
BrightSpots-rcv.json
File metadata and controls
3 lines (3 loc) · 347 KB
1
2
3
{"repository": "BrightSpots/rcv", "language": "java", "clone_url": "https://github.com/BrightSpots/rcv.git", "collection_timestamp": "2023-11-25T21:01:29.667252Z", "commit_hash": "688920f277061ec880f3ed343a6d690dc98dd6de", "commit_message": "make all output files read-only (#687)\n\nCo-authored-by: HEdingfield <[email protected]>", "commit_timestamp": "2023-06-14T07:14:51Z", "previous_commit_hash": "558b63d5c43b4522c0fd13868b1f146cf3c4f799", "previous_commit_message": "deprecate the concept of \"codes\" (almost) entirely (#690)\n\nCo-authored-by: HEdingfield <[email protected]>", "previous_commit_timestamp": "2023-06-14T06:29:45Z", "time_to_patch": "0:45:06", "bug_patch": "diff --git a/src/main/java/network/brightspots/rcv/Logger.java b/src/main/java/network/brightspots/rcv/Logger.java\nindex 78d7b1e..f0a5077 100644\n--- a/src/main/java/network/brightspots/rcv/Logger.java\n+++ b/src/main/java/network/brightspots/rcv/Logger.java\n@@ -32,6 +32,7 @@\n \n package network.brightspots.rcv;\n \n+import java.io.File;\n import java.io.IOException;\n import java.nio.file.Path;\n import java.nio.file.Paths;\n@@ -59,6 +60,7 @@ class Logger {\n private static final java.util.logging.Formatter formatter = new LogFormatter();\n private static java.util.logging.Logger logger;\n private static java.util.logging.FileHandler tabulationHandler;\n+ private static String tabulationLogPattern;\n \n static void setup() {\n logger = java.util.logging.Logger.getLogger(\"\");\n@@ -95,7 +97,7 @@ class Logger {\n throws IOException {\n // log file name is: outputFolder + timestamp + log index\n // FileHandler requires % to be encoded as %%. %g is the log index\n- String tabulationLogPattern =\n+ tabulationLogPattern =\n Paths.get(outputFolder.replace(\"%\", \"%%\"),\n String.format(\"%s_audit_%%g.log\", timestampString))\n .toAbsolutePath()\n@@ -116,6 +118,19 @@ class Logger {\n tabulationHandler.flush();\n tabulationHandler.close();\n logger.removeHandler(tabulationHandler);\n+\n+ int index = 0;\n+ while (true) {\n+ File file = new File(tabulationLogPattern.replace(\"%g\", String.valueOf(index)));\n+ if (!file.exists()) {\n+ break;\n+ }\n+ boolean readOnlySucceeded = file.setReadOnly();\n+ if (!readOnlySucceeded) {\n+ warning(\"Failed to set file to read-only: %s\", file.getAbsolutePath());\n+ }\n+ index++;\n+ }\n }\n \n static void fine(String message, Object... obj) {\ndiff --git a/src/main/java/network/brightspots/rcv/ResultsWriter.java b/src/main/java/network/brightspots/rcv/ResultsWriter.java\nindex 16d115b..b97ded9 100644\n--- a/src/main/java/network/brightspots/rcv/ResultsWriter.java\n+++ b/src/main/java/network/brightspots/rcv/ResultsWriter.java\n@@ -116,6 +116,10 @@ class ResultsWriter {\n \n try {\n jsonWriter.writeValue(outFile, json);\n+ boolean readOnlySucceeded = outFile.setReadOnly();\n+ if (!readOnlySucceeded) {\n+ Logger.warning(\"Failed to set file to read-only: %s\", outFile.getAbsolutePath());\n+ }\n } catch (IOException exception) {\n Logger.severe(\n \"Error writing to JSON file: %s\\n%s\\nPlease check the file path and permissions!\",\n@@ -386,6 +390,12 @@ class ResultsWriter {\n try {\n csvPrinter.flush();\n csvPrinter.close();\n+\n+ File file = new File(csvPath);\n+ boolean readOnlySucceeded = file.setReadOnly();\n+ if (!readOnlySucceeded) {\n+ Logger.warning(\"Failed to set file to read-only: %s\", file.getAbsolutePath());\n+ }\n } catch (IOException exception) {\n Logger.severe(\"Error saving file: %s\\n%s\", outputPath, exception);\n throw exception;\n@@ -554,6 +564,12 @@ class ResultsWriter {\n csvPrinter.close();\n filesWritten.add(outputPath.toString());\n Logger.info(\"Successfully wrote: %s\", outputPath.toString());\n+\n+ File file = new File(outputPath.toString());\n+ boolean readOnlySucceeded = file.setReadOnly();\n+ if (!readOnlySucceeded) {\n+ Logger.warning(\"Failed to set file to read-only: %s\", file.getAbsolutePath());\n+ }\n }\n } catch (IOException exception) {\n Logger.severe(\n", "bug_patch_file_extensions": ["java"], "test_patch": "diff --git a/src/test/java/network/brightspots/rcv/TabulatorTests.java b/src/test/java/network/brightspots/rcv/TabulatorTests.java\nindex 2905c66..92d0646 100644\n--- a/src/test/java/network/brightspots/rcv/TabulatorTests.java\n+++ b/src/test/java/network/brightspots/rcv/TabulatorTests.java\n@@ -144,6 +144,15 @@ class TabulatorTests {\n for (File file : files) {\n if (!file.isDirectory()) {\n try {\n+ // Every ephemeral file must be set to read-only on close, including audit logs\n+ assertFalse(\n+ file.canWrite(),\n+ \"File must be set to read-only: %s\".formatted(file.getAbsolutePath()));\n+ // Then set it writeable so it can be deleted\n+ boolean writeableSucceeded = file.setWritable(true);\n+ if (!writeableSucceeded) {\n+ Logger.warning(\"Failed to set file to writeable: %s\", file.getAbsolutePath());\n+ }\n Files.delete(file.toPath());\n } catch (IOException exception) {\n Logger.severe(\"Error deleting file: %s\\n%s\", file.getAbsolutePath(), exception);\n", "test_patch_file_extensions": ["java"], "non_code_patch": "", "non_code_patch_file_extensions": [], "change_type": "SOURCE_ONLY", "actions_runs": [[{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 1.402, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.612, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 8.772, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.056, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.006, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.087, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.104, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.036, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.097, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 11.829, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.114, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 57.169, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.034, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.046, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.133, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.055, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.071, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.177, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.366, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.066, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.01, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.098, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.186, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.15, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.058, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.055, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.042, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.035, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.032, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.038, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.033, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 14.139, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 5.89, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.039, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.102, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.045, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.055, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.052, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.034, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.046, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.061, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.104, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 5.758, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.065, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 7.589, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.086, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.041, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 6.074, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.476, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.069, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.126, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "7dbe06f9-a5ad-40c1-a5e3-d7b44bf28cb9", "build_tool": "gradle", "elapsed_time": 206.70307636260986, "default_actions": false}], [{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 2.309, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_fractional_threshold/output/2023-11-25_20-55-57_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.861, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/output/2023-11-25_20-56-00_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 11.895, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/output/2023-11-25_20-56-01_MINNEAPOLIS_W-6_P-07_precinct_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.075, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/output/2023-11-25_20-56-13_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.011, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.098, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_overvote_delimiter/output/2023-11-25_20-56-13_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.117, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/dominion_multi_file/output/2023-11-25_20-56-13_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.071, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/output/2023-11-25_20-56-13_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.165, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/dominion_wyoming/output/2023-11-25_20-56-13_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 11.559, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/output/2023-11-25_20-56-13_summary_3.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.067, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/dominion_no_precinct_data/output/2023-11-25_20-56-25_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.037, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_coroner/output/2023-11-25_20-56-25_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 55.904, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor_scale/output/2023-11-25_20-56-25_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.035, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.038, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_chief_of_police/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.084, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/dominion_alaska/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.041, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.034, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.031, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_allow_only_one_winner_per_round/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.103, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/continue_tabulation_test/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.319, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/dominion_kansas/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.034, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.004, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.035, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/excluded_test/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.07, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/hart_travis_county_officers/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.03, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/uwi_cannot_win_test/output/2023-11-25_20-57-21_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.046, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/output/2023-11-25_20-57-21_summary_3.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.013, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_0_skipped_first_choice/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.012, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_1_exhaust_at_overvote/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.012, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_2_overvote_skip_to_next/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.012, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_3_skipped_choice_exhaust/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.012, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_4_skipped_choice_next/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.011, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_5_two_skipped_choice_exhaust/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.011, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_6_duplicate_exhaust/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.011, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_7_duplicate_skip_to_next/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.013, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_8_multi_cdf/output/2023-11-25_20-57-22_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.015, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/skip_to_next_test/output/2023-11-25_20-57-22_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.014, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/multi_seat_uwi_test/output/2023-11-25_20-57-22_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.015, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/multi_seat_bottoms_up_with_threshold/output/2023-11-25_20-57-22_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.014, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/minimum_threshold_test/output/2023-11-25_20-57-22_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 9.139, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2018_maine_governor_primary/output/2023-11-25_20-57-22_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 4.032, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_hare/output/2023-11-25_20-57-31_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.024, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/continue_until_two_with_batch_elimination_test/output/2023-11-25_20-57-35_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.033, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/output/2023-11-25_20-57-35_summary_3.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.018, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_test/output/2023-11-25_20-57-35_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.021, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_whole_threshold/output/2023-11-25_20-57-35_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.018, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/output/2023-11-25_20-57-35_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.014, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/aliases_cdf_json/output/2023-11-25_20-57-35_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.015, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/aliases_ess_xlsx/output/2023-11-25_20-57-35_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.013, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.017, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/output/2023-11-25_20-57-35_MINNEAPOLIS_W-3_P-02_precinct_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 3.868, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_bottoms_up/output/2023-11-25_20-57-35_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.027, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_tax_collector/output/2023-11-25_20-57-39_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 5.193, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/output/2023-11-25_20-57-39_MINNEAPOLIS_W-6_P-07_precinct_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.026, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.028, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.024, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/exhaust_if_multiple_continuing/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.02, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_tiebreaker_test/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.048, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor_codes/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.033, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.015, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/clear_ballot_kansas_primary/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.022, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_mayor/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.034, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/hart_cedar_park_school_board/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 3.568, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park/output/2023-11-25_20-57-44_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.015, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/generic_csv_test/output/2023-11-25_20-57-48_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.014, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/duplicate_test/output/2023-11-25_20-57-48_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.029, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor/output/2023-11-25_20-57-48_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.012, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/output/2023-11-25_20-57-48_summary.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.046, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError: File must be set to read-only: /tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/src/test/resources/network/brightspots/rcv/test_data/precinct_example/output/2023-11-25_20-57-48_cvr_cdf.json ==> expected: <false> but was: <true>", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "f856243b-e4d3-431e-8c7e-f8d4b93c9ae2", "build_tool": "gradle", "elapsed_time": 196.63227033615112, "default_actions": false}], [{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 1.03, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.828, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 8.249, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.066, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.007, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.064, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.111, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.066, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.169, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 12.423, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.064, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 55.763, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.073, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.231, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.003, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.045, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.047, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.012, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.013, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.048, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.03, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 9.817, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 3.832, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 3.87, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.033, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 5.704, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.066, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.052, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.042, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 4.343, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.05, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.047, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.112, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/dbbb31ab-ddd6-41fa-b948-97104eb063be/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "939b872a-d900-4a72-a68f-77b568d2291a", "build_tool": "gradle", "elapsed_time": 187.78275799751282, "default_actions": false}]], "strategy": "PASS_PASS", "issues": [{"id": 687, "title": "make all output files read-only", "body": "WIP: Depends on whether this satisfies requirements", "comments": ["@chughes297 per @artoonie's comment above, does this satisfy requirements and should we go forward with it?", "haven't heard either way but i see no harm in adding this."], "labels": [{"name": "v1.4 Nice-to-Have P1", "description": ""}], "is_pull_request": true, "review_comments": []}]}
{"repository": "BrightSpots/rcv", "language": "java", "clone_url": "https://github.com/BrightSpots/rcv.git", "collection_timestamp": "2023-11-25T21:03:41.165188Z", "commit_hash": "c80e6272c83a67999bce67e3a5c9b5a9120fe2c2", "commit_message": "swap transfer/vote% column, and by by fix (#720)\n\n", "commit_timestamp": "2023-06-26T17:41:05Z", "previous_commit_hash": "833ebaf06efe617091a4d5b9a2812aaae8dc73c8", "previous_commit_message": "Issue 633 (New CSV Format) -- Part 3: Implementation (#714)\n\n* Add \"Total Votes Cast\" to results summary file\r\n\r\n* New format: CSV partially implemented\r\n\r\n* regenerate all test files with new data\r\n\r\n* add undervote wip\r\n\r\n* Use PrecinctTally structure instead of Map<String, BigDecimal>\r\n\r\n* slight refactor\r\n\r\n* clean-up\r\n\r\n* polish\r\n\r\n* remove code that will be re-integrated in a chained PR\r\n\r\n* remove additional unused code\r\n\r\n* add threshold to roundtally\r\n\r\n* address PR comments\r\n\r\n* Revert \"remove code that will be re-integrated in a chained PR\"\r\n\r\nThis reverts commit 3b3689455a10dd96fd6058dfb76e3c46e7390f1d.\r\n\r\n* new output format\r\n\r\n---------\r\n\r\nCo-authored-by: Armin Samii <[email protected]>", "previous_commit_timestamp": "2023-06-26T16:13:35Z", "time_to_patch": "1:27:30", "bug_patch": "diff --git a/src/main/java/network/brightspots/rcv/ResultsWriter.java b/src/main/java/network/brightspots/rcv/ResultsWriter.java\nindex c80bc61..5243d6c 100644\n--- a/src/main/java/network/brightspots/rcv/ResultsWriter.java\n+++ b/src/main/java/network/brightspots/rcv/ResultsWriter.java\n@@ -375,10 +375,10 @@ class ResultsWriter {\n csvPrinter.println();\n \n Pair<String, StatusForRound>[] statusesToPrint = new Pair[]{\n- new Pair<>(\"by Overvotes\", StatusForRound.INACTIVE_BY_OVERVOTE),\n- new Pair<>(\"by Skipped Rankings\", StatusForRound.INACTIVE_BY_SKIPPED_RANKING),\n- new Pair<>(\"by Exhausted Choices\", StatusForRound.INACTIVE_BY_EXHAUSTED_CHOICES),\n- new Pair<>(\"by Repeated Rankings\", StatusForRound.INACTIVE_BY_REPEATED_RANKING)\n+ new Pair<>(\"Overvotes\", StatusForRound.INACTIVE_BY_OVERVOTE),\n+ new Pair<>(\"Skipped Rankings\", StatusForRound.INACTIVE_BY_SKIPPED_RANKING),\n+ new Pair<>(\"Exhausted Choices\", StatusForRound.INACTIVE_BY_EXHAUSTED_CHOICES),\n+ new Pair<>(\"Repeated Rankings\", StatusForRound.INACTIVE_BY_REPEATED_RANKING)\n };\n \n for (Pair<String, StatusForRound> statusToPrint : statusesToPrint) {\n@@ -387,6 +387,11 @@ class ResultsWriter {\n StatusForRound status = statusToPrint.getValue();\n BigDecimal thisRoundInactive = roundTallies.get(round).getBallotStatusTally(status);\n csvPrinter.print(thisRoundInactive);\n+\n+ // Don't display percentage of inactive ballots\n+ csvPrinter.print(\"\");\n+\n+ // Do display transfer of inactive ballots\n if (round != numRounds) {\n BigDecimal nextRoundInactive = roundTallies.get(round + 1).getBallotStatusTally(status);\n BigDecimal diff = nextRoundInactive.subtract(thisRoundInactive);\n@@ -394,9 +399,6 @@ class ResultsWriter {\n } else {\n csvPrinter.print(0);\n }\n-\n- // Don't display percentage of inactive ballots\n- csvPrinter.print(\"\");\n }\n csvPrinter.println();\n }\n@@ -411,6 +413,10 @@ class ResultsWriter {\n BigDecimal thisRoundInactive = roundTallies.get(round).numInactiveBallots();\n csvPrinter.print(thisRoundInactive.subtract(numUndervotes));\n \n+ // Don't display percentage of inactive ballots\n+ csvPrinter.print(\"\");\n+\n+ // Do display transfer of inactive ballots\n if (round != numRounds) {\n // Note: we don't need to subtract num undervotes here since we'd be subtracting the\n // same value from both sides of the equation, so it cancels out.\n@@ -420,9 +426,6 @@ class ResultsWriter {\n } else {\n csvPrinter.print(0);\n }\n-\n- // Don't display percentage of inactive ballots\n- csvPrinter.print(\"\");\n }\n csvPrinter.println();\n \n", "bug_patch_file_extensions": ["java"], "test_patch": "diff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_summary.csv\nindex b377ba1..9694ce8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_summary.csv\n@@ -56,8 +56,8 @@ JOHN CHARLES WILSON,37,0.04%,1,38,0.04%,-38,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,\n Undeclared Write-ins,117,0.14%,-117,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,79312,,,79275,,,79269,,,79264,,,79253,,,79243,,,79226,,,79214,,,79197,,,79164,,,79135,,,79102,,,79065,,,79043,,,79003,,,78952,,,78923,,,78898,,,78826,,,78772,,,78716,,,78617,,,78493,,,78223,,,78081,,,77960,,,77451,,,77081,,,76623,,,76323,,,75590,,,73619,,,63794,,\r\n Current Round Threshold,39657,,,39638,,,39635,,,39633,,,39627,,,39622,,,39614,,,39608,,,39599,,,39583,,,39568,,,39552,,,39533,,,39522,,,39502,,,39477,,,39462,,,39450,,,39414,,,39387,,,39359,,,39309,,,39247,,,39112,,,39041,,,38981,,,38726,,,38541,,,38312,,,38162,,,37796,,,36810,,,31898,,\r\n-Inactive Ballots by by Overvotes,103,1,,104,0,,104,0,,104,0,,104,0,,104,0,,104,0,,104,0,,104,1,,105,1,,106,1,,107,0,,107,0,,107,0,,107,0,,107,0,,107,0,,107,0,,107,0,,107,0,,107,1,,108,1,,109,1,,110,0,,110,0,,110,1,,111,1,,112,2,,114,1,,115,2,,117,6,,123,17,,140,0,\r\n-Inactive Ballots by by Skipped Rankings,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,,47,0,\r\n-Inactive Ballots by by Exhausted Choices,0,18,,18,0,,18,1,,19,1,,20,4,,24,5,,29,5,,34,2,,36,15,,51,14,,65,15,,80,11,,91,16,,107,27,,134,21,,155,21,,176,19,,195,28,,223,47,,270,46,,316,89,,405,101,,506,161,,667,100,,767,95,,862,306,,1168,336,,1504,261,,1765,236,,2001,535,,2536,1406,,3942,7827,,11769,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,150,37,,187,6,,193,5,,198,11,,209,10,,219,17,,236,12,,248,17,,265,33,,298,29,,327,33,,360,37,,397,22,,419,40,,459,51,,510,29,,539,25,,564,72,,636,54,,690,56,,746,99,,845,124,,969,270,,1239,142,,1381,121,,1502,509,,2011,370,,2381,458,,2839,300,,3139,733,,3872,1971,,5843,9825,,15668,0,\r\n+Inactive Ballots by Overvotes,103,,1,104,,0,104,,0,104,,0,104,,0,104,,0,104,,0,104,,0,104,,1,105,,1,106,,1,107,,0,107,,0,107,,0,107,,0,107,,0,107,,0,107,,0,107,,0,107,,0,107,,1,108,,1,109,,1,110,,0,110,,0,110,,1,111,,1,112,,2,114,,1,115,,2,117,,6,123,,17,140,,0\r\n+Inactive Ballots by Skipped Rankings,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0,47,,0\r\n+Inactive Ballots by Exhausted Choices,0,,18,18,,0,18,,1,19,,1,20,,4,24,,5,29,,5,34,,2,36,,15,51,,14,65,,15,80,,11,91,,16,107,,27,134,,21,155,,21,176,,19,195,,28,223,,47,270,,46,316,,89,405,,101,506,,161,667,,100,767,,95,862,,306,1168,,336,1504,,261,1765,,236,2001,,535,2536,,1406,3942,,7827,11769,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,150,,37,187,,6,193,,5,198,,11,209,,10,219,,17,236,,12,248,,17,265,,33,298,,29,327,,33,360,,37,397,,22,419,,40,459,,51,510,,29,539,,25,564,,72,636,,54,690,,56,746,,99,845,,124,969,,270,1239,,142,1381,,121,1502,,509,2011,,370,2381,,458,2839,,300,3139,,733,3872,,1971,5843,,9825,15668,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor_scale/2013_minneapolis_mayor_scale_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor_scale/2013_minneapolis_mayor_scale_expected_summary.csv\nindex 17f95ef..6b2a87d 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor_scale/2013_minneapolis_mayor_scale_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor_scale/2013_minneapolis_mayor_scale_expected_summary.csv\n@@ -56,8 +56,8 @@ JOHN CHARLES WILSON,481,0.04%,13,494,0.04%,-494,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0\n Undeclared Write-ins,1521,0.14%,-1521,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,1031056,,,1030575,,,1030497,,,1030432,,,1030289,,,1030159,,,1029938,,,1029782,,,1029561,,,1029132,,,1028755,,,1028326,,,1027845,,,1027559,,,1027039,,,1026376,,,1025999,,,1025674,,,1024738,,,1024036,,,1023308,,,1022021,,,1020409,,,1016899,,,1015053,,,1013480,,,1006863,,,1002053,,,996099,,,992199,,,982670,,,957047,,,829322,,\r\n Current Round Threshold,515529,,,515288,,,515249,,,515217,,,515145,,,515080,,,514970,,,514892,,,514781,,,514567,,,514378,,,514164,,,513923,,,513780,,,513520,,,513189,,,513000,,,512838,,,512370,,,512019,,,511655,,,511011,,,510205,,,508450,,,507527,,,506741,,,503432,,,501027,,,498050,,,496100,,,491336,,,478524,,,414662,,\r\n-Inactive Ballots by by Overvotes,1339,13,,1352,0,,1352,0,,1352,0,,1352,0,,1352,0,,1352,0,,1352,0,,1352,13,,1365,13,,1378,13,,1391,0,,1391,0,,1391,0,,1391,0,,1391,0,,1391,0,,1391,0,,1391,0,,1391,0,,1391,13,,1404,13,,1417,13,,1430,0,,1430,0,,1430,13,,1443,13,,1456,26,,1482,13,,1495,26,,1521,78,,1599,221,,1820,0,\r\n-Inactive Ballots by by Skipped Rankings,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,,611,0,\r\n-Inactive Ballots by by Exhausted Choices,0,234,,234,0,,234,13,,247,13,,260,52,,312,65,,377,65,,442,26,,468,195,,663,182,,845,195,,1040,143,,1183,208,,1391,351,,1742,273,,2015,273,,2288,247,,2535,364,,2899,611,,3510,598,,4108,1157,,5265,1313,,6578,2093,,8671,1300,,9971,1235,,11206,3978,,15184,4368,,19552,3393,,22945,3068,,26013,6955,,32968,18278,,51246,101751,,152997,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1950,481,,2431,78,,2509,65,,2574,143,,2717,130,,2847,221,,3068,156,,3224,221,,3445,429,,3874,377,,4251,429,,4680,481,,5161,286,,5447,520,,5967,663,,6630,377,,7007,325,,7332,936,,8268,702,,8970,728,,9698,1287,,10985,1612,,12597,3510,,16107,1846,,17953,1573,,19526,6617,,26143,4810,,30953,5954,,36907,3900,,40807,9529,,50336,25623,,75959,127725,,203684,0,\r\n+Inactive Ballots by Overvotes,1339,,13,1352,,0,1352,,0,1352,,0,1352,,0,1352,,0,1352,,0,1352,,0,1352,,13,1365,,13,1378,,13,1391,,0,1391,,0,1391,,0,1391,,0,1391,,0,1391,,0,1391,,0,1391,,0,1391,,0,1391,,13,1404,,13,1417,,13,1430,,0,1430,,0,1430,,13,1443,,13,1456,,26,1482,,13,1495,,26,1521,,78,1599,,221,1820,,0\r\n+Inactive Ballots by Skipped Rankings,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0,611,,0\r\n+Inactive Ballots by Exhausted Choices,0,,234,234,,0,234,,13,247,,13,260,,52,312,,65,377,,65,442,,26,468,,195,663,,182,845,,195,1040,,143,1183,,208,1391,,351,1742,,273,2015,,273,2288,,247,2535,,364,2899,,611,3510,,598,4108,,1157,5265,,1313,6578,,2093,8671,,1300,9971,,1235,11206,,3978,15184,,4368,19552,,3393,22945,,3068,26013,,6955,32968,,18278,51246,,101751,152997,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1950,,481,2431,,78,2509,,65,2574,,143,2717,,130,2847,,221,3068,,156,3224,,221,3445,,429,3874,,377,4251,,429,4680,,481,5161,,286,5447,,520,5967,,663,6630,,377,7007,,325,7332,,936,8268,,702,8970,,728,9698,,1287,10985,,1612,12597,,3510,16107,,1846,17953,,1573,19526,,6617,26143,,4810,30953,,5954,36907,,3900,40807,,9529,50336,,25623,75959,,127725,203684,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park/2013_minneapolis_park_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park/2013_minneapolis_park_expected_summary.csv\nindex e493140..53359ed 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park/2013_minneapolis_park_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park/2013_minneapolis_park_expected_summary.csv\n@@ -31,9 +31,9 @@ CASPER HILL,1280,2.15%,4,1284,2.16%,-1284,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,\n Undeclared Write-ins,342,0.57%,-342,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,,0\r\n Active Ballots,59463,,,59174,,,58876,,,44010.0000,,,42995.0000,,,41914.0000,,,40009.0000,,,36612.0000,,,33552.0000,,,27289.0000,,,0,,\r\n Current Round Threshold,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,67,289,,356,298,,654,0.0000,,654.0000,1015.0000,,1669.0000,1081.0000,,2750.0000,1905.0000,,4655.0000,3397.0000,,8052.0000,3060.0000,,11112.0000,6263.0000,,17375.0000,177.5192,,17552.5192,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,67,289,,356,298,,654,0.0000,,654.0000,1015.0000,,1669.0000,1081.0000,,2750.0000,1905.0000,,4655.0000,3397.0000,,8052.0000,3060.0000,,11112.0000,6263.0000,,17375.0000,177.5192,,17552.5192,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,67,,289,356,,298,654,,0.0000,654.0000,,1015.0000,1669.0000,,1081.0000,2750.0000,,1905.0000,4655.0000,,3397.0000,8052.0000,,3060.0000,11112.0000,,6263.0000,17375.0000,,177.5192,17552.5192,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,67,,289,356,,298,654,,0.0000,654.0000,,1015.0000,1669.0000,,1081.0000,2750.0000,,1905.0000,4655.0000,,3397.0000,8052.0000,,3060.0000,11112.0000,,6263.0000,17375.0000,,177.5192,17552.5192,,0\r\n Residual surplus,0,,,0,,,0,,,0,,,0,,,0,,,0,,,0,,,0,,,0,,,0.4808,,\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_bottoms_up/2013_minneapolis_park_bottoms_up_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_bottoms_up/2013_minneapolis_park_bottoms_up_expected_summary.csv\nindex 1e80c15..fb7389c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_bottoms_up/2013_minneapolis_park_bottoms_up_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_bottoms_up/2013_minneapolis_park_bottoms_up_expected_summary.csv\n@@ -31,8 +31,8 @@ CASPER HILL,1280,2.15%,4,1284,2.16%,-1284,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,\n Undeclared Write-ins,342,0.57%,-342,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,59463,,,59174,,,58876,,,57926,,,56924,,,55274,,,52027,,,49968,,,47268,,\r\n Current Round Threshold,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,,14866,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,67,289,,356,298,,654,950,,1604,1002,,2606,1650,,4256,3247,,7503,2059,,9562,2700,,12262,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,67,289,,356,298,,654,950,,1604,1002,,2606,1650,,4256,3247,,7503,2059,,9562,2700,,12262,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,67,,289,356,,298,654,,950,1604,,1002,2606,,1650,4256,,3247,7503,,2059,9562,,2700,12262,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,67,,289,356,,298,654,,950,1604,,1002,2606,,1650,4256,,3247,7503,,2059,9562,,2700,12262,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_hare/2013_minneapolis_park_hare_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_hare/2013_minneapolis_park_hare_expected_summary.csv\nindex 9ff5bb1..5f64d3c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_hare/2013_minneapolis_park_hare_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_hare/2013_minneapolis_park_hare_expected_summary.csv\n@@ -31,9 +31,9 @@ CASPER HILL,1280,2.15%,4,1284,2.16%,-1284,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,\n Undeclared Write-ins,342,0.57%,-342,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,,0\r\n Active Ballots,59463,,,59174,,,58876,,,57926,,,56924,,,55274,,,52027,,,49968,,,47268,,,0,,\r\n Current Round Threshold,19821,,,19821,,,19821,,,19821,,,19821,,,19821,,,19821,,,19821,,,19821,,,19821,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,67,289,,356,298,,654,950,,1604,1002,,2606,1650,,4256,3247,,7503,2059,,9562,2700,,12262,1827.2600,,14089.2600,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,67,289,,356,298,,654,950,,1604,1002,,2606,1650,,4256,3247,,7503,2059,,9562,2700,,12262,1827.2600,,14089.2600,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,67,,289,356,,298,654,,950,1604,,1002,2606,,1650,4256,,3247,7503,,2059,9562,,2700,12262,,1827.2600,14089.2600,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,67,,289,356,,298,654,,950,1604,,1002,2606,,1650,4256,,3247,7503,,2059,9562,,2700,12262,,1827.2600,14089.2600,,0\r\n Residual surplus,0,,,0,,,0,,,0,,,0,,,0,,,0,,,0,,,0,,,1.7400,,\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_1_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_1_expected_summary.csv\nindex d838abe..54d4748 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_1_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_1_expected_summary.csv\n@@ -31,8 +31,8 @@ CASPER HILL,1280,2.15%,4,1284,2.16%,-1284,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,\n Undeclared Write-ins,342,0.57%,-342,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,59463,,,59174,,,58876,,,57926,,,56924,,,55274,,,52027,,,49968,,,47268,,,40324,,\r\n Current Round Threshold,29732,,,29588,,,29439,,,28964,,,28463,,,27638,,,26014,,,24985,,,23635,,,20163,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,67,289,,356,298,,654,950,,1604,1002,,2606,1650,,4256,3247,,7503,2059,,9562,2700,,12262,6944,,19206,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,67,289,,356,298,,654,950,,1604,1002,,2606,1650,,4256,3247,,7503,2059,,9562,2700,,12262,6944,,19206,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,67,,289,356,,298,654,,950,1604,,1002,2606,,1650,4256,,3247,7503,,2059,9562,,2700,12262,,6944,19206,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,67,,289,356,,298,654,,950,1604,,1002,2606,,1650,4256,,3247,7503,,2059,9562,,2700,12262,,6944,19206,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_2_expected_summary.csv\nindex cef639d..5c91b61 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_2_expected_summary.csv\n@@ -30,8 +30,8 @@ CASPER HILL,1586,2.76%,4,1590,2.78%,-1590,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,\n Undeclared Write-ins,356,0.62%,-356,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,57401,,,57101,,,56735,,,55688,,,54392,,,52274,,,48689,,,44478,,,36914,,\r\n Current Round Threshold,28701,,,28551,,,28368,,,27845,,,27197,,,26138,,,24345,,,22240,,,18458,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,2129,300,,2429,366,,2795,1047,,3842,1296,,5138,2118,,7256,3585,,10841,4211,,15052,7564,,22616,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,2129,300,,2429,366,,2795,1047,,3842,1296,,5138,2118,,7256,3585,,10841,4211,,15052,7564,,22616,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,2129,,300,2429,,366,2795,,1047,3842,,1296,5138,,2118,7256,,3585,10841,,4211,15052,,7564,22616,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,2129,,300,2429,,366,2795,,1047,3842,,1296,5138,,2118,7256,,3585,10841,,4211,15052,,7564,22616,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_3_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_3_expected_summary.csv\nindex b4e6948..d7d09aa 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_3_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_park_sequential/2013_minneapolis_park_sequential_3_expected_summary.csv\n@@ -29,8 +29,8 @@ CASPER HILL,1903,3.48%,5,1908,3.51%,-1908,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,\n Undeclared Write-ins,381,0.69%,-381,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,54598,,,54272,,,53599,,,50679,,,48433,,,46013,,,41986,,,31348,,\r\n Current Round Threshold,27300,,,27137,,,26800,,,25340,,,24217,,,23007,,,20994,,,15675,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,4932,326,,5258,673,,5931,2920,,8851,2246,,11097,2420,,13517,4027,,17544,10638,,28182,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,4932,326,,5258,673,,5931,2920,,8851,2246,,11097,2420,,13517,4027,,17544,10638,,28182,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,4932,,326,5258,,673,5931,,2920,8851,,2246,11097,,2420,13517,,4027,17544,,10638,28182,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,4932,,326,5258,,673,5931,,2920,8851,,2246,11097,,2420,13517,,4027,17544,,10638,28182,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor/2015_portland_mayor_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor/2015_portland_mayor_expected_summary.csv\nindex fc7e3dd..40ca5f3 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor/2015_portland_mayor_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor/2015_portland_mayor_expected_summary.csv\n@@ -36,8 +36,8 @@ Elected,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"Mavodones, Nicholas M. Jr.\",,\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,98,,,98,,,98,,,98,,,98,,,98,,,98,,,97,,,97,,,97,,,97,,,97,,,97,,,94,,\r\n Current Round Threshold,50,,,50,,,50,,,50,,,50,,,50,,,50,,,49,,,49,,,49,,,49,,,49,,,49,,,48,,\r\n-Inactive Ballots by by Overvotes,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,2,,3,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,1,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,1,,2,0,,2,0,,2,0,,2,0,,2,0,,2,3,,5,0,\r\n+Inactive Ballots by Overvotes,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,2,3,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,1,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,1,2,,0,2,,0,2,,0,2,,0,2,,0,2,,3,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor_codes/2015_portland_mayor_codes_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor_codes/2015_portland_mayor_codes_expected_summary.csv\nindex fc7e3dd..40ca5f3 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor_codes/2015_portland_mayor_codes_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2015_portland_mayor_codes/2015_portland_mayor_codes_expected_summary.csv\n@@ -36,8 +36,8 @@ Elected,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"Mavodones, Nicholas M. Jr.\",,\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,98,,,98,,,98,,,98,,,98,,,98,,,98,,,97,,,97,,,97,,,97,,,97,,,97,,,94,,\r\n Current Round Threshold,50,,,50,,,50,,,50,,,50,,,50,,,50,,,49,,,49,,,49,,,49,,,49,,,49,,,48,,\r\n-Inactive Ballots by by Overvotes,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,2,,3,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,1,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,0,,1,0,,1,0,,1,0,,1,0,,1,0,,1,1,,2,0,,2,0,,2,0,,2,0,,2,0,,2,3,,5,0,\r\n+Inactive Ballots by Overvotes,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,2,3,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,1,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,1,2,,0,2,,0,2,,0,2,,0,2,,0,2,,3,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_summary.csv\nindex b3ab213..7beb403 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_summary.csv\n@@ -39,8 +39,8 @@ Theron Preston Washington,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,137,0.13%,-137,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,104484,,,104398,,,101865,,,99747,,,93578,,,81674,,\r\n Current Round Threshold,52243,,,52200,,,50933,,,49874,,,46790,,,40838,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,38,0,,38,0,,38,0,,38,0,,38,0,,38,0,\r\n-Inactive Ballots by by Exhausted Choices,37,37,,74,1534,,1608,1291,,2899,3596,,6495,9273,,15768,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,75,86,,161,2533,,2694,2118,,4812,6169,,10981,11904,,22885,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,38,,0,38,,0,38,,0,38,,0,38,,0,38,,0\r\n+Inactive Ballots by Exhausted Choices,37,,37,74,,1534,1608,,1291,2899,,3596,6495,,9273,15768,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,75,,86,161,,2533,2694,,2118,4812,,6169,10981,,11904,22885,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/2018_maine_governor_primary/2018_maine_governor_primary_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2018_maine_governor_primary/2018_maine_governor_primary_expected_summary.csv\nindex 1864895..3bee248 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/2018_maine_governor_primary/2018_maine_governor_primary_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/2018_maine_governor_primary/2018_maine_governor_primary_expected_summary.csv\n@@ -28,8 +28,8 @@ Elected,,,,,,,,,,\"Mills, Janet T.\",,\n Write-in,748,0.59%,-748,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,126139,,,124093,,,122512,,,117253,,\r\n Current Round Threshold,63070,,,62047,,,61257,,,58627,,\r\n-Inactive Ballots by by Overvotes,430,42,,472,35,,507,73,,580,0,\r\n-Inactive Ballots by by Skipped Rankings,146,45,,191,28,,219,78,,297,0,\r\n-Inactive Ballots by by Exhausted Choices,0,119,,119,61,,180,92,,272,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,576,2046,,2622,1581,,4203,5259,,9462,0,\r\n+Inactive Ballots by Overvotes,430,,42,472,,35,507,,73,580,,0\r\n+Inactive Ballots by Skipped Rankings,146,,45,191,,28,219,,78,297,,0\r\n+Inactive Ballots by Exhausted Choices,0,,119,119,,61,180,,92,272,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,576,,2046,2622,,1581,4203,,5259,9462,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/aliases_cdf_json/aliases_cdf_json_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/aliases_cdf_json/aliases_cdf_json_expected_summary.csv\nindex 669d2dc..bef1462 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/aliases_cdf_json/aliases_cdf_json_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/aliases_cdf_json/aliases_cdf_json_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name File 1,6,20.0%,2,8,26.66%,-8,0,0.0%,0\n Candidate D Name File 1,4,13.33%,-4,0,0.0%,0,0,0.0%,0\r\n Active Ballots,30,,,30,,,30,,\r\n Current Round Threshold,16,,,16,,,16,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/aliases_ess_xlsx/aliases_ess_xlsx_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/aliases_ess_xlsx/aliases_ess_xlsx_expected_summary.csv\nindex 43b2d1c..4401427 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/aliases_ess_xlsx/aliases_ess_xlsx_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/aliases_ess_xlsx/aliases_ess_xlsx_expected_summary.csv\n@@ -24,8 +24,8 @@ C,2,22.22%,0,2,25.0%,-2,0,0.0%,0\n D,1,11.11%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,9,,,8,,,8,,\r\n Current Round Threshold,5,,,5,,,5,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,1,,1,0,,1,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,1,1,,0,1,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/clear_ballot_kansas_primary/clear_ballot_kansas_primary_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/clear_ballot_kansas_primary/clear_ballot_kansas_primary_expected_summary.csv\nindex 538919b..a595669 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/clear_ballot_kansas_primary/clear_ballot_kansas_primary_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/clear_ballot_kansas_primary/clear_ballot_kansas_primary_expected_summary.csv\n@@ -31,8 +31,8 @@ Steven Bullock,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,50,,,50,,,50,,,50,,\r\n Current Round Threshold,26,,,26,,,26,,,26,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/continue_tabulation_test/continue_tabulation_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/continue_tabulation_test/continue_tabulation_test_expected_summary.csv\nindex 15f7127..13e0b7b 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/continue_tabulation_test/continue_tabulation_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/continue_tabulation_test/continue_tabulation_test_expected_summary.csv\n@@ -23,8 +23,8 @@ Elected,\"Vail, Christopher L.\",,,,,,,,\n \"Haadoow, Hamza A.\",3,16.66%,0,3,16.66%,-3,0,0.0%,0\r\n Active Ballots,18,,,18,,,18,,\r\n Current Round Threshold,10,,,10,,,10,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/continue_until_two_with_batch_elimination_test/continue_until_two_with_batch_elimination_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/continue_until_two_with_batch_elimination_test/continue_until_two_with_batch_elimination_test_expected_summary.csv\nindex 435d0a1..4ec1b30 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/continue_until_two_with_batch_elimination_test/continue_until_two_with_batch_elimination_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/continue_until_two_with_batch_elimination_test/continue_until_two_with_batch_elimination_test_expected_summary.csv\n@@ -27,8 +27,8 @@ F,1,1.0%,0,1,1.0%,-1,0,0.0%,0,0,0.0%,0\n G,1,1.0%,0,1,1.0%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,100,,,100,,,91,,,76,,\r\n Current Round Threshold,51,,,51,,,46,,,39,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,9,,9,15,,24,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,9,9,,15,24,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/dominion_alaska/dominion_alaska_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/dominion_alaska/dominion_alaska_expected_summary.csv\nindex 3600416..ea46fae 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/dominion_alaska/dominion_alaska_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/dominion_alaska/dominion_alaska_expected_summary.csv\n@@ -29,8 +29,8 @@ Elizabeth Warren,96,10.18%,15,111,11.77%,8,119,12.61%,-119,0,0.0%,0,0,0.0%,0,0,0\n Undeclared Write-ins,104,11.02%,-104,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,943,,,943,,,943,,,943,,,942,,,938,,,894,,,793,,\r\n Current Round Threshold,472,,,472,,,472,,,472,,,472,,,470,,,448,,,397,,\r\n-Inactive Ballots by by Overvotes,2,0,,2,0,,2,0,,2,1,,3,2,,5,1,,6,1,,7,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,2,0,,2,0,,2,0,,2,1,,3,4,,7,44,,51,101,,152,0,\r\n+Inactive Ballots by Overvotes,2,,0,2,,0,2,,0,2,,1,3,,2,5,,1,6,,1,7,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,2,,0,2,,0,2,,0,2,,1,3,,4,7,,44,51,,101,152,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/dominion_kansas/dominion_kansas_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/dominion_kansas/dominion_kansas_expected_summary.csv\nindex e40ebf3..12e72a4 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/dominion_kansas/dominion_kansas_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/dominion_kansas/dominion_kansas_expected_summary.csv\n@@ -29,8 +29,8 @@ Joseph R. Biden,496,10.55%,63,559,11.9%,-559,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,513,10.92%,-513,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,4697,,,4696,,,4695,,,4694,,,4688,,,4648,,,4446,,,3923,,\r\n Current Round Threshold,2349,,,2349,,,2348,,,2348,,,2345,,,2325,,,2224,,,1962,,\r\n-Inactive Ballots by by Overvotes,13,1,,14,1,,15,1,,16,6,,22,1,,23,5,,28,5,,33,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,13,1,,14,1,,15,1,,16,6,,22,40,,62,202,,264,523,,787,0,\r\n+Inactive Ballots by Overvotes,13,,1,14,,1,15,,1,16,,6,22,,1,23,,5,28,,5,33,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,13,,1,14,,1,15,,1,16,,6,22,,40,62,,202,264,,523,787,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/dominion_multi_file/dominion_multi_file_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/dominion_multi_file/dominion_multi_file_expected_summary.csv\nindex 02fa87a..abde13a 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/dominion_multi_file/dominion_multi_file_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/dominion_multi_file/dominion_multi_file_expected_summary.csv\n@@ -25,8 +25,8 @@ Spencer Simonson,1,5.88%,0\n Undeclared Write-ins,0,0.0%,0\r\n Active Ballots,17,,\r\n Current Round Threshold,9,,\r\n-Inactive Ballots by by Overvotes,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,\r\n-Inactive Ballots Total,0,0,\r\n+Inactive Ballots by Overvotes,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/dominion_no_precinct_data/dominion_no_precinct_data_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/dominion_no_precinct_data/dominion_no_precinct_data_expected_summary.csv\nindex 0475cd0..d4a37a1 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/dominion_no_precinct_data/dominion_no_precinct_data_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/dominion_no_precinct_data/dominion_no_precinct_data_expected_summary.csv\n@@ -29,8 +29,8 @@ Tulsi Gabbard,89,9.47%,19,108,11.5%,22,130,13.84%,19,149,15.86%,26,175,18.63%,-1\n Undeclared Write-ins,117,12.46%,-117,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,939,,,939,,,939,,,939,,,939,,,935,,,903,,,795,,\r\n Current Round Threshold,470,,,470,,,470,,,470,,,470,,,468,,,452,,,398,,\r\n-Inactive Ballots by by Overvotes,4,0,,4,0,,4,0,,4,0,,4,1,,5,1,,6,1,,7,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,4,0,,4,0,,4,0,,4,0,,4,4,,8,32,,40,108,,148,0,\r\n+Inactive Ballots by Overvotes,4,,0,4,,0,4,,0,4,,0,4,,1,5,,1,6,,1,7,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,4,,0,4,,0,4,,0,4,,0,4,,4,8,,32,40,,108,148,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/dominion_wyoming/dominion_wyoming_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/dominion_wyoming/dominion_wyoming_expected_summary.csv\nindex 0475cd0..d4a37a1 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/dominion_wyoming/dominion_wyoming_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/dominion_wyoming/dominion_wyoming_expected_summary.csv\n@@ -29,8 +29,8 @@ Tulsi Gabbard,89,9.47%,19,108,11.5%,22,130,13.84%,19,149,15.86%,26,175,18.63%,-1\n Undeclared Write-ins,117,12.46%,-117,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,939,,,939,,,939,,,939,,,939,,,935,,,903,,,795,,\r\n Current Round Threshold,470,,,470,,,470,,,470,,,470,,,468,,,452,,,398,,\r\n-Inactive Ballots by by Overvotes,4,0,,4,0,,4,0,,4,0,,4,1,,5,1,,6,1,,7,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,4,0,,4,0,,4,0,,4,0,,4,4,,8,32,,40,108,,148,0,\r\n+Inactive Ballots by Overvotes,4,,0,4,,0,4,,0,4,,0,4,,1,5,,1,6,,1,7,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,4,,0,4,,0,4,,0,4,,0,4,,4,8,,32,40,,108,148,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/duplicate_test/duplicate_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/duplicate_test/duplicate_test_expected_summary.csv\nindex 6c302e7..18ea81d 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/duplicate_test/duplicate_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/duplicate_test/duplicate_test_expected_summary.csv\n@@ -23,8 +23,8 @@ Banana,4,36.36%,0,4,44.44%,0\n Durian,3,27.27%,-3,0,0.0%,0\r\n Active Ballots,11,,,9,,\r\n Current Round Threshold,6,,,5,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,2,,2,0,\r\n-Inactive Ballots Total,0,2,,2,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,2,2,,0\r\n+Inactive Ballots Total,0,,2,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/excluded_test/excluded_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/excluded_test/excluded_test_expected_summary.csv\nindex c2fd679..dc8a0b2 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/excluded_test/excluded_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/excluded_test/excluded_test_expected_summary.csv\n@@ -21,8 +21,8 @@ Elected,George Gervin,,\n George Gervin,3,100.0%,0\r\n Active Ballots,3,,\r\n Current Round Threshold,2,,\r\n-Inactive Ballots by by Overvotes,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,\r\n-Inactive Ballots Total,0,0,\r\n+Inactive Ballots by Overvotes,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/exhaust_if_multiple_continuing/exhaust_if_multiple_continuing_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/exhaust_if_multiple_continuing/exhaust_if_multiple_continuing_expected_summary.csv\nindex 6bc431b..412f814 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/exhaust_if_multiple_continuing/exhaust_if_multiple_continuing_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/exhaust_if_multiple_continuing/exhaust_if_multiple_continuing_expected_summary.csv\n@@ -24,8 +24,8 @@ D,1,16.66%,0,1,16.66%,-1,0,0.0%,0\n A,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,6,,,6,,,5,,\r\n Current Round Threshold,4,,,4,,,3,,\r\n-Inactive Ballots by by Overvotes,3,0,,3,0,,3,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,3,0,,3,1,,4,0,\r\n+Inactive Ballots by Overvotes,3,,0,3,,0,3,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,3,,0,3,,1,4,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_test/first_round_determines_threshold_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_test/first_round_determines_threshold_test_expected_summary.csv\nindex 4aab123..e656961 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_test/first_round_determines_threshold_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_test/first_round_determines_threshold_test_expected_summary.csv\n@@ -23,8 +23,8 @@ Elected,,,,\"Vail, Christopher L.\",,\n \"Carmona, Ralph C.\",5,31.25%,0,5,45.45%,0\r\n Active Ballots,16,,,11,,\r\n Current Round Threshold,9,,,9,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,\r\n-Inactive Ballots Total,0,5,,5,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,5,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_tiebreaker_test/first_round_determines_threshold_tiebreaker_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_tiebreaker_test/first_round_determines_threshold_tiebreaker_test_expected_summary.csv\nindex a7eaec3..48b1745 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_tiebreaker_test/first_round_determines_threshold_tiebreaker_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/first_round_determines_threshold_tiebreaker_test/first_round_determines_threshold_tiebreaker_test_expected_summary.csv\n@@ -23,8 +23,8 @@ Elected,,,,\"Vail, Christopher L.\",,\n \"Haadoow, Hamza A.\",5,29.41%,-5,0,0.0%,0\r\n Active Ballots,17,,,12,,\r\n Current Round Threshold,9,,,9,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,\r\n-Inactive Ballots Total,0,5,,5,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,5,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/generic_csv_test/generic_csv_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/generic_csv_test/generic_csv_test_expected_summary.csv\nindex a3599f2..924d258 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/generic_csv_test/generic_csv_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/generic_csv_test/generic_csv_test_expected_summary.csv\n@@ -25,8 +25,8 @@ Broccoli,3,11.53%,1,4,15.38%,-4,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,6,23.07%,-6,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,26,,,26,,,26,,,26,,\r\n Current Round Threshold,14,,,14,,,14,,,14,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/hart_cedar_park_school_board/hart_cedar_park_school_board_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/hart_cedar_park_school_board/hart_cedar_park_school_board_expected_summary.csv\nindex ffdd0ce..54c3749 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/hart_cedar_park_school_board/hart_cedar_park_school_board_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/hart_cedar_park_school_board/hart_cedar_park_school_board_expected_summary.csv\n@@ -28,8 +28,8 @@ Betty McCollum,0,0.0%,0\n Undeclared Write-ins,0,0.0%,0\r\n Active Ballots,7,,\r\n Current Round Threshold,4,,\r\n-Inactive Ballots by by Overvotes,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,\r\n-Inactive Ballots Total,0,0,\r\n+Inactive Ballots by Overvotes,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/hart_travis_county_officers/hart_travis_county_officers_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/hart_travis_county_officers/hart_travis_county_officers_expected_summary.csv\nindex 19f3b4b..71e35c7 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/hart_travis_county_officers/hart_travis_county_officers_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/hart_travis_county_officers/hart_travis_county_officers_expected_summary.csv\n@@ -25,8 +25,8 @@ Jim Sylvester,0,0.0%,0\n Bruce Elfant,0,0.0%,0\r\n Active Ballots,1,,\r\n Current Round Threshold,1,,\r\n-Inactive Ballots by by Overvotes,6,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,\r\n-Inactive Ballots Total,6,0,\r\n+Inactive Ballots by Overvotes,6,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/minimum_threshold_test/minimum_threshold_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/minimum_threshold_test/minimum_threshold_test_expected_summary.csv\nindex ef1ca4c..59df4c1 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/minimum_threshold_test/minimum_threshold_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/minimum_threshold_test/minimum_threshold_test_expected_summary.csv\n@@ -25,8 +25,8 @@ Garfield,1,10.0%,-1,0,0.0%,0\n Odie,0,0.0%,0,0,0.0%,0\r\n Active Ballots,10,,,10,,\r\n Current Round Threshold,6,,,6,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_summary.csv\nindex f090c25..7badfe8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_summary.csv\n@@ -26,8 +26,8 @@ F,3,10.34%,0,3,10.71%,0.0000,3.0000,15.0%,-3.0000,0,0.0%,0,0,0.0%,0,0,,0\n D,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,,0\r\n Active Ballots,29,,,28,,,20.0000,,,20.0000,,,20.0000,,,0,,\r\n Current Round Threshold,8,,,8,,,8,,,8,,,8,,,8,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,1,1,,2,0,,2,0,,2,0.0000,,2.0000,0.6000,,2.6000,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,2.6000,,2.6000,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,1,,2,0,,2,0,,2,0.0000,,2.0000,4.0000,,6.0000,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,1,,1,2,,0,2,,0,2,,0.0000,2.0000,,0.6000,2.6000,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,2.6000,2.6000,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,1,2,,0,2,,0,2,,0.0000,2.0000,,4.0000,6.0000,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv\nindex fbcd3e0..2bc4497 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv\n@@ -39,8 +39,8 @@ Al Flowers,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,4,,,4,,,4,,,4,,,2,,\r\n Current Round Threshold,3,,,3,,,3,,,3,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,2,,2,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,2,,2,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,2,2,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,2,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/multi_seat_bottoms_up_with_threshold/multi_seat_bottoms_up_with_threshold_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/multi_seat_bottoms_up_with_threshold/multi_seat_bottoms_up_with_threshold_expected_summary.csv\nindex 4cc0a7b..d0e9835 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/multi_seat_bottoms_up_with_threshold/multi_seat_bottoms_up_with_threshold_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/multi_seat_bottoms_up_with_threshold/multi_seat_bottoms_up_with_threshold_expected_summary.csv\n@@ -28,8 +28,8 @@ E,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,21,,,21,,,21,,,21,,,21,,\r\n Current Round Threshold,3.1500,,,3.1500,,,3.1500,,,3.1500,,,3.1500,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/multi_seat_uwi_test/multi_seat_uwi_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/multi_seat_uwi_test/multi_seat_uwi_test_expected_summary.csv\nindex d996084..eb2a4ba 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/multi_seat_uwi_test/multi_seat_uwi_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/multi_seat_uwi_test/multi_seat_uwi_test_expected_summary.csv\n@@ -24,8 +24,8 @@ C,2,13.33%,0,2,22.22%,0,2,40.0%,-2,0,0.0%,0,0,,0\n Undeclared Write-ins,4,26.66%,0,4,44.44%,-4,0,0.0%,0,0,0.0%,0,0,,0\r\n Active Ballots,15,,,9,,,5,,,3,,,0,,\r\n Current Round Threshold,6,,,6,,,6,,,6,,,6,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0.0000,,0.0000,4.0000,,4.0000,2.0000,,6.0000,0.0000,,6.0000,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0.0000,0.0000,,4.0000,4.0000,,2.0000,6.0000,,0.0000,6.0000,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv\nindex e07d1e9..d93f9ce 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv\n@@ -23,8 +23,8 @@ John Kasich and Mary Taylor,0,,0,0,,0,0,,0\n Anita Rios and Bob Fitrakis,0,,0,0,,0,0,,0\r\n Active Ballots,0,,,0,,,0,,\r\n Current Round Threshold,1,,,1,,,1,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/precinct_example/precinct_example_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/precinct_example/precinct_example_expected_summary.csv\nindex ebe4a07..a9a2d89 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/precinct_example/precinct_example_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/precinct_example/precinct_example_expected_summary.csv\n@@ -39,8 +39,8 @@ Troy Benjegerdes,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,1,1.01%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,99,,,98,,,96,,,90,,,83,,\r\n Current Round Threshold,50,,,50,,,49,,,46,,,42,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,1,,1,2,,3,7,,10,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,1,,1,2,,3,6,,9,7,,16,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,1,1,,2,3,,7,10,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,1,1,,2,3,,6,9,,7,16,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_1_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_1_expected_summary.csv\nindex b5a47d7..8ff734e 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_1_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_1_expected_summary.csv\n@@ -26,8 +26,8 @@ E,0,0.0%,0\n F,0,0.0%,0\r\n Active Ballots,9,,\r\n Current Round Threshold,5,,\r\n-Inactive Ballots by by Overvotes,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,\r\n-Inactive Ballots Total,0,0,\r\n+Inactive Ballots by Overvotes,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv\nindex 973fe4c..1bc914c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv\n@@ -25,8 +25,8 @@ E,0,0.0%,0,0,0.0%,0,0,0.0%,0\n F,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,5,,,4,,,2,,\r\n Current Round Threshold,3,,,3,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,4,1,,5,2,,7,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,4,1,,5,2,,7,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,4,,1,5,,2,7,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,4,,1,5,,2,7,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_3_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_3_expected_summary.csv\nindex 64f0d90..3496873 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_3_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_3_expected_summary.csv\n@@ -24,8 +24,8 @@ E,0,0.0%,0\n F,0,0.0%,0\r\n Active Ballots,3,,\r\n Current Round Threshold,2,,\r\n-Inactive Ballots by by Overvotes,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,\r\n-Inactive Ballots by by Exhausted Choices,6,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,\r\n-Inactive Ballots Total,6,0,\r\n+Inactive Ballots by Overvotes,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,6,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_1_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_1_expected_summary.csv\nindex b78732f..22ce501 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_1_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_1_expected_summary.csv\n@@ -26,8 +26,8 @@ E,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,9,,,9,,,9,,,9,,,8,,,7,,\r\n Current Round Threshold,5,,,5,,,5,,,5,,,5,,,4,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,1,,1,1,,2,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,1,,1,1,,2,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,1,1,,1,2,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,1,1,,1,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv\nindex 2d04fd0..205bd26 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv\n@@ -25,8 +25,8 @@ E,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,5,,,5,,,5,,,4,,,2,,\r\n Current Round Threshold,3,,,3,,,3,,,3,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,4,0,,4,0,,4,1,,5,2,,7,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,4,0,,4,0,,4,1,,5,2,,7,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,4,,0,4,,0,4,,1,5,,2,7,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,4,,0,4,,0,4,,1,5,,2,7,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_3_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_3_expected_summary.csv\nindex 072549c..36ada71 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_3_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_3_expected_summary.csv\n@@ -24,8 +24,8 @@ E,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,3,,,3,,,3,,,3,,\r\n Current Round Threshold,2,,,2,,,2,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,6,0,,6,0,,6,0,,6,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,6,0,,6,0,,6,0,,6,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,6,,0,6,,0,6,,0,6,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,6,,0,6,,0,6,,0,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/skip_to_next_test/skip_to_next_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/skip_to_next_test/skip_to_next_test_expected_summary.csv\nindex a8eace8..51e012c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/skip_to_next_test/skip_to_next_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/skip_to_next_test/skip_to_next_test_expected_summary.csv\n@@ -24,8 +24,8 @@ C,3,20.0%,1,4,26.66%,-4,0,0.0%,0\n D,1,6.66%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,15,,,15,,,14,,\r\n Current Round Threshold,8,,,8,,,8,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,1,,1,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,1,,1,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,1,1,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,1,1,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv\nindex 6ee06c8..f1e7343 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv\n@@ -23,8 +23,8 @@ George Gervin,3,33.33%,0,3,50.0%,0\n Mookie Blaylock,3,33.33%,0,3,50.0%,0\r\n Active Ballots,9,,,6,,\r\n Current Round Threshold,5,,,4,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,\r\n-Inactive Ballots Total,0,3,,3,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,3,3,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_0_skipped_first_choice/test_set_0_skipped_first_choice_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_0_skipped_first_choice/test_set_0_skipped_first_choice_expected_summary.csv\nindex e71f364..990b989 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_0_skipped_first_choice/test_set_0_skipped_first_choice_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_0_skipped_first_choice/test_set_0_skipped_first_choice_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,3,25.0%,0,3,25.0%,-3,0,0.0%,0\n Candidate D Name,1,8.33%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,12,,,12,,,11,,\r\n Current Round Threshold,7,,,7,,,6,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,1,,1,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,1,,1,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,1,1,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,1,1,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_1_exhaust_at_overvote/test_set_1_exhaust_at_overvote_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_1_exhaust_at_overvote/test_set_1_exhaust_at_overvote_expected_summary.csv\nindex 68a8659..cae33a8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_1_exhaust_at_overvote/test_set_1_exhaust_at_overvote_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_1_exhaust_at_overvote/test_set_1_exhaust_at_overvote_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,2,14.28%,1,3,21.42%,-3,0,0.0%,0\n Candidate D Name,1,7.14%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,14,,,14,,,13,,\r\n Current Round Threshold,8,,,8,,,7,,\r\n-Inactive Ballots by by Overvotes,1,0,,1,1,,2,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,0,,1,1,,2,0,\r\n+Inactive Ballots by Overvotes,1,,0,1,,1,2,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,0,1,,1,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_2_overvote_skip_to_next/test_set_2_overvote_skip_to_next_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_2_overvote_skip_to_next/test_set_2_overvote_skip_to_next_expected_summary.csv\nindex 12a118d..d1d494c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_2_overvote_skip_to_next/test_set_2_overvote_skip_to_next_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_2_overvote_skip_to_next/test_set_2_overvote_skip_to_next_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,2,14.28%,1,3,21.42%,-3,0,0.0%,0\n Candidate D Name,1,7.14%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,14,,,14,,,13,,\r\n Current Round Threshold,8,,,8,,,7,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,1,0,,1,1,,2,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,0,,1,1,,2,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,1,,0,1,,1,2,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,0,1,,1,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_3_skipped_choice_exhaust/test_set_3_skipped_choice_exhaust_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_3_skipped_choice_exhaust/test_set_3_skipped_choice_exhaust_expected_summary.csv\nindex b89e8d8..18e03f8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_3_skipped_choice_exhaust/test_set_3_skipped_choice_exhaust_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_3_skipped_choice_exhaust/test_set_3_skipped_choice_exhaust_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,2,14.28%,1,3,21.42%,-3,0,0.0%,0\n Candidate D Name,1,7.14%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,14,,,14,,,12,,\r\n Current Round Threshold,8,,,8,,,7,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,1,0,,1,2,,3,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,0,,1,2,,3,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,1,,0,1,,2,3,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,0,1,,2,3,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_4_skipped_choice_next/test_set_4_skipped_choice_next_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_4_skipped_choice_next/test_set_4_skipped_choice_next_expected_summary.csv\nindex 6909da9..3c64158 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_4_skipped_choice_next/test_set_4_skipped_choice_next_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_4_skipped_choice_next/test_set_4_skipped_choice_next_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,2,13.33%,1,3,20.0%,-3,0,0.0%,0\n Candidate D Name,1,6.66%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,15,,,15,,,15,,\r\n Current Round Threshold,8,,,8,,,8,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_5_two_skipped_choice_exhaust/test_set_5_two_skipped_choice_exhaust_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_5_two_skipped_choice_exhaust/test_set_5_two_skipped_choice_exhaust_expected_summary.csv\nindex e31f7e4..a3e65b5 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_5_two_skipped_choice_exhaust/test_set_5_two_skipped_choice_exhaust_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_5_two_skipped_choice_exhaust/test_set_5_two_skipped_choice_exhaust_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,2,13.33%,1,3,20.0%,-3,0,0.0%,0\n Candidate D Name,1,6.66%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,15,,,15,,,14,,\r\n Current Round Threshold,8,,,8,,,8,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,1,,1,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,1,,1,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,1,1,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,1,1,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_6_duplicate_exhaust/test_set_6_duplicate_exhaust_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_6_duplicate_exhaust/test_set_6_duplicate_exhaust_expected_summary.csv\nindex 7055664..a5bd13a 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_6_duplicate_exhaust/test_set_6_duplicate_exhaust_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_6_duplicate_exhaust/test_set_6_duplicate_exhaust_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate B Name,4,26.66%,1,5,35.71%,2,7,58.33%,0\n Candidate D Name,2,13.33%,-2,0,0.0%,0,0,0.0%,0\r\n Active Ballots,15,,,14,,,12,,\r\n Current Round Threshold,8,,,8,,,7,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,1,,1,2,,3,0,\r\n-Inactive Ballots Total,0,1,,1,2,,3,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,1,1,,2,3,,0\r\n+Inactive Ballots Total,0,,1,1,,2,3,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_7_duplicate_skip_to_next/test_set_7_duplicate_skip_to_next_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_7_duplicate_skip_to_next/test_set_7_duplicate_skip_to_next_expected_summary.csv\nindex 51367f3..4beaf90 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_7_duplicate_skip_to_next/test_set_7_duplicate_skip_to_next_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_7_duplicate_skip_to_next/test_set_7_duplicate_skip_to_next_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,3,20.0%,1,4,26.66%,-4,0,0.0%,0\n Candidate D Name,2,13.33%,-2,0,0.0%,0,0,0.0%,0\r\n Active Ballots,15,,,15,,,15,,\r\n Current Round Threshold,8,,,8,,,8,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_8_multi_cdf/test_set_8_multi_cdf_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_8_multi_cdf/test_set_8_multi_cdf_expected_summary.csv\nindex ed0dcb8..c94a2e8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_8_multi_cdf/test_set_8_multi_cdf_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_8_multi_cdf/test_set_8_multi_cdf_expected_summary.csv\n@@ -24,8 +24,8 @@ Candidate C Name,6,25.0%,0,6,25.0%,-6,0,0.0%,0\n Candidate D Name,2,8.33%,-2,0,0.0%,0,0,0.0%,0\r\n Active Ballots,24,,,24,,,22,,\r\n Current Round Threshold,13,,,13,,,12,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,2,,2,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,2,,2,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,2,2,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,2,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_allow_only_one_winner_per_round/test_set_allow_only_one_winner_per_round_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_allow_only_one_winner_per_round/test_set_allow_only_one_winner_per_round_expected_summary.csv\nindex f3c383a..f977f04 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_allow_only_one_winner_per_round/test_set_allow_only_one_winner_per_round_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_allow_only_one_winner_per_round/test_set_allow_only_one_winner_per_round_expected_summary.csv\n@@ -24,9 +24,9 @@ C,3,33.33%,0,3,44.44%,1.4994,4.4994,100.0%,-2.2493,2.2501,107.17%,0\n D,0,0.0%,0,0,0.0%,0,0,0.0%,2.0994,2.0994,100.0%,0\r\n Active Ballots,9,,,6.7497,,,4.4994,,,2.0994,,\r\n Current Round Threshold,2.2501,,,2.2501,,,2.2501,,,2.2501,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0.1497,,0.1497,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0.1497,,0.1497,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0.1497,0.1497,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0.1497,0.1497,,0\r\n Residual surplus,0,,,0.0002,,,0.0004,,,0.0006,,\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_fractional_threshold/test_set_multi_winner_fractional_threshold_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_fractional_threshold/test_set_multi_winner_fractional_threshold_expected_summary.csv\nindex f5f717b..f023e28 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_fractional_threshold/test_set_multi_winner_fractional_threshold_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_fractional_threshold/test_set_multi_winner_fractional_threshold_expected_summary.csv\n@@ -26,9 +26,9 @@ Candidate F Name,3,10.34%,0,3,10.71%,0.0937,3.0937,14.9%,-3.0937,0,0.0%,0,0,0.0%\n Candidate D Name,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,,0\r\n Active Ballots,29,,,28,,,20.7496,,,20.7496,,,20.3748,,,0,,\r\n Current Round Threshold,7.2501,,,7.2501,,,7.2501,,,7.2501,,,7.2501,,,7.2501,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,1,1,,2,0,,2,0,,2,0.1874,,2.1874,0.8582,,3.0456,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,3.8760,,3.8760,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,1,,2,0,,2,0,,2,0.3748,,2.3748,5.8741,,8.2489,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,1,,1,2,,0,2,,0,2,,0.1874,2.1874,,0.8582,3.0456,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,3.8760,3.8760,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,1,2,,0,2,,0,2,,0.3748,2.3748,,5.8741,8.2489,,0\r\n Residual surplus,0,,,0,,,0.0003,,,0.0003,,,0.0003,,,0.0008,,\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_whole_threshold/test_set_multi_winner_whole_threshold_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_whole_threshold/test_set_multi_winner_whole_threshold_expected_summary.csv\nindex 1437d4c..1cc6431 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_whole_threshold/test_set_multi_winner_whole_threshold_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_multi_winner_whole_threshold/test_set_multi_winner_whole_threshold_expected_summary.csv\n@@ -26,9 +26,9 @@ Candidate F Name,3,10.34%,0.1111,3.1111,14.81%,0.1111,3.2222,16.11%,-3.2222,0,0.\n Candidate D Name,2,6.89%,0.1111,2.1111,10.05%,-2.1111,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,,0\r\n Active Ballots,29,,,20.9999,,,19.9999,,,19.9999,,,19.5555,,,0,,\r\n Current Round Threshold,8,,,8,,,8,,,8,,,8,,,8,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,1,0,,1,1,,2,0,,2,0.2222,,2.2222,0.4908,,2.7130,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,2.4408,,2.4408,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,1,0,,1,1,,2,0,,2,0.4444,,2.4444,3.5549,,5.9993,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,1,,0,1,,1,2,,0,2,,0.2222,2.2222,,0.4908,2.7130,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,2.4408,2.4408,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,1,,0,1,,1,2,,0,2,,0.4444,2.4444,,3.5549,5.9993,,0\r\n Residual surplus,0,,,0.0001,,,0.0001,,,0.0001,,,0.0001,,,0.0007,,\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_overvote_delimiter/test_set_overvote_delimiter_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_overvote_delimiter/test_set_overvote_delimiter_expected_summary.csv\nindex 63810e3..8155f2e 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_overvote_delimiter/test_set_overvote_delimiter_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_overvote_delimiter/test_set_overvote_delimiter_expected_summary.csv\n@@ -24,8 +24,8 @@ C,2,22.22%,0,2,25.0%,-2,0,0.0%,0\n D,1,11.11%,-1,0,0.0%,0,0,0.0%,0\r\n Active Ballots,9,,,8,,,8,,\r\n Current Round Threshold,5,,,5,,,5,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,1,,1,0,,1,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,1,1,,0,1,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv\nindex b6afcf8..7da15b2 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv\n@@ -25,8 +25,8 @@ D,1,8.33%,0,1,8.33%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,5,41.66%,-5,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,12,,,12,,,12,,,12,,,9,,\r\n Current Round Threshold,7,,,7,,,7,,,7,,,5,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,1,,1,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,2,,2,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,3,,3,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,1,1,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,2,2,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,3,3,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv\nindex e1ab234..f44c2a8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv\n@@ -24,8 +24,8 @@ George Gervin,2,25.0%,0,2,33.33%,0,2,50.0%,0,2,100.0%,0\n Mookie Blaylock,2,25.0%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,8,,,6,,,4,,,2,,\r\n Current Round Threshold,5,,,4,,,3,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,2,,2,2,,4,2,,6,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,2,,2,2,,4,2,,6,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,2,2,,2,4,,2,6,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,2,2,,2,4,,2,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv\nindex 282007c..c4fb5ce 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv\n@@ -24,8 +24,8 @@ Grumpy,2,22.22%,1,3,33.33%,-3,0,0.0%,0,0,0.0%,0\n Happy,1,11.11%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,9,,,9,,,6,,,3,,\r\n Current Round Threshold,5,,,5,,,4,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,3,,3,3,,6,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,3,3,,3,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv\nindex ab75854..0063996 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv\n@@ -23,8 +23,8 @@ George Gervin,3,33.33%,0,3,50.0%,-3,0,0.0%,0\n Mookie Blaylock,3,33.33%,0,3,50.0%,0,3,100.0%,0\r\n Active Ballots,9,,,6,,,3,,\r\n Current Round Threshold,5,,,4,,,2,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,3,,3,3,,6,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,3,3,,3,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv\nindex c5da731..de8b753 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv\n@@ -24,8 +24,8 @@ George Gervin,2,20.0%,1,3,30.0%,-3,0,0.0%,0,0,0.0%,0\n Sedale Threatt,1,10.0%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,10,,,10,,,8,,,4,,\r\n Current Round Threshold,6,,,6,,,5,,,3,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,2,,2,4,,6,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,2,2,,4,6,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_chief_of_police/unisyn_xml_cdf_city_chief_of_police_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_chief_of_police/unisyn_xml_cdf_city_chief_of_police_expected_summary.csv\nindex 77fa139..74c755c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_chief_of_police/unisyn_xml_cdf_city_chief_of_police_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_chief_of_police/unisyn_xml_cdf_city_chief_of_police_expected_summary.csv\n@@ -28,8 +28,8 @@ Emily Stevens,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,25,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,13,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,4,,4,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,0,,0,4,,4,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,4,4,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,4,4,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_coroner/unisyn_xml_cdf_city_coroner_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_coroner/unisyn_xml_cdf_city_coroner_expected_summary.csv\nindex d6cadca..5e2fed2 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_coroner/unisyn_xml_cdf_city_coroner_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_coroner/unisyn_xml_cdf_city_coroner_expected_summary.csv\n@@ -27,8 +27,8 @@ Emily Van Zandt,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,1,3.44%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,28,,,24,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,13,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,1,,1,4,,5,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,1,,1,4,,5,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,1,1,,4,5,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,1,1,,4,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv\nindex 7026e2c..c85b2c1 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv\n@@ -29,8 +29,8 @@ Sylvia Vaugn,2,6.89%,0,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0\n Undeclared Write-ins,1,3.44%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,27,,,20,,,12,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,14,,,11,,,7,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,2,,2,7,,9,8,,17,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,0,,0,2,,2,7,,9,8,,17,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,7,9,,8,17,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,7,9,,8,17,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_mayor/unisyn_xml_cdf_city_mayor_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_mayor/unisyn_xml_cdf_city_mayor_expected_summary.csv\nindex 3ff0909..ba2dc82 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_mayor/unisyn_xml_cdf_city_mayor_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_mayor/unisyn_xml_cdf_city_mayor_expected_summary.csv\n@@ -33,8 +33,8 @@ Carrol Wilson,1,3.44%,0,1,3.44%,0,1,3.44%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,29,,,29,,,27,,,24,,,21,,,16,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,15,,,15,,,14,,,13,,,11,,,9,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,2,,2,3,,5,3,,8,5,,13,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,2,,2,3,,5,3,,8,5,,13,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,3,5,,3,8,,5,13,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,3,5,,3,8,,5,13,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_tax_collector/unisyn_xml_cdf_city_tax_collector_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_tax_collector/unisyn_xml_cdf_city_tax_collector_expected_summary.csv\nindex 65dc432..42e27ed 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_tax_collector/unisyn_xml_cdf_city_tax_collector_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_tax_collector/unisyn_xml_cdf_city_tax_collector_expected_summary.csv\n@@ -29,8 +29,8 @@ Brady Gordon,2,6.89%,1,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0\n Undeclared Write-ins,1,3.44%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,28,,,25,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,15,,,13,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,1,,1,3,,4,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,0,,0,1,,1,3,,4,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,1,1,,3,4,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,1,1,,3,4,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv\nindex 697d206..495c196 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv\n@@ -29,8 +29,8 @@ Walter Gerber,3,10.34%,0,3,10.34%,1,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0\n Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,29,,,25,,,24,,,18,,,9,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,13,,,13,,,10,,,5,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,4,,4,1,,5,6,,11,9,,20,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,4,,4,1,,5,6,,11,9,,20,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,4,4,,1,5,,6,11,,9,20,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,4,4,,1,5,,6,11,,9,20,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv\nindex 8a4b629..a05d552 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv\n@@ -28,8 +28,8 @@ Beth Small,2,6.89%,0,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0\n Undeclared Write-ins,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,24,,,17,,\r\n Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,13,,,9,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,0,,0,0,,0,0,,0,0,,0,0,,0,5,,5,7,,12,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,\r\n-Inactive Ballots Total,0,0,,0,0,,0,0,,0,0,,0,0,,0,5,,5,7,,12,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,5,5,,7,12,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,5,5,,7,12,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/uwi_cannot_win_test/uwi_cannot_win_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/uwi_cannot_win_test/uwi_cannot_win_test_expected_summary.csv\nindex d883ef1..42f603b 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/uwi_cannot_win_test/uwi_cannot_win_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/uwi_cannot_win_test/uwi_cannot_win_test_expected_summary.csv\n@@ -23,8 +23,8 @@ B,1,11.11%,0,1,25.0%,0\n Undeclared Write-ins,5,55.55%,-5,0,0.0%,0\r\n Active Ballots,9,,,4,,\r\n Current Round Threshold,5,,,3,,\r\n-Inactive Ballots by by Overvotes,0,0,,0,0,\r\n-Inactive Ballots by by Skipped Rankings,0,0,,0,0,\r\n-Inactive Ballots by by Exhausted Choices,0,5,,5,0,\r\n-Inactive Ballots by by Repeated Rankings,0,0,,0,0,\r\n-Inactive Ballots Total,0,5,,5,0,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,5,5,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,5,5,,0\r\n", "test_patch_file_extensions": ["csv"], "non_code_patch": "", "non_code_patch_file_extensions": [], "change_type": "SOURCE_ONLY", "actions_runs": [[{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 1.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.631, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 10.564, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.151, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.007, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.117, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.135, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.06, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.164, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 14.179, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.129, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.074, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 61.409, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.045, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.054, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.194, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.002, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.038, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.033, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.058, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 10.935, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 4.324, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.058, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.042, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for Dominion", "time": 0.136, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for CDF", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for ES&S", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.032, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 3.753, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.032, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 4.915, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.043, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.012, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 3.775, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.051, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.103, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.ContestConfigTests", "name": "test isVersionNewer", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/e5dafa74-92f4-463d-b1f4-ed1db1359c7b/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "34b37ed4-7726-48d8-a7ac-64d620bfd2a8", "build_tool": "gradle", "elapsed_time": 222.83892178535461, "default_actions": false}], [{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 1.794, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 1.328, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 14.088, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.213, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.178, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.183, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.08, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.181, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 13.879, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.092, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.039, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 65.613, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.036, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.032, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.076, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.033, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.028, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.031, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.079, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.216, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.024, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.002, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.02, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.036, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.017, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.05, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.023, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.028, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.021, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.021, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.019, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.027, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.025, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.023, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.023, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.026, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.025, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.028, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.026, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 10.38, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 4.071, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.017, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.027, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.019, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for Dominion", "time": 0.068, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for CDF", "time": 0.01, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for ES&S", "time": 0.015, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.027, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.018, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.014, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.017, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.013, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.024, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 3.496, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.023, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 4.973, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.035, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.031, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.015, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.017, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.044, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.011, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.016, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.022, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 3.7, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.014, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.013, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.035, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.021, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.123, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.ContestConfigTests", "name": "test isVersionNewer", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/e5dafa74-92f4-463d-b1f4-ed1db1359c7b/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "78ec9a6a-bac7-496a-8c24-bf14aa48a5b5", "build_tool": "gradle", "elapsed_time": 196.04021763801575, "default_actions": false}], [{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 0.899, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.45, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 9.362, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.08, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.011, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.101, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.118, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.035, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.108, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 11.935, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.098, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.062, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 64.134, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.06, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.072, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.265, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.003, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.058, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.043, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.035, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.043, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.015, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 8.993, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 3.297, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for Dominion", "time": 0.059, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for CDF", "time": 0.01, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for ES&S", "time": 0.013, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.015, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.015, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.012, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 3.492, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 4.172, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.084, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.057, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 3.887, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.013, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.012, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.012, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.075, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.ContestConfigTests", "name": "test isVersionNewer", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/e5dafa74-92f4-463d-b1f4-ed1db1359c7b/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "bdacfe62-c344-46ab-894c-8d680eff4311", "build_tool": "gradle", "elapsed_time": 169.8012614250183, "default_actions": false}]], "strategy": "PASS_PASS", "issues": [{"id": 720, "title": "swap transfer/vote% column", "body": null, "comments": [], "labels": [], "is_pull_request": true, "review_comments": ["Here and many other spots: by by", "\r\n", "I almost did the EXACT same thing, but didn't want to spread the earworm poison to anyone else!"]}]}
{"repository": "BrightSpots/rcv", "language": "java", "clone_url": "https://github.com/BrightSpots/rcv.git", "collection_timestamp": "2023-11-25T21:07:44.647474Z", "commit_hash": "076f75e2417ac2001171f51f359dfcd15d71ee66", "commit_message": "Don't allow one candidate in the final round (#731)\n\n* Don't allow one candidate in the final round\r\n\r\n* add comment describing each condition", "commit_timestamp": "2023-07-15T17:59:59Z", "previous_commit_hash": "cd6ca49d8e58642c3142e1c4ee40a78e6c9060e5", "previous_commit_message": "s/undervote/skippedrank as appropriate in code, config, comments, and UI (#725)\n\n* s/undervote/skippedrank as appropriate in code, config, comments, and UI\r\n\r\n* update comment\r\n\r\n---------\r\n\r\nCo-authored-by: Armin Samii <[email protected]>", "previous_commit_timestamp": "2023-07-03T16:15:26Z", "time_to_patch": "12 days, 1:44:33", "bug_patch": "diff --git a/src/main/java/network/brightspots/rcv/Tabulator.java b/src/main/java/network/brightspots/rcv/Tabulator.java\nindex c319cfa..c957a09 100644\n--- a/src/main/java/network/brightspots/rcv/Tabulator.java\n+++ b/src/main/java/network/brightspots/rcv/Tabulator.java\n@@ -520,9 +520,9 @@ class Tabulator {\n }\n } else {\n // We should only look for more winners if we haven't already filled all the seats.\n- if (winnerToRound.size() < config.getNumberOfWinners()) {\n- if (currentRoundTally.numActiveCandidates()\n- == config.getNumberOfWinners() - winnerToRound.size()) {\n+ int numSeatsUnfilled = config.getNumberOfWinners() - winnerToRound.size();\n+ if (numSeatsUnfilled > 0) {\n+ if (currentRoundTally.numActiveCandidates() == numSeatsUnfilled) {\n // If the number of continuing candidates equals the number of seats to fill,\n // everyone wins.\n selectedWinners.addAll(currentRoundTally.getCandidates());\n@@ -548,9 +548,25 @@ class Tabulator {\n // * If this is a single-winner election in which it's possible for no candidate to reach the\n // threshold (i.e. \"first round determines threshold\" is set), the tiebreaker will choose\n // the only winner.\n- boolean useTiebreakerIfNeeded = config.isMultiSeatAllowOnlyOneWinnerPerRoundEnabled()\n- || config.isFirstRoundDeterminesThresholdEnabled();\n- if (useTiebreakerIfNeeded && selectedWinners.size() > 1) {\n+ boolean needsTiebreakMultipleWinners = selectedWinners.size() > 1\n+ && (config.isMultiSeatAllowOnlyOneWinnerPerRoundEnabled()\n+ || config.isFirstRoundDeterminesThresholdEnabled());\n+ // Edge case: there are two candidates remaining. To avoid having just one candidate in the\n+ // final round, we break the tie here. Happens when we have unfilled seats, two candidates\n+ // remaining, neither meets the threshold, and both have more than the minimum vote threshold.\n+ // Conditions:\n+ // 1. Single-winner election\n+ // 2. There are two remaining candidates\n+ // 3. There is one seat unfilled (i.e. the seat hasn't already been filled in a previous\n+ // round due to \"Continue Untli Two Remain\" config option)\n+ // 4. All candidates are over the minimum threshold (see no_one_meets_minimum test)\n+ boolean needsTiebreakNoWinners = config.getNumberOfWinners() == 1\n+ && selectedWinners.size() == 0\n+ && currentRoundTally.numActiveCandidates() == 2\n+ && numSeatsUnfilled == 1\n+ && currentRoundTallyToCandidates.keySet().stream().allMatch(\n+ x -> x.compareTo(config.getMinimumVoteThreshold()) >= 0);\n+ if (needsTiebreakMultipleWinners || needsTiebreakNoWinners) {\n // currentRoundTallyToCandidates is sorted from low to high, so just look at the last key\n BigDecimal maxVotes = currentRoundTallyToCandidates.lastKey();\n selectedWinners = currentRoundTallyToCandidates.get(maxVotes);\n", "bug_patch_file_extensions": ["java"], "test_patch": "diff --git a/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv\nindex 2bc4497..a6c86c7 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.csv\n@@ -7,7 +7,7 @@ Jurisdiction,\"Minneapolis, MN\"\n Office,Mayor\r\n Date,2017-11-07\r\n Winner(s),Jacob Frey\r\n-Final Threshold,2\r\n+Final Threshold,3\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,32 +15,32 @@ Number of Candidates,19\n Total Number of Ballots,4\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer\r\n-Eliminated,Aswar Rahman; David Rosenfeld; Raymond Dehn; L.A. Nik; Undeclared Write-ins; Christopher Zimmerman; Ronald Lischeid; Ian Simpson; Charlie Gers; Captain Jack Sparrow; Theron Preston Washington; David John Wilson; Gregg A. Iverson; Troy Benjegerdes; Al Flowers,,,Nekima Levy-Pounds,,,Tom Hoch,,,Betsy Hodges,,,,,\r\n-Elected,,,,,,,,,,,,,Jacob Frey,,\r\n-Tom Hoch,1,25.0%,0,1,25.0%,0,1,25.0%,-1,0,0.0%,0,0,0.0%,0\r\n-Betsy Hodges,1,25.0%,0,1,25.0%,1,2,50.0%,0,2,50.0%,-2,0,0.0%,0\r\n-Jacob Frey,1,25.0%,0,1,25.0%,0,1,25.0%,1,2,50.0%,0,2,100.0%,0\r\n-Nekima Levy-Pounds,1,25.0%,0,1,25.0%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Aswar Rahman,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-David Rosenfeld,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Raymond Dehn,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-L.A. Nik,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Christopher Zimmerman,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Ronald Lischeid,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Ian Simpson,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Charlie Gers,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Captain Jack Sparrow,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Theron Preston Washington,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-David John Wilson,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Gregg A. Iverson,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Troy Benjegerdes,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Al Flowers,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,4,,,4,,,4,,,4,,,2,,\r\n-Current Round Threshold,3,,,3,,,3,,,3,,,2,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,2,2,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,0,0,,0,0,,2,2,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer\r\n+Eliminated,Aswar Rahman; David Rosenfeld; Raymond Dehn; L.A. Nik; Undeclared Write-ins; Christopher Zimmerman; Ronald Lischeid; Ian Simpson; Charlie Gers; Captain Jack Sparrow; Theron Preston Washington; David John Wilson; Gregg A. Iverson; Troy Benjegerdes; Al Flowers,,,Nekima Levy-Pounds,,,Tom Hoch,,,,,\r\n+Elected,,,,,,,,,,Jacob Frey,,\r\n+Tom Hoch,1,25.0%,0,1,25.0%,0,1,25.0%,-1,0,0.0%,0\r\n+Betsy Hodges,1,25.0%,0,1,25.0%,1,2,50.0%,0,2,50.0%,0\r\n+Jacob Frey,1,25.0%,0,1,25.0%,0,1,25.0%,1,2,50.0%,0\r\n+Nekima Levy-Pounds,1,25.0%,0,1,25.0%,-1,0,0.0%,0,0,0.0%,0\r\n+Aswar Rahman,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+David Rosenfeld,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Raymond Dehn,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+L.A. Nik,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Christopher Zimmerman,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Ronald Lischeid,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Ian Simpson,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Charlie Gers,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Captain Jack Sparrow,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Theron Preston Washington,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+David John Wilson,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Gregg A. Iverson,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Troy Benjegerdes,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Al Flowers,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,4,,,4,,,4,,,4,,\r\n+Current Round Threshold,3,,,3,,,3,,,3,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.json\nindex ae3b5dd..c25dea1 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/missing_precinct_example/missing_precinct_example_expected_summary.json\n@@ -137,31 +137,13 @@\n \"Jacob Frey\" : \"2\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Betsy Hodges\",\n- \"transfers\" : {\n- \"exhausted\" : \"2\"\n- }\n- } ],\n- \"threshold\" : \"3\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"2\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 5,\n- \"tally\" : {\n- \"Jacob Frey\" : \"2\"\n- },\n- \"tallyResults\" : [ {\n \"elected\" : \"Jacob Frey\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"2\"\n+ \"threshold\" : \"3\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"2\",\n+ \"finalThreshold\" : \"3\",\n \"numCandidates\" : 19,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"4\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv\nindex d93f9ce..e0398f4 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.csv\n@@ -6,7 +6,7 @@ Contest,For Governor and Lieutenant Governor\n Jurisdiction,\r\n Office,\r\n Date,2019-03-06\r\n-Winner(s),Edward FitzGerald and Sharen Swartz Neuhardt\r\n+Winner(s),Anita Rios and Bob Fitrakis\r\n Final Threshold,1\r\n \r\n Contest Summary\r\n@@ -15,16 +15,16 @@ Number of Candidates,3\n Total Number of Ballots,1\r\n Number of Undervotes,1\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer\r\n-Eliminated,John Kasich and Mary Taylor,,,Anita Rios and Bob Fitrakis,,,,,\r\n-Elected,,,,,,,Edward FitzGerald and Sharen Swartz Neuhardt,,\r\n-Edward FitzGerald and Sharen Swartz Neuhardt,0,,0,0,,0,0,,0\r\n-John Kasich and Mary Taylor,0,,0,0,,0,0,,0\r\n-Anita Rios and Bob Fitrakis,0,,0,0,,0,0,,0\r\n-Active Ballots,0,,,0,,,0,,\r\n-Current Round Threshold,1,,,1,,,1,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,0,0,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer\r\n+Eliminated,John Kasich and Mary Taylor,,,,,\r\n+Elected,,,,Anita Rios and Bob Fitrakis,,\r\n+Edward FitzGerald and Sharen Swartz Neuhardt,0,,0,0,,0\r\n+John Kasich and Mary Taylor,0,,0,0,,0\r\n+Anita Rios and Bob Fitrakis,0,,0,0,,0\r\n+Active Ballots,0,,,0,,\r\n+Current Round Threshold,1,,,1,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.json\nindex e7594ab..428ea31 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/nist_xml_cdf_2/nist_xml_cdf_2_expected_summary.json\n@@ -38,23 +38,7 @@\n \"Edward FitzGerald and Sharen Swartz Neuhardt\" : \"0\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Anita Rios and Bob Fitrakis\",\n- \"transfers\" : { }\n- } ],\n- \"threshold\" : \"1\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"0\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 3,\n- \"tally\" : {\n- \"Edward FitzGerald and Sharen Swartz Neuhardt\" : \"0\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"Edward FitzGerald and Sharen Swartz Neuhardt\",\n+ \"elected\" : \"Anita Rios and Bob Fitrakis\",\n \"transfers\" : { }\n } ],\n \"threshold\" : \"1\"\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv\nindex 1bc914c..15275fc 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.csv\n@@ -7,7 +7,7 @@ Jurisdiction,\n Office,\r\n Date,\r\n Winner(s),B\r\n-Final Threshold,2\r\n+Final Threshold,3\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,18 +15,18 @@ Number of Candidates,5\n Total Number of Ballots,9\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer\r\n-Eliminated,D; E; F,,,C,,,,,\r\n-Elected,,,,,,,B,,\r\n-B,2,40.0%,0,2,50.0%,0,2,100.0%,0\r\n-C,2,40.0%,0,2,50.0%,-2,0,0.0%,0\r\n-D,1,20.0%,-1,0,0.0%,0,0,0.0%,0\r\n-E,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-F,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,5,,,4,,,2,,\r\n-Current Round Threshold,3,,,3,,,2,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,4,,1,5,,2,7,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,4,,1,5,,2,7,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer\r\n+Eliminated,D; E; F,,,,,\r\n+Elected,,,,B,,\r\n+B,2,40.0%,0,2,50.0%,0\r\n+C,2,40.0%,0,2,50.0%,0\r\n+D,1,20.0%,-1,0,0.0%,0\r\n+E,0,0.0%,0,0,0.0%,0\r\n+F,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,5,,,4,,\r\n+Current Round Threshold,3,,,3,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,4,,1,5,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,4,,1,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.json\nindex bbf8a8f..5392339 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_batch/sequential_with_batch_2_expected_summary.json\n@@ -48,31 +48,13 @@\n \"C\" : \"2\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"C\",\n- \"transfers\" : {\n- \"exhausted\" : \"2\"\n- }\n- } ],\n- \"threshold\" : \"3\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"7\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 3,\n- \"tally\" : {\n- \"B\" : \"2\"\n- },\n- \"tallyResults\" : [ {\n \"elected\" : \"B\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"2\"\n+ \"threshold\" : \"3\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"2\",\n+ \"finalThreshold\" : \"3\",\n \"numCandidates\" : 6,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"9\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv\nindex 205bd26..d6b20ec 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.csv\n@@ -7,7 +7,7 @@ Jurisdiction,\n Office,\r\n Date,\r\n Winner(s),B\r\n-Final Threshold,2\r\n+Final Threshold,3\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,18 +15,18 @@ Number of Candidates,5\n Total Number of Ballots,9\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer\r\n-Eliminated,F,,,E,,,D,,,C,,,,,\r\n-Elected,,,,,,,,,,,,,B,,\r\n-B,2,40.0%,0,2,40.0%,0,2,40.0%,0,2,50.0%,0,2,100.0%,0\r\n-C,2,40.0%,0,2,40.0%,0,2,40.0%,0,2,50.0%,-2,0,0.0%,0\r\n-D,1,20.0%,0,1,20.0%,0,1,20.0%,-1,0,0.0%,0,0,0.0%,0\r\n-E,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,5,,,5,,,5,,,4,,,2,,\r\n-Current Round Threshold,3,,,3,,,3,,,3,,,2,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,4,,0,4,,0,4,,1,5,,2,7,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,4,,0,4,,0,4,,1,5,,2,7,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer\r\n+Eliminated,F,,,E,,,D,,,,,\r\n+Elected,,,,,,,,,,B,,\r\n+B,2,40.0%,0,2,40.0%,0,2,40.0%,0,2,50.0%,0\r\n+C,2,40.0%,0,2,40.0%,0,2,40.0%,0,2,50.0%,0\r\n+D,1,20.0%,0,1,20.0%,0,1,20.0%,-1,0,0.0%,0\r\n+E,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,5,,,5,,,5,,,4,,\r\n+Current Round Threshold,3,,,3,,,3,,,3,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,4,,0,4,,0,4,,1,5,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,4,,0,4,,0,4,,1,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.json\nindex a8c553d..809e32d 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/sequential_with_continue_until_two/sequential_with_continue_until_two_2_expected_summary.json\n@@ -79,31 +79,13 @@\n \"C\" : \"2\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"C\",\n- \"transfers\" : {\n- \"exhausted\" : \"2\"\n- }\n- } ],\n- \"threshold\" : \"3\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"7\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 5,\n- \"tally\" : {\n- \"B\" : \"2\"\n- },\n- \"tallyResults\" : [ {\n \"elected\" : \"B\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"2\"\n+ \"threshold\" : \"3\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"2\",\n+ \"finalThreshold\" : \"3\",\n \"numCandidates\" : 6,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"9\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_config.json b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_config.json\nindex e69cb7b..58fbc65 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_config.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_config.json\n@@ -50,6 +50,6 @@\n \"batchElimination\": true,\n \"exhaustOnDuplicateCandidate\": false,\n \"rulesDescription\": \"Doyle Rules\",\n- \"stopTabulationEarlyAfterRound\": \"2\"\n+ \"stopTabulationEarlyAfterRound\": \"1\"\n }\n }\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv\nindex f1e7343..e462a09 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.csv\n@@ -7,7 +7,7 @@ Jurisdiction,\"Funkytown, USA\"\n Office,Sergeant-at-Arms\r\n Date,2023-03-14\r\n Winner(s),\r\n-Final Threshold,4\r\n+Final Threshold,5\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,16 +15,16 @@ Number of Candidates,3\n Total Number of Ballots,9\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer\r\n-Eliminated,Yinka Dare,,,George Gervin,,\r\n-Elected,,,,,,\r\n-Yinka Dare,3,33.33%,-3,0,0.0%,0\r\n-George Gervin,3,33.33%,0,3,50.0%,0\r\n-Mookie Blaylock,3,33.33%,0,3,50.0%,0\r\n-Active Ballots,9,,,6,,\r\n-Current Round Threshold,5,,,4,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n-Inactive Ballots Total,0,,3,3,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer\r\n+Eliminated,Yinka Dare,,\r\n+Elected,,,\r\n+Yinka Dare,3,33.33%,0\r\n+George Gervin,3,33.33%,0\r\n+Mookie Blaylock,3,33.33%,0\r\n+Active Ballots,9,,\r\n+Current Round Threshold,5,,\r\n+Inactive Ballots by Overvotes,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0\r\n+Inactive Ballots Total,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.json\nindex 48a8f43..3e9c40b 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/stop_tabulation_early_test/stop_tabulation_early_test_expected_summary.json\n@@ -22,31 +22,12 @@\n },\n \"tallyResults\" : [ {\n \"eliminated\" : \"Yinka Dare\",\n- \"transfers\" : {\n- \"exhausted\" : \"3\"\n- }\n- } ],\n- \"threshold\" : \"5\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"0\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 2,\n- \"tally\" : {\n- \"George Gervin\" : \"3\",\n- \"Mookie Blaylock\" : \"3\"\n- },\n- \"tallyResults\" : [ {\n- \"eliminated\" : \"George Gervin\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"4\"\n+ \"threshold\" : \"5\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"4\",\n+ \"finalThreshold\" : \"5\",\n \"numCandidates\" : 3,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"9\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv\nindex 7da15b2..fc3a7ae 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.csv\n@@ -6,8 +6,8 @@ Contest,treatBlankAsUndeclaredWriteIn test\n Jurisdiction,\r\n Office,\r\n Date,2019-03-06\r\n-Winner(s),B\r\n-Final Threshold,5\r\n+Winner(s),C\r\n+Final Threshold,7\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,18 +15,18 @@ Number of Candidates,5\n Total Number of Ballots,12\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer\r\n-Eliminated,Undeclared Write-ins,,,D,,,A,,,C,,,,,\r\n-Elected,,,,,,,,,,,,,B,,\r\n-A,2,16.66%,1,3,25.0%,0,3,25.0%,-3,0,0.0%,0,0,0.0%,0\r\n-B,2,16.66%,2,4,33.33%,1,5,41.66%,1,6,50.0%,3,9,100.0%,0\r\n-C,2,16.66%,2,4,33.33%,0,4,33.33%,2,6,50.0%,-6,0,0.0%,0\r\n-D,1,8.33%,0,1,8.33%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Undeclared Write-ins,5,41.66%,-5,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,12,,,12,,,12,,,12,,,9,,\r\n-Current Round Threshold,7,,,7,,,7,,,7,,,5,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,1,1,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,2,2,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,0,0,,0,0,,3,3,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer\r\n+Eliminated,Undeclared Write-ins,,,D,,,A,,,,,\r\n+Elected,,,,,,,,,,C,,\r\n+A,2,16.66%,1,3,25.0%,0,3,25.0%,-3,0,0.0%,0\r\n+B,2,16.66%,2,4,33.33%,1,5,41.66%,1,6,50.0%,0\r\n+C,2,16.66%,2,4,33.33%,0,4,33.33%,2,6,50.0%,0\r\n+D,1,8.33%,0,1,8.33%,-1,0,0.0%,0,0,0.0%,0\r\n+Undeclared Write-ins,5,41.66%,-5,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,12,,,12,,,12,,,12,,\r\n+Current Round Threshold,7,,,7,,,7,,,7,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.json\nindex 25e4d0b..7c409e5 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/test_set_treat_blank_as_undeclared_write_in/test_set_treat_blank_as_undeclared_write_in_expected_summary.json\n@@ -86,32 +86,13 @@\n \"C\" : \"6\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"C\",\n- \"transfers\" : {\n- \"B\" : \"3\",\n- \"exhausted\" : \"3\"\n- }\n- } ],\n- \"threshold\" : \"7\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"2\",\n- \"overvotes\" : \"1\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 5,\n- \"tally\" : {\n- \"B\" : \"9\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"B\",\n+ \"elected\" : \"C\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"5\"\n+ \"threshold\" : \"7\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"5\",\n+ \"finalThreshold\" : \"7\",\n \"numCandidates\" : 5,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"12\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv\nindex f44c2a8..80b9ab5 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.csv\n@@ -7,7 +7,7 @@ Jurisdiction,\"Funkytown, USA\"\n Office,Sergeant-at-Arms\r\n Date,2017-12-03\r\n Winner(s),George Gervin\r\n-Final Threshold,2\r\n+Final Threshold,3\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,17 +15,17 @@ Number of Candidates,4\n Total Number of Ballots,8\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer\r\n-Eliminated,Mookie Blaylock,,,Yinka Dare,,,Sedale Threatt,,,,,\r\n-Elected,,,,,,,,,,George Gervin,,\r\n-Sedale Threatt,2,25.0%,0,2,33.33%,0,2,50.0%,-2,0,0.0%,0\r\n-Yinka Dare,2,25.0%,0,2,33.33%,-2,0,0.0%,0,0,0.0%,0\r\n-George Gervin,2,25.0%,0,2,33.33%,0,2,50.0%,0,2,100.0%,0\r\n-Mookie Blaylock,2,25.0%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,8,,,6,,,4,,,2,,\r\n-Current Round Threshold,5,,,4,,,3,,,2,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,2,2,,2,4,,2,6,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,2,2,,2,4,,2,6,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer\r\n+Eliminated,Mookie Blaylock,,,Yinka Dare,,,,,\r\n+Elected,,,,,,,George Gervin,,\r\n+Sedale Threatt,2,25.0%,0,2,33.33%,0,2,50.0%,0\r\n+Yinka Dare,2,25.0%,0,2,33.33%,-2,0,0.0%,0\r\n+George Gervin,2,25.0%,0,2,33.33%,0,2,50.0%,0\r\n+Mookie Blaylock,2,25.0%,-2,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,8,,,6,,,4,,\r\n+Current Round Threshold,5,,,4,,,3,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,2,2,,2,4,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,2,2,,2,4,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.json\nindex 5dac64a..a4303b8 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_generate_permutation_test/tiebreak_generate_permutation_test_expected_summary.json\n@@ -61,31 +61,13 @@\n \"Sedale Threatt\" : \"2\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Sedale Threatt\",\n- \"transfers\" : {\n- \"exhausted\" : \"2\"\n- }\n- } ],\n- \"threshold\" : \"3\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"6\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 4,\n- \"tally\" : {\n- \"George Gervin\" : \"2\"\n- },\n- \"tallyResults\" : [ {\n \"elected\" : \"George Gervin\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"2\"\n+ \"threshold\" : \"3\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"2\",\n+ \"finalThreshold\" : \"3\",\n \"numCandidates\" : 4,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"8\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv\nindex c4fb5ce..2775757 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.csv\n@@ -6,8 +6,8 @@ Contest,Tiebreak test\n Jurisdiction,\"Funkytown, USA\"\r\n Office,Sergeant-at-Arms\r\n Date,2017-12-03\r\n-Winner(s),Dopey\r\n-Final Threshold,2\r\n+Winner(s),Sneezy\r\n+Final Threshold,4\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,17 +15,17 @@ Number of Candidates,4\n Total Number of Ballots,9\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer\r\n-Eliminated,Happy,,,Grumpy,,,Sneezy,,,,,\r\n-Elected,,,,,,,,,,Dopey,,\r\n-Sneezy,3,33.33%,0,3,33.33%,0,3,50.0%,-3,0,0.0%,0\r\n-Dopey,3,33.33%,0,3,33.33%,0,3,50.0%,0,3,100.0%,0\r\n-Grumpy,2,22.22%,1,3,33.33%,-3,0,0.0%,0,0,0.0%,0\r\n-Happy,1,11.11%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,9,,,9,,,6,,,3,,\r\n-Current Round Threshold,5,,,5,,,4,,,2,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,3,3,,3,6,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer\r\n+Eliminated,Happy,,,Grumpy,,,,,\r\n+Elected,,,,,,,Sneezy,,\r\n+Sneezy,3,33.33%,0,3,33.33%,0,3,50.0%,0\r\n+Dopey,3,33.33%,0,3,33.33%,0,3,50.0%,0\r\n+Grumpy,2,22.22%,1,3,33.33%,-3,0,0.0%,0\r\n+Happy,1,11.11%,-1,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,9,,,9,,,6,,\r\n+Current Round Threshold,5,,,5,,,4,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,3,3,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.json\nindex 4a39fd6..0b1751e 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_previous_round_counts_then_random_test/tiebreak_previous_round_counts_then_random_test_expected_summary.json\n@@ -61,31 +61,13 @@\n \"Sneezy\" : \"3\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Sneezy\",\n- \"transfers\" : {\n- \"exhausted\" : \"3\"\n- }\n- } ],\n- \"threshold\" : \"4\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"0\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 4,\n- \"tally\" : {\n- \"Dopey\" : \"3\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"Dopey\",\n+ \"elected\" : \"Sneezy\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"2\"\n+ \"threshold\" : \"4\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"2\",\n+ \"finalThreshold\" : \"4\",\n \"numCandidates\" : 4,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"9\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv\nindex 0063996..1cbd4a9 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.csv\n@@ -6,8 +6,8 @@ Contest,Tiebreak test\n Jurisdiction,\"Funkytown, USA\"\r\n Office,Sergeant-at-Arms\r\n Date,2017-12-03\r\n-Winner(s),Mookie Blaylock\r\n-Final Threshold,2\r\n+Winner(s),George Gervin\r\n+Final Threshold,4\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,16 +15,16 @@ Number of Candidates,3\n Total Number of Ballots,9\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer\r\n-Eliminated,Yinka Dare,,,George Gervin,,,,,\r\n-Elected,,,,,,,Mookie Blaylock,,\r\n-Yinka Dare,3,33.33%,-3,0,0.0%,0,0,0.0%,0\r\n-George Gervin,3,33.33%,0,3,50.0%,-3,0,0.0%,0\r\n-Mookie Blaylock,3,33.33%,0,3,50.0%,0,3,100.0%,0\r\n-Active Ballots,9,,,6,,,3,,\r\n-Current Round Threshold,5,,,4,,,2,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,3,3,,3,6,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer\r\n+Eliminated,Yinka Dare,,,,,\r\n+Elected,,,,George Gervin,,\r\n+Yinka Dare,3,33.33%,-3,0,0.0%,0\r\n+George Gervin,3,33.33%,0,3,50.0%,0\r\n+Mookie Blaylock,3,33.33%,0,3,50.0%,0\r\n+Active Ballots,9,,,6,,\r\n+Current Round Threshold,5,,,4,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0\r\n+Inactive Ballots Total,0,,3,3,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.json\nindex baf42cf..eacfb91 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_seed_test/tiebreak_seed_test_expected_summary.json\n@@ -40,31 +40,13 @@\n \"Mookie Blaylock\" : \"3\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"George Gervin\",\n- \"transfers\" : {\n- \"exhausted\" : \"3\"\n- }\n- } ],\n- \"threshold\" : \"4\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"0\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 3,\n- \"tally\" : {\n- \"Mookie Blaylock\" : \"3\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"Mookie Blaylock\",\n+ \"elected\" : \"George Gervin\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"2\"\n+ \"threshold\" : \"4\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"2\",\n+ \"finalThreshold\" : \"4\",\n \"numCandidates\" : 3,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"9\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv\nindex de8b753..64eb3e9 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.csv\n@@ -7,7 +7,7 @@ Jurisdiction,\"Funkytown, USA\"\n Office,Sergeant-at-Arms\r\n Date,2017-12-03\r\n Winner(s),Mookie Blaylock\r\n-Final Threshold,3\r\n+Final Threshold,5\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,17 +15,17 @@ Number of Candidates,4\n Total Number of Ballots,10\r\n Number of Undervotes,0\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer\r\n-Eliminated,Sedale Threatt,,,George Gervin,,,Yinka Dare,,,,,\r\n-Elected,,,,,,,,,,Mookie Blaylock,,\r\n-Mookie Blaylock,4,40.0%,0,4,40.0%,0,4,50.0%,0,4,100.0%,0\r\n-Yinka Dare,3,30.0%,0,3,30.0%,1,4,50.0%,-4,0,0.0%,0\r\n-George Gervin,2,20.0%,1,3,30.0%,-3,0,0.0%,0,0,0.0%,0\r\n-Sedale Threatt,1,10.0%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,10,,,10,,,8,,,4,,\r\n-Current Round Threshold,6,,,6,,,5,,,3,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,2,2,,4,6,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer\r\n+Eliminated,Sedale Threatt,,,George Gervin,,,,,\r\n+Elected,,,,,,,Mookie Blaylock,,\r\n+Mookie Blaylock,4,40.0%,0,4,40.0%,0,4,50.0%,0\r\n+Yinka Dare,3,30.0%,0,3,30.0%,1,4,50.0%,0\r\n+George Gervin,2,20.0%,1,3,30.0%,-3,0,0.0%,0\r\n+Sedale Threatt,1,10.0%,-1,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,10,,,10,,,8,,\r\n+Current Round Threshold,6,,,6,,,5,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,2,2,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.json\nindex 3e2babe..072ca2c 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/tiebreak_use_permutation_in_config_test/tiebreak_use_permutation_in_config_test_expected_summary.json\n@@ -62,31 +62,13 @@\n \"Yinka Dare\" : \"4\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Yinka Dare\",\n- \"transfers\" : {\n- \"exhausted\" : \"4\"\n- }\n- } ],\n- \"threshold\" : \"5\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"0\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 4,\n- \"tally\" : {\n- \"Mookie Blaylock\" : \"4\"\n- },\n- \"tallyResults\" : [ {\n \"elected\" : \"Mookie Blaylock\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"3\"\n+ \"threshold\" : \"5\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"3\",\n+ \"finalThreshold\" : \"5\",\n \"numCandidates\" : 4,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"10\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv\nindex c85b2c1..b8adcc6 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.csv\n@@ -6,8 +6,8 @@ Contest,For City C Council Member (1/3)\n Jurisdiction,\r\n Office,\r\n Date,2019-03-06\r\n-Winner(s),Stephen Miller\r\n-Final Threshold,7\r\n+Winner(s),Terry Williams\r\n+Final Threshold,11\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,22 +15,22 @@ Number of Candidates,9\n Total Number of Ballots,35\r\n Number of Undervotes,6\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer,Round 9 Votes,% of vote,transfer\r\n-Eliminated,Undeclared Write-ins,,,Sylvia Vaugn,,,Nolan Ryder,,,Carrie Underwood,,,Hal Newman,,,Fred Wallace,,,Lonnie Alsup,,,Terry Williams,,,,,\r\n-Elected,,,,,,,,,,,,,,,,,,,,,,,,,Stephen Miller,,\r\n-Stephen Miller,5,17.24%,1,6,20.68%,0,6,20.68%,1,7,24.13%,1,8,27.58%,0,8,27.58%,2,10,37.03%,0,10,50.0%,2,12,100.0%,0\r\n-Terry Williams,4,13.79%,0,4,13.79%,0,4,13.79%,1,5,17.24%,2,7,24.13%,3,10,34.48%,0,10,37.03%,0,10,50.0%,-10,0,0.0%,0\r\n-Hal Newman,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Carrie Underwood,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Lonnie Alsup,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,1,5,17.24%,1,6,20.68%,1,7,25.92%,-7,0,0.0%,0,0,0.0%,0\r\n-Fred Wallace,3,10.34%,0,3,10.34%,1,4,13.79%,1,5,17.24%,0,5,17.24%,0,5,17.24%,-5,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Nolan Ryder,2,6.89%,0,2,6.89%,1,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Sylvia Vaugn,2,6.89%,0,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Undeclared Write-ins,1,3.44%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,27,,,20,,,12,,\r\n-Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,14,,,11,,,7,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,7,9,,8,17,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,7,9,,8,17,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer\r\n+Eliminated,Undeclared Write-ins,,,Sylvia Vaugn,,,Nolan Ryder,,,Carrie Underwood,,,Hal Newman,,,Fred Wallace,,,Lonnie Alsup,,,,,\r\n+Elected,,,,,,,,,,,,,,,,,,,,,,Terry Williams,,\r\n+Stephen Miller,5,17.24%,1,6,20.68%,0,6,20.68%,1,7,24.13%,1,8,27.58%,0,8,27.58%,2,10,37.03%,0,10,50.0%,0\r\n+Terry Williams,4,13.79%,0,4,13.79%,0,4,13.79%,1,5,17.24%,2,7,24.13%,3,10,34.48%,0,10,37.03%,0,10,50.0%,0\r\n+Hal Newman,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Carrie Underwood,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Lonnie Alsup,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,1,5,17.24%,1,6,20.68%,1,7,25.92%,-7,0,0.0%,0\r\n+Fred Wallace,3,10.34%,0,3,10.34%,1,4,13.79%,1,5,17.24%,0,5,17.24%,0,5,17.24%,-5,0,0.0%,0,0,0.0%,0\r\n+Nolan Ryder,2,6.89%,0,2,6.89%,1,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Sylvia Vaugn,2,6.89%,0,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Undeclared Write-ins,1,3.44%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,27,,,20,,\r\n+Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,14,,,11,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,7,9,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,2,2,,7,9,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.json\nindex 993926b..ed9caa5 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_city_council_member/unisyn_xml_cdf_city_council_member_expected_summary.json\n@@ -189,32 +189,13 @@\n \"Terry Williams\" : \"10\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Terry Williams\",\n- \"transfers\" : {\n- \"Stephen Miller\" : \"2\",\n- \"exhausted\" : \"8\"\n- }\n- } ],\n- \"threshold\" : \"11\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"17\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 9,\n- \"tally\" : {\n- \"Stephen Miller\" : \"12\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"Stephen Miller\",\n+ \"elected\" : \"Terry Williams\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"7\"\n+ \"threshold\" : \"11\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"7\",\n+ \"finalThreshold\" : \"11\",\n \"numCandidates\" : 9,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"35\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv\nindex 495c196..9b2a3ca 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.csv\n@@ -6,8 +6,8 @@ Contest,For County Coroner (1/2)\n Jurisdiction,\r\n Office,\r\n Date,2019-03-06\r\n-Winner(s),Niels Larson\r\n-Final Threshold,5\r\n+Winner(s),Willy Wonka\r\n+Final Threshold,10\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,22 +15,22 @@ Number of Candidates,9\n Total Number of Ballots,35\r\n Number of Undervotes,6\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer,Round 9 Votes,% of vote,transfer\r\n-Eliminated,Undeclared Write-ins,,,Laura Brown,,,Andrea Doria,,,Kay Daniels,,,Walter Gerber,,,Emily Steffan,,,Jimmy Hendriks,,,Willy Wonka,,,,,\r\n-Elected,,,,,,,,,,,,,,,,,,,,,,,,,Niels Larson,,\r\n-Willy Wonka,5,17.24%,0,5,17.24%,1,6,20.68%,0,6,20.68%,0,6,20.68%,0,6,24.0%,3,9,37.5%,0,9,50.0%,-9,0,0.0%,0\r\n-Niels Larson,5,17.24%,0,5,17.24%,0,5,17.24%,1,6,20.68%,2,8,27.58%,0,8,32.0%,0,8,33.33%,1,9,50.0%,0,9,100.0%,0\r\n-Emily Steffan,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,16.0%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Laura Brown,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Kay Daniels,3,10.34%,0,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Andrea Doria,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Jimmy Hendriks,3,10.34%,0,3,10.34%,1,4,13.79%,2,6,20.68%,1,7,24.13%,0,7,28.0%,0,7,29.16%,-7,0,0.0%,0,0,0.0%,0\r\n-Walter Gerber,3,10.34%,0,3,10.34%,1,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,29,,,29,,,29,,,29,,,29,,,25,,,24,,,18,,,9,,\r\n-Current Round Threshold,15,,,15,,,15,,,15,,,15,,,13,,,13,,,10,,,5,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,4,4,,1,5,,6,11,,9,20,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,4,4,,1,5,,6,11,,9,20,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer\r\n+Eliminated,Undeclared Write-ins,,,Laura Brown,,,Andrea Doria,,,Kay Daniels,,,Walter Gerber,,,Emily Steffan,,,Jimmy Hendriks,,,,,\r\n+Elected,,,,,,,,,,,,,,,,,,,,,,Willy Wonka,,\r\n+Willy Wonka,5,17.24%,0,5,17.24%,1,6,20.68%,0,6,20.68%,0,6,20.68%,0,6,24.0%,3,9,37.5%,0,9,50.0%,0\r\n+Niels Larson,5,17.24%,0,5,17.24%,0,5,17.24%,1,6,20.68%,2,8,27.58%,0,8,32.0%,0,8,33.33%,1,9,50.0%,0\r\n+Emily Steffan,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,13.79%,0,4,16.0%,-4,0,0.0%,0,0,0.0%,0\r\n+Laura Brown,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Kay Daniels,3,10.34%,0,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Andrea Doria,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Jimmy Hendriks,3,10.34%,0,3,10.34%,1,4,13.79%,2,6,20.68%,1,7,24.13%,0,7,28.0%,0,7,29.16%,-7,0,0.0%,0\r\n+Walter Gerber,3,10.34%,0,3,10.34%,1,4,13.79%,0,4,13.79%,0,4,13.79%,-4,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,29,,,29,,,29,,,29,,,29,,,25,,,24,,,18,,\r\n+Current Round Threshold,15,,,15,,,15,,,15,,,15,,,13,,,13,,,10,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,4,4,,1,5,,6,11,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,4,4,,1,5,,6,11,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.json\nindex 8546c2a..b2f7810 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_coroner/unisyn_xml_cdf_county_coroner_expected_summary.json\n@@ -185,31 +185,13 @@\n \"Willy Wonka\" : \"9\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Willy Wonka\",\n- \"transfers\" : {\n- \"exhausted\" : \"9\"\n- }\n- } ],\n- \"threshold\" : \"10\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"20\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 9,\n- \"tally\" : {\n- \"Niels Larson\" : \"9\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"Niels Larson\",\n+ \"elected\" : \"Willy Wonka\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"5\"\n+ \"threshold\" : \"10\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"5\",\n+ \"finalThreshold\" : \"10\",\n \"numCandidates\" : 9,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"35\",\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv\nindex a05d552..31b7d4a 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.csv\n@@ -6,8 +6,8 @@ Contest,For County Sheriff (1/3)\n Jurisdiction,\r\n Office,\r\n Date,2019-03-06\r\n-Winner(s),Terry Baker\r\n-Final Threshold,9\r\n+Winner(s),Warren Norell\r\n+Final Threshold,13\r\n \r\n Contest Summary\r\n Number to be Elected,1\r\n@@ -15,21 +15,21 @@ Number of Candidates,8\n Total Number of Ballots,35\r\n Number of Undervotes,6\r\n \r\n-Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer\r\n-Eliminated,Undeclared Write-ins,,,Beth Small,,,Thomas Soto,,,Sandra Williams,,,John Wayne Jr.,,,Tony Seiler,,,Warren Norell,,,,,\r\n-Elected,,,,,,,,,,,,,,,,,,,,,,Terry Baker,,\r\n-Terry Baker,5,17.24%,0,5,17.24%,2,7,24.13%,0,7,24.13%,0,7,24.13%,3,10,34.48%,2,12,50.0%,5,17,100.0%,0\r\n-John Wayne Jr.,5,17.24%,1,6,20.68%,0,6,20.68%,1,7,24.13%,0,7,24.13%,-7,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Tony Seiler,5,17.24%,1,6,20.68%,0,6,20.68%,0,6,20.68%,1,7,24.13%,2,9,31.03%,-9,0,0.0%,0,0,0.0%,0\r\n-Warren Norell,4,13.79%,0,4,13.79%,0,4,13.79%,2,6,20.68%,2,8,27.58%,2,10,34.48%,2,12,50.0%,-12,0,0.0%,0\r\n-Thomas Soto,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Sandra Williams,3,10.34%,0,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Beth Small,2,6.89%,0,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Undeclared Write-ins,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n-Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,24,,,17,,\r\n-Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,13,,,9,,\r\n-Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,5,5,,7,12,,0\r\n-Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n-Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,5,5,,7,12,,0\r\n+Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer\r\n+Eliminated,Undeclared Write-ins,,,Beth Small,,,Thomas Soto,,,Sandra Williams,,,John Wayne Jr.,,,Tony Seiler,,,,,\r\n+Elected,,,,,,,,,,,,,,,,,,,Warren Norell,,\r\n+Terry Baker,5,17.24%,0,5,17.24%,2,7,24.13%,0,7,24.13%,0,7,24.13%,3,10,34.48%,2,12,50.0%,0\r\n+John Wayne Jr.,5,17.24%,1,6,20.68%,0,6,20.68%,1,7,24.13%,0,7,24.13%,-7,0,0.0%,0,0,0.0%,0\r\n+Tony Seiler,5,17.24%,1,6,20.68%,0,6,20.68%,0,6,20.68%,1,7,24.13%,2,9,31.03%,-9,0,0.0%,0\r\n+Warren Norell,4,13.79%,0,4,13.79%,0,4,13.79%,2,6,20.68%,2,8,27.58%,2,10,34.48%,2,12,50.0%,0\r\n+Thomas Soto,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Sandra Williams,3,10.34%,0,3,10.34%,0,3,10.34%,0,3,10.34%,-3,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Beth Small,2,6.89%,0,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Undeclared Write-ins,2,6.89%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0\r\n+Active Ballots,29,,,29,,,29,,,29,,,29,,,29,,,24,,\r\n+Current Round Threshold,15,,,15,,,15,,,15,,,15,,,15,,,13,,\r\n+Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,5,5,,0\r\n+Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0\r\n+Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,5,5,,0\r\ndiff --git a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.json b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.json\nindex ac8d06a..565f50d 100644\n--- a/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.json\n+++ b/src/test/resources/network/brightspots/rcv/test_data/unisyn_xml_cdf_county_sheriff/unisyn_xml_cdf_county_sheriff_expected_summary.json\n@@ -162,32 +162,13 @@\n \"Warren Norell\" : \"12\"\n },\n \"tallyResults\" : [ {\n- \"eliminated\" : \"Warren Norell\",\n- \"transfers\" : {\n- \"Terry Baker\" : \"5\",\n- \"exhausted\" : \"7\"\n- }\n- } ],\n- \"threshold\" : \"13\"\n- }, {\n- \"inactiveBallots\" : {\n- \"exhaustedChoices\" : \"12\",\n- \"overvotes\" : \"0\",\n- \"repeatedRankings\" : \"0\",\n- \"skippedRankings\" : \"0\"\n- },\n- \"round\" : 8,\n- \"tally\" : {\n- \"Terry Baker\" : \"17\"\n- },\n- \"tallyResults\" : [ {\n- \"elected\" : \"Terry Baker\",\n+ \"elected\" : \"Warren Norell\",\n \"transfers\" : { }\n } ],\n- \"threshold\" : \"9\"\n+ \"threshold\" : \"13\"\n } ],\n \"summary\" : {\n- \"finalThreshold\" : \"9\",\n+ \"finalThreshold\" : \"13\",\n \"numCandidates\" : 8,\n \"numWinners\" : 1,\n \"totalNumBallots\" : \"35\",\n", "test_patch_file_extensions": ["json", "csv"], "non_code_patch": "", "non_code_patch_file_extensions": [], "change_type": "SOURCE_ONLY", "actions_runs": [[{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 1.71, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.796, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 15.075, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.181, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.221, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.244, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.104, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.157, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 13.075, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.059, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 56.174, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.12, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.149, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.102, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.07, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.056, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.06, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.111, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.356, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.038, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.004, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.054, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.054, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.036, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 10.472, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 3.722, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.035, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.03, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for Dominion", "time": 0.106, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for CDF", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for ES&S", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.069, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 3.436, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for Dominion", "time": 0.051, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.061, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 5.115, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for CDF", "time": 0.013, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for ES&S", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.016, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.041, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.012, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.047, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.032, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 4.386, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.049, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.125, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.ContestConfigTests", "name": "test isVersionNewer", "time": 0.048, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/6b48cf36-3376-4b38-88ca-9aa4c5574e1c/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "e396c11a-6d26-4397-8b3e-0722f683e8e8", "build_tool": "gradle", "elapsed_time": 248.6480405330658, "default_actions": false}], [{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 2.18, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.991, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 12.437, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.179, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.011, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.2, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.201, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.12, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.127, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 11.441, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.049, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.049, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 54.166, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.041, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.055, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.086, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.031, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.027, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.082, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.228, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.022, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.003, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.042, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.078, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.043, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 9.197, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 4.576, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.032, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.05, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for Dominion", "time": 0.1, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for CDF", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for ES&S", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.032, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.029, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 4.453, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for Dominion", "time": 0.052, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.031, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 5.76, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for CDF", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for ES&S", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.038, "results": [{"result": "Failure", "message": "org.opentest4j.AssertionFailedError", "type": "org.opentest4j.AssertionFailedError"}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.054, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.039, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.033, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 3.994, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.039, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.015, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.095, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.ContestConfigTests", "name": "test isVersionNewer", "time": 0.063, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/6b48cf36-3376-4b38-88ca-9aa4c5574e1c/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "2e607695-863d-4829-8766-780227d1af8b", "build_tool": "gradle", "elapsed_time": 199.51370573043823, "default_actions": false}], [{"failed": false, "tests": [{"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat fractional number threshold", "time": 0.733, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_council_member", "time": 0.384, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2017 Minneapolis Mayor", "time": 6.796, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_sheriff", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid params in config file", "time": 0.005, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote delimiter test", "time": 0.051, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cvr file dominion test", "time": 0.094, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "treat blank as undeclared write-in", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Wyoming test data", "time": 0.072, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test sequential multi-seat logic", "time": 13.139, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion - No Precinct Data", "time": 0.109, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_coroner", "time": 0.089, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor Scale", "time": 61.2, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using previousRoundCountsThenRandom", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_chief_of_police", "time": 0.044, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Alaska test data", "time": 0.041, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using permutation in config", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test tiebreak seed", "time": 0.017, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test allow only one winner per round logic", "time": 0.048, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain", "time": 0.112, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Dominion test - Kansas test data", "time": 0.28, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "NIST XML CDF 2", "time": 0.032, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test invalid source files", "time": 0.003, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test excluding candidates in config file", "time": 0.028, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Travis County Officers", "time": 0.052, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "undeclared write-in (UWI) cannot win test", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with continue until two test", "time": 0.056, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped first choice", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "exhaust at overvote rule", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote skips to next rank", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice exhausts option", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "skipped choice next option", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "two skipped ranks exhausts option", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank exhausts", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "duplicate rank skips to next option", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-cdf tabulation", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test skipping to next candidate after overvote", "time": 0.088, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat UWI test", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat with threshold logic", "time": 0.023, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test minimum vote threshold setting", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2018 Maine Governor Democratic Primary", "time": 9.864, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test Hare quota", "time": 4.571, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Continue Until Two Candidates Remain with Batch Elimination", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "sequential with batch elimination test", "time": 0.046, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold test", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for Dominion", "time": 0.122, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for CDF", "time": 0.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CDF works for ES&S", "time": 0.021, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "multi-seat whole number threshold", "time": 0.036, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "tiebreak using generated permutation", "time": 0.027, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (CDF JSON format)", "time": 0.026, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "aliases (ES&S XLSX format)", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "no one meets minimum test", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "missing precinct example", "time": 0.029, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test bottoms-up multi-seat logic", "time": 4.453, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for Dominion", "time": 0.036, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_tax_collector", "time": 0.022, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Mayor", "time": 3.782, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for CDF", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Test Convert to CSV works for ES&S", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_county_coroner", "time": 0.02, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "testMinneapolisMultiSeatThreshold", "time": 0.015, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "overvote exhaust if multiple continuing test", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "first round determine threshold and tiebreaker runs test", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor Candidate Codes", "time": 0.068, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "gracefully fail when tabulate-by-precinct option set without any precincts in CVR", "time": 0.045, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Clear Ballot - Kansas Primary", "time": 0.035, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "unisyn_xml_cdf_city_mayor", "time": 0.052, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "Hart - Cedar Park School Board", "time": 0.037, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2013 Minneapolis Park", "time": 5.018, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "generic CSV test", "time": 0.024, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test for overvotes", "time": 0.025, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "2015 Portland Mayor", "time": 0.052, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "test stopping tabulation early", "time": 0.019, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.TabulatorTests", "name": "precinct example", "time": 0.127, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}, {"classname": "network.brightspots.rcv.ContestConfigTests", "name": "test isVersionNewer", "time": 0.014, "results": [{"result": "Passed", "message": "", "type": ""}], "stdout": null, "stderr": null}], "workflow": {"path": "/tmp/6b48cf36-3376-4b38-88ca-9aa4c5574e1c/.github/workflows/test-crawler.yml", "type": "gradle"}, "workflow_name": "7ec11e27-9d98-4f73-8df0-1e8611380a10", "build_tool": "gradle", "elapsed_time": 184.18697309494019, "default_actions": false}]], "strategy": "PASS_PASS", "issues": [{"id": 731, "title": "Don't allow one candidate in the final round", "body": "Closes #694 \r\n\r\nIn #717, we had an option to prevent the final round from having just one candidate.\r\n\r\nIn this PR, we mandate it, based on [this comment thread](https://github.com/BrightSpots/rcv/pull/717#discussion_r1253175454).\r\n\r\nAll of the tests below had just two candidates on the last round and the tiebreaker and had an elimination tiebreaker, except for `stop tabulation early` test, which has been updated to stop tabulation before the tiebreaker would have hit.\r\n\r\nIn that test, we requested tabulation stop on Round 2, but Round 2 was a tiebreaker and tabulation would now end there regardless (just without choosing a winner). I now stop tabulation on Round 1.", "comments": [], "labels": [{"name": "v1.4 Nice-to-Have P1", "description": ""}], "is_pull_request": true, "review_comments": ["This doesn't look logically wrong, but are these last two parts of the condition actually necessary? In other words, could either of these ever be false when the first three conditions are true?", "Yes, without this we had one failing test (`minimum_threshold_test`) -- since everyone under the threshold is still considered active until they're eliminated.", "I was confused by this until I realized that you meant to refer to the `no_one_meets_minimum` test. That makes sense. Maybe add an inline comment explaining why we need this condition?\r\n\r\nIt would also be helpful to explain why we need `numSeatsUnfilled == 1`, since it's also not obvious (at least to me) at first glance why it's necessary in addition to the other conditions.", "Added comments explaining it all! The numSeatsUnfilled is a check to see if the winner was selected in a previous round."]}]}