Skip to content

Releases: mjtrac/pbss

v0.9.17 — FlatLaf Visual Identity for builder, Spinner Crash Fix

Choose a tag to compare

@mjtrac mjtrac released this 22 Jul 05:10

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 constructs MainFrame (the previous UIManager.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.colors in application.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 set displayOrder, leaving it at Java's default of 0. The candidate table's new Order spinner used a model with minimum 1, so opening the editor on any such candidate threw IllegalArgumentException and 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 across builder and scanner with 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 built MainFrame, 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

Choose a tag to compare

@mjtrac mjtrac released this 21 Jul 23:47

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 in README-testing.md (builder previously had no GUI-click-through test at all).
  • Fixed a real ClassCastException on "Manage Candidates"/"Assign Regions"/"Translations" for any already-saved Contest reopened by double-click — the dialog owner could be a Dialog, not a Frame, 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 JPA merge() 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 build test-harness's test election — alongside build_election.py (bBuilder's REST API, the full 15-contest election) and the headless TestElectionBuilder fallback — this one drives builder's real Swing UI with a real java.awt.Robot, idempotent against the real ~/pbss_data database.
  • 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: ARROW and NUMBER_FIELD vote-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

Choose a tag to compare

@mjtrac mjtrac released this 15 Jul 23:28

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.