Releases: mjtrac/pbss
Release list
v0.9.17 — FlatLaf Visual Identity for builder, Spinner Crash Fix
Highlights
- New visual identity for
builder: FlatLaf-based theme (PbssTheme) — a paper/ink/civic-teal palette grounded in the actual subject matter (paper ballots, official process), flat design, applied before Spring eagerly constructsMainFrame(the previousUIManager.setLookAndFeel()call ran after every screen was already built — a latent no-op). - Dashboard step cards (the 1–7 + Print landing screen) each get a distinct color from a warm-to-cool progression — configurable via
dashboard.card.colorsinapplication.properties. - Numeric spinners no longer stretch to fill their form row — capped to a comfortable ~4-digit width instead of stretching edge-to-edge like a text field.
- Fixed a real crash/lockup bug, found by hand and confirmed against a real database: candidates created via bBuilder's REST API (
test-harness/build_election.py) never setdisplayOrder, leaving it at Java's default of0. The candidate table's new Order spinner used a model with minimum1, so opening the editor on any such candidate threwIllegalArgumentExceptionand left it broken — the spin arrows did nothing, and typing into it produced a system beep instead of accepting input. Fixed the model's bounds, and audited/fixed every other spinner acrossbuilderandscannerwith the same minimum-vs-possible-zero-stored-value risk (ballot design template's columns/typography/RCV spinners, scanner's DPI spinner) — several of those would have crashed their dialog on open outright. Added a permanent regression test. - Fixed a latent hang in
ScreenshotGenerator(the dev screenshot tool): it seeded data after Spring had already builtMainFrame, so a genuinely fresh database would hang forever on the same blocking-dialog issue fixed earlier for the GUI test suite. Restructured to seed first.
Notes
All thirteen module pom.xml files bumped to 0.9.17. builder-core, counter-core, scanner-core, and all ten dependent apps verified to install/compile cleanly at this version. builder's full suite (21 tests) passes cleanly with no skips on this run.
v0.9.16 — Builder Screen-Test Suite, Two Real Cascade Bugs Fixed, Dialog UX
Highlights
- New full AssertJ-Swing screen-test coverage for
builder: every menu item, every CRUD screen's New/Edit/Delete/Refresh round trip, and the Contest → Candidates → Regions dialog cascade — closing the coverage gap noted inREADME-testing.md(builderpreviously had no GUI-click-through test at all). - Fixed a real
ClassCastExceptionon "Manage Candidates"/"Assign Regions"/"Translations" for any already-saved Contest reopened by double-click — the dialog owner could be aDialog, not aFrame, and the cast threw every time. Found by the new test suite, not previously caught by anything. - Fixed a real, more serious data-integrity bug: every candidate added to a newly created Contest was silently duplicated in the database on the ordinary create-contest → add-candidates → assign-regions workflow.
contestRepo.save(contest)'s JPAmerge()return value was discarded at each step, so still-transient candidates got re-inserted a second time by the very next save in the same cascade. - New
DesktopElectionBuilder+run_all.sh --desktop: a third way to buildtest-harness's test election — alongsidebuild_election.py(bBuilder's REST API, the full 15-contest election) and the headlessTestElectionBuilderfallback — this one drivesbuilder's real Swing UI with a realjava.awt.Robot, idempotent against the real~/pbss_datadatabase. - Dialog usability improvements in
builder: prose fields (preamble, postamble, instructions, explanatory text) now word-wrap instead of requiring horizontal scrolling to read; the candidate table's display-order column is a spinner instead of free-text entry; the ballot design template's header HTML/CSS field has a "Preview in Browser" button that renders the real substituted markup in the system browser (full CSS support). - Confirmed:
ARROWandNUMBER_FIELDvote-indicator styles remain excluded from the selectable picker across all three apps that expose one (bBuilder,blBuilder,builder) — the enum values themselves stay in the model for already-saved templates, nothing regressed.
Notes
All thirteen module pom.xml files bumped to 0.9.16. builder-core, counter-core, scanner-core, and all ten dependent apps verified to install/compile cleanly at this version. builder's full suite (20 tests across headless + new AssertJ-Swing screen tests) passes cleanly (1 environment-dependent skip — real-screen Robot geometry, same class of flakiness already documented for counter's equivalent GUI test).
0.9.12
Ready for external use. As it has had no external testing, I lack the chutzpah to call this 1.0, but it works for me. Email mjtrac@gmail.com if you have questions. README.md is your documentation.