Jury Release Notes: JuryFlex v5.3.7 - v6.1.2
This document contains release notes for JuryFlex versions 5.3.7 through v6.1.2.
Version 6.1.2
Release Date: October 6, 2026
Hotfix release on the 6.1.x line. The fix below is also included in v6.2.0.
Bug Fixes
- JURYCLOUD-86 / JURYSVC-130 / JURYSVC-101 — Regression Failure - Add City State and Zip into JSON DTO for GL (35330078)
- The
city,stateandzipcolumns were empty for juror rows in the GL export;GLFilePayableDTOMappernow populates them from the juror record - Ported from v5.6.8 (35e24208), which the 6.x line never received
- The
Version 6.1.1
Release Date: October 1, 2026
Features
-
JURYCLOUD-113 / JURYSVC-115 — Juror Age on the Alpha Venire (cd93cfc5)
- Added a juror age column to the alphabetical venire report
-
JURYCLOUD-121 / JURYSVC-97 — Report Image Library: Facebook and Handicap Icons on the Jury Summons (e94b0050)
- New Admin → System Config → Report Images screen for uploading per-tenant PNG, JPEG and GIF images (2 MB max)
- Report templates reference an image by name (e.g.
"county-logo.png"); a JasperReportsRepositoryService(DbReportImageRepositoryService) resolves it from the newsys_report_imagetable at fill time, so new report artwork no longer requires a release - Existing clerk seal, state seal and clerk signature handling is unchanged
- Enables courts to add icons such as Facebook and handicap-accessibility symbols to the jury summons
- User documentation: Administration → Report Images
-
JURYCLOUD-122 / JURYSVC-129 — Report Text Macros: Judge, Location, Pool and Juror Fields in Letter Text (2bfde31c)
- Letter text edited in Admin → System Config → System Reports can now use field macros such as
${judge.name},${location.roomDesc1}and${poolGroup.appearanceDt|MMMM d, yyyy}, resolved per juror from the letter'sPoolMemberVMrow - Enables second notices that print each juror's judge (the pool group's judge, falling back to the pool's judge)
- Applies to the Second Notice, Thank You, Thank You (Donation), Call Off and Excusal/Reschedule Request reply letters; Second Notice, Thank You and Call Off now use
PoolMemberVMrows instead ofJurorMasterVM - Fields are limited to an allowlist in
ReportMacroCatalog(no SSN, DL number, date of birth or system credentials); the System Reports editor refuses to save unknown macros - Existing
${clerkName}-style macros are unchanged PoolMemberVMgained read-only pass-throughs to the juror (nameFirst,address1,dlNum,dateOfBirth, etc.) so customized letter templates written againstJurorMasterVMrows keep filling; these are not reachable from text macros- User documentation: Administration → Report Text Macros
- Letter text edited in Admin → System Config → System Reports can now use field macros such as
Tenants with customized letter templates: no action needed unless they want the new field macros. The stock templates are updated automatically at startup where
system_default = true. Customized copies (system_default = false) are left as they are and keep working: every original macro (${clerkName},${appearanceDt}, …) is still substituted, and their existing fields still fill. The only difference is that new field macros such as${judge.name}print as typed in those tenants' letters until the template is updated as below.Find tenants with customized letter templates:
sql select tenant_id, search_key from sys_report_artifact where system_default = false and search_key in ('8L','16L','18L','19L','23L');
search_keyTemplate 8LexcusalRequestReply.jrxml16LsecondNotices.jrxml18LthankYouLetter.jrxml19LthankYouLetterDonation.jrxml23LcallOffLetter.jrxmlTo enable field macros in a customized template, make both of these changes:
- Add this field after the last existing
<field>declaration. It exposes the whole row bean to the report._THISisJRAbstractBeanDataSource.CURRENT_BEAN_MAPPINGin JasperReports 7.0.6.
xml <field name="row" class="java.lang.Object"> <description><![CDATA[_THIS]]></description> </field>
- Switch every
ReportUtil.replaceDynamicFields(...)call to the new method, inserting$F{row}as the third argument. UseresolveStyledMacrosin text fields withmarkup="styled"andresolveMacroseverywhere else. Any further arguments (dates, the jurorMap.of(...)) stay as they are:
ReportUtil.replaceDynamicFields($P{secondNoticeBodyText1}, $P{sysApplicationProperties}, $F{reschedDt}, $P{appearanceDt}) ReportUtil.resolveStyledMacros($P{secondNoticeBodyText1}, $P{sysApplicationProperties}, $F{row}, $F{reschedDt}, $P{appearanceDt})The field alone does not enable the new macros; the calls must also change.
Recommended check before deploying: review the
<field>declarations of every customizedsecondNotices.jrxml,thankYouLetter.jrxmlandcallOffLetter.jrxmlthe query returns. These letters now fill fromPoolMemberVMrows instead ofJurorMasterVM. Every juror field still resolves, but a few names now carry the pool member's value:
Field Before ( JurorMasterVM)Now ( PoolMemberVM)$F{id},$F{version}Juror record Pool member record $F{active},$F{jurorState},$F{sysExemptCode}Juror's status / excusal Status / excusal for this summons $F{appearanceDt}Always empty The pool group's appearance date Templates that only use name, address,
fullName,fullAddress,fullNameFML,lastNameSentenceCase,sexorreschedDtneed no review.
Deployment & Configuration
- JURYCLOUD-112 / JURYSVC-116 — Font Packs Required (128176cf)
- Bundled the OFL-licensed
Liberation Sansfont family (metric-compatible with Arial) and registered it with JasperReports programmatically at startup viaJasperFontRegistrar - Opt-in per report element via
fontName="Liberation Sans"; existingArialelements are unchanged - New
juryflex.report-fonts.requiredsetting (defaulttruein prod/cloud/docker) fails startup if the fonts cannot be registered
- Bundled the OFL-licensed
Action required for Windows Service deployments (
juryflex-service.xml): review before starting 6.1.1. The bundled report fonts are required by default in theprod,cloudanddockerprofiles (juryflex.report-fonts.required=true). If the fonts cannot be extracted and registered at startup, the service will refuse to start — a new failure mode in this release.Two new environment variables control this. Both are present, commented out, in the updated
src/main/resources/deployment/juryflex-service.xml(and innorthflank-env.template):
Variable Default Purpose REPORT_FONTS_REQUIREDtrueSet to falseto log a warning instead of failing startupREPORT_FONTS_CACHE_DIRECTORY(JVM temp directory) Directory where the TrueType files are staged for JasperReports/OpenPDF to read, e.g. C:/Java/report-fonts. Set this if the service account cannot write to the OS temp directory.
xml <env name="REPORT_FONTS_REQUIRED" value="true"/> <env name="REPORT_FONTS_CACHE_DIRECTORY" value="C:/Java/report-fonts"/>Recommended for on-prem Windows: uncomment
REPORT_FONTS_CACHE_DIRECTORYand point it at a location the service account can write to (the directory is created on startup if missing). If the service fails to start after the upgrade, look forJasperFontRegistrar/BundledFontsin the log and either fix the directory permissions or setREPORT_FONTS_REQUIREDtofalseto bring the service up while investigating.
Bug Fixes
- Carries forward all v6.0.9 hotfixes — JURYCLOUD-115, 117, 118, 119, and 120 (see Version 6.0.9 below)
Version 6.1.0
Release Date: September 5, 2026
Features
-
JURYCLOUD-84 / JURYSVC-100 — API-Based DMV/BVS Load Processing (d117f21b)
- New
JobsResourceREST API to trigger the DMV (JurorFileBatchJob) and BVS deceased-file (DeceasedBatchJob) processes on demand, previously runnable only via the cron schedule - Added a job-status endpoint,
SysJobRunrun-history entity,ManagedJob/TenantBatchProcessorabstractions,JobAlreadyRunningException, and a dedicatedROLE_JOB_APIauthority - User documentation updated with a REST API usage guide (9f53adf0)
- New
-
JURYCLOUD-101 / JURYSVC-78 — Additional Seating Charts (625acc2c, 1ae0d7a2, 74991c1b)
- Added new seating chart layouts for 8, 14, 20, 21, 21A, and 24-person configurations to
SeatingLayout,seating-layouts/layouts.json, and new Jasper templates - Seeded via Liquibase for multi-tenant rollout
- Added new seating chart layouts for 8, 14, 20, 21, 21A, and 24-person configurations to
Bug Fixes
-
JURYCLOUD-98 — Multi-Tenancy Isolation Bug (8d9384d2)
- Added
TenantResolutionFilterto fix non-deterministic tenant scoping on the login POST request, which previously bypassedTenantInterceptorentirely
- Added
-
JURYCLOUD-94 / JURYSVC-81 — Review Report Logic for Jury Management Report (JMR) (6c7f7efc)
- Payroll data in the JMR is now fetched by pool/panel member service date instead of check date in
PaymentMemberRepositoryandPaymentMemberService
- Payroll data in the JMR is now fetched by pool/panel member service date instead of check date in
-
JURYCLOUD-93 / JURYSVC-63 — Juror Search: Inconsistent Search Behavior (0e06c159)
- Standardized grid filtering on "starts with" comparisons via a new
GridFilterUtilsutility, replacing inconsistent "contains" logic across roughly 14 grid classes
- Standardized grid filtering on "starts with" comparisons via a new
-
JURYCLOUD-102 / JURYSVC-112 — Seating Chart: 11-Person Layout Seat Overwrite (b1debda7)
- Fixed the 11-person right-to-left layout where Seat 6 was overwriting Seat 3
-
JURYCLOUD-106 / JURYSVC-44 — User Deactivation (e153cc5a)
- Restored the Activated checkbox/column in User Administration (previously commented out) so admins can actually toggle it
- Deactivating a user now broadcasts a
UserDeactivatedEventand force-logs-out any already-open Vaadin session, closing the gap where deactivation only blocked future logins - Added
JwtActivatedUserFilterto enforce the same activation check for JWT/API access
Improvements
-
JURYCLOUD-90 — CourtFunds Export Mapping (b2e6d14e)
- Added a CourtFunds download to the system export mapping, with a new
CourtFundsPayableDTO/mapper andCsvExporterenhancements, giving admins editable, sortable output
- Added a CourtFunds download to the system export mapping, with a new
-
JURYCLOUD-91 — Check-In Workflow: Employer-Paid Selection (a5f8c1c3)
CheckInJurorsDialognow persists the last-selected employer-paid value for the session- Payment-card focus moves to the check button automatically after a card is scanned
-
JURYCLOUD-99 / JURYSVC-104 — JDBC Driver Update (5e3e8e91)
- Upgraded the SQL Server JDBC driver to 13.4.0.jre11
-
JURYCLOUD-100 / JURYSVC-108 — Database Indexes (38943ddb)
- Added performance indexes for the
pool_memberandjuror_historytables
- Added performance indexes for the
-
JURYCLOUD-104 / JURYSVC-103 — Trial Panel Reports Access from Panel Details (324b2fbf)
- Added a new
ReportGroupDTOand refactoredTrialPanelReportsView/PanelDetailViewso Trial Panel Reports are reachable directly from the Trial Panel Details screen
- Added a new
Version 6.0.9
Release Date: September 17, 2026
Hotfix release on the 6.0.x line. All fixes below are also included in v6.1.1.
Bug Fixes
-
JURYCLOUD-115 — Optimistic Locking Failure When Saving a Juror Address Change (e90683f9)
JurorAddressHistorynow uses its own dedicated sequence instead of the shared generator, andAddressHistoryMapperno longer copies the juror's id and version onto the history row, so saving an address change from Juror Details no longer fails with an optimistic lock error- History rows are stamped with the current time, and a genuine concurrent-edit conflict now shows a clear "updated by another user" message instead of a stack trace
-
JURYCLOUD-117 / JURYSVC-123 — Juror Payment Calculation Not Picking Up Panel Days Served (db60db1c)
- Payment creation now loads panel attendance with a direct query instead of the second-level-cached
poolMember.panelMemberscollection, which could be served stale and silently drop panel days from the payment - Re-creating a payment for a juror already in the batch now disassociates the pool and panel attendance days and records the deletion in juror history before removing the old payment member
- Removing a paid panel attendance day now checks the persisted row and shows which payment batch must be deleted first
- Enabled
hibernate.cache.auto_evict_collection_cacheand added the tenant-aware task decorator to the Vaadin task executor
- Payment creation now loads panel attendance with a direct query instead of the second-level-cached
-
JURYCLOUD-118 / JURYSVC-122 — Exception When Adding Juror Attendance to an Existing Payment Batch (1f7c72f5)
- Widened the
PoolMemberExtendedRepositoryentity graph to fetch juror master, exempt code, pool master, and pool group up front, fixing the exception raised when creating a payment for a juror already in the batch
- Widened the
-
JURYCLOUD-119 / JURYSVC-120 — Trial Panel Details: Incorrect Status Shown in the Status Drop-Down (c3fe93ec)
- The status drop-down on Trial Panel Details now lists
PANEL_MASTERstatus codes (In Process, Finalized Panel, Closed Panel) instead ofPANEL_DETAILScodes
- The status drop-down on Trial Panel Details now lists
-
JURYCLOUD-120 / JURYSVC-121 — Failed To Appear Print Summary Does Not Generate (3bfb8071)
- Replaced the abandoned
ar.com.fdvs:DynamicJasperlibrary with thenostrum-dynamic-jasperfork built for JasperReports 7 - Added
JuryFlexDjScriptletso DynamicJasper custom-expression columns receive field values under JasperReports 7; previously they rendered blank on every DynamicJasper-built report - Added
UIReportUtilTestas a regression guard
- Replaced the abandoned
Version 6.0.8
Release Date: July 27, 2026
Improvements
- Appearance date filtering — additional null-safety checks added around
appearanceDatePickerinPoolMasterGrid, and imports updated to useDateRangefromEnhancedDateRangePicker; the fix was reapplied after a merge to ensure it landed onupdate-spring-vaadin(67fabc1a, ec2e926a) - Summons Ready grid — adjusted column and layout widths in
SrMessageGridfor improved UI consistency (ca982047)
Version 6.0.7
Release Date: July 21, 2026
Bug Fixes
-
JURYSVC-64 / JURYCLOUD-87 — Juror Search, Juror Details: Cannot Undo Permanent Excusal (767a8307)
- Removed stale Hibernate caching annotations and juror-related caches from
JurorMasterServicethat were preventing permanent-excusal reversal from being reflected - Optimized cache configuration and added logging/robustness improvements to
JurorMasterDetailandJurorMasterDetailView
- Removed stale Hibernate caching annotations and juror-related caches from
-
JURYSVC-80 / JURYCLOUD-85 — Columbia JuryFlex Conversion Issue: Pool Master ID vs. Pool Number Mismatch (4a7063af)
- Replaced
DateTimePickerwithEnhancedDateRangePickerfor the appearance-date filter inPoolMasterGrid, withLumoUtility-based CSS overrides for alignment - Updated filtering logic to support proper date-range selection
- Replaced
-
JURYCLOUD-82 — Unable to Recycle Jurors (d7d3c21a)
- Fixed
checkIfJurorsAvail()inPoolGroupCheckinViewto include recycled jurors in the availability count, not just checked-in-and-available ones — previously, jurors returned to the pool after a trial weren't counted, so the app could incorrectly report no jurors available and block creating a new trial panel; added debug logging around the check for diagnostics - Added
@JsonIgnoreto panel and pool master mappings inSysTrialCodeandSysJudgeCodeto prevent recycling failures caused by serialization issues
- Fixed
-
JURYSVC-94 / JURYCLOUD-80 — Trial Panel Numbers Shown in App Do Not Match On All Screens (d308209f)
PoolGroupMembersCheckedInGridnow displays the panel number instead of the internal panel IDPanelDetailViewpanel references are now clickable links to the correspondingPanelDetailview
Improvements
-
JURYSVC-92 / JURYCLOUD-81 — Spring UI: Dev 6.0.5 vs. Test 5.6.7 (3193b740)
- Standardized padding and spacing across the UI using
LumoUtility - Refactored layout and component styles in
JurorsSummoned,JurorNotifications,JurorRequests, andVoucherMainViewfor consistency - Introduced reusable grid constants for styling
- Standardized padding and spacing across the UI using
-
JasperReports loader fallback refactor (f3b1b3eb)
- Extracted
installJacksonReportLoaderFallbackfor clearer fallback handling in nested JAR environments - Introduced
JacksonReportLoaderFallbackRegistryfor modular, consistent extension discovery - Added a
loadJasperDesignmethod for direct JRXML loading viaJacksonReportLoader, with clearer error diagnostics
- Extracted
-
Vaadin push tenant context recovery (ae8cd1c9)
- Added session-based tenant ID resolution (
resolveTenantId) with a fallback path inConfigureUIServiceInitListener TenantContextcan now recover the tenant from the Vaadin session when push RPCs bypass the normal request path
- Added session-based tenant ID resolution (
-
JURYSVC-96 / JURYCLOUD-78 — "Juror Name Change" activity for new tenants (80ee6519)
- Corrected the new-tenant Liquibase changelog so the
JUROR_NAME_CHANGEactivity code is seeded for newly provisioned tenants, not just existing ones
- Corrected the new-tenant Liquibase changelog so the
-
Documentation — added
RELEASE_NOTES_JIRA.mdandRELEASE_NOTES_JIRA.htmlas a support-facing, ticket-indexed companion to this document (fa341ec6, 972b55d1)
Version 6.0.6
Release Date: July 9, 2026
Bug Fixes
- JURYSVC-99 / JURYCLOUD-79 — Unable to undo Call Offs in JuryFlex (ddf86999)
- Adjusted
PoolMemberExtendedServicevalidation for exempt code comparison so a call-off can be undone correctly
- Adjusted
Improvements
-
JURYCLOUD-78 / JURYSVC-96 — Juror Name Change activity (c758149e)
- Added the "Juror Name Change" activity to
sys_activity_codefor all non-default tenants via Liquibase changeset202603080000001_add_name_change_sys_activity.xml - Increased retry max attempts to 75 and decreased juror file processor parallelism to 1 in production config
- Added the "Juror Name Change" activity to
-
Security scan documentation (f0071b3b)
- Documented known Vaadin Flow scanner false positives in
CLAUDE.md - Added a
form-actiondirective to the Content Security Policy
- Documented known Vaadin Flow scanner false positives in
-
Security headers (517ccb93)
- Integrated
JHipsterPropertiesfor dynamic CSP configuration - Added Strict-Transport-Security, Referrer-Policy, and X-Content-Type-Options headers in
VaadinSecurityConfiguration - Updated the
frame-ancestorsCSP directive
- Integrated
-
.gitignore— excluded thesecurity-scans/directory from version control (60b33580)
Version 6.0.5
Release Date: June 15, 2026
Bug Fixes
- JasperReports in nested JAR environments (fcad846c)
- Installed
JacksonReportLoaderso report compilation works correctly when the application is packaged as a nested (Spring Boot fat) JAR - Added a default password placeholder in the production config template
- Installed
Version 6.0.4
Release Date: June 15, 2026
Changes
- Removed a deprecated HTTP cache configuration property from
application-prod.yml(ac714350)
Version 6.0.3
Release Date: June 15, 2026
Deployment & Configuration
-
Unified prod/cloud configuration (53cf6e67)
- Consolidated
application-prod.ymlandapplication-cloud.yml, externalizing all remaining environment variables - Hardened security defaults and added deployment templates:
northflank-env.templateandjuryflex-service.xml(Windows Service definition)
- Consolidated
-
Docker support (9c30916c, 3a853b43)
- Added
application-docker.ymlfor streamlined Docker deployments behind a reverse proxy - Updated Docker Compose logging profile and
.env.examplefor the newdockerprofile - Removed Hibernate dialect and UUID JDBC type overrides that were unnecessary for the Docker profile
- Added
-
Build workflow (e90ebd05, 80c395c1, e5f578c3)
- Enabled Gradle caching in the multi-arch build workflow and removed a redundant
cleantask from the Buildpacks image build - CORS filter now supports
allowedOriginPatternsalongsideallowedOrigins - Externalized server port configuration and removed redundant conditional checks from the workflow
- Enabled Gradle caching in the multi-arch build workflow and removed a redundant
Version 6.0.2
Release Date: June 12, 2026
Features
- JURYCLOUD-75 —
SrApplicationPropertiesadmin UI (a8dace82)- New
SrApplicationPropertiesentity with a dedicated sequence, seeded with default data and tenant-specific initialization via Liquibase - Read/write service and extended service implementation
- New admin view (
sr-application-properties-admin) under the "Summons Ready" navigation section
- New
Improvements
- JURYCLOUD-76 — Indexing (8942e5d4)
- Added indexes for the
juror_historyandpool_membertables via Liquibase changeset202606110000002_added_indexes_for_sr.xml
- Added indexes for the
Security
- JURYCLOUD-77 — Security scan findings (a722844f)
- Enabled CORS handling on the Vaadin security filter chain and documented why
/api/**and/VAADIN/pushare exempted from CSRF protection - Hardened
application.yml,application-prod.yml, andapplication-cloud.ymlsecurity settings - Added the v6.0.0 Burp Suite scan report and markdown summary under
security-scans/JuryFlex_v6/for audit traceability
- Enabled CORS handling on the Vaadin security filter chain and documented why
Version 6.0.1
Release Date: June 10, 2026
Changes
- Added
Content-Dispositionheaders toStreamResourceinstances inTrialPanelReportsView,DownloadStatewideFileHelper, andSrMessageGridfor consistent file-download behavior across browsers (002f7507)
Version 6.0.0
Release Date: June 2026
Major Infrastructure Upgrades
This release marks a significant platform upgrade across all core framework dependencies. The major version bump reflects breaking changes at the framework level that require coordinated migration steps (see Configuration Changes and JasperReports sections below).
| Component | Previous | Current |
|---|---|---|
| Spring Boot | 3.5.x | 4.0.6 |
| Vaadin | 24.x | 25.1.5 |
| Hibernate | 6.x | 7.2.12.Final |
| Spring Cloud | — | 2025.1.1 |
| Liquibase Schema Version | 3.9 | 4.6 |
Additional framework-level changes:
VaadinTaskExecutor— new bean introduced inAsyncConfigurationfor Vaadin-managed async tasks (f4e2f87c)- Lit Templates removed — all Lit/TypeScript frontend component templates converted to pure Java Vaadin Flow views (9628f6fa)
- Lumo theme — no longer loaded automatically; replaced with explicit CSS imports via
vaadin-theme(b6b84e4a) - JHipster BOM removed — replaced with standalone utility classes:
ApplicationConstants,DefaultProfileUtil,ExceptionHandlingAsyncTaskExecutor,HeaderUtil,JHipsterProperties,LoggingUtils,PaginationUtil,RandomUtil,ResponseUtil,SpringLiquibaseUtil(520ed84a)
JasperReports 7 Migration
Action required for all environments. All 30 report templates have been migrated to JasperReports 7 format. Ensure the extension modules listed below are on the classpath before building.
Template migration (ba49236a): Every .jrxml file in src/main/resources/jasper/ updated to the JR7 XML schema. This affects all 30 templates: summons letters, payroll reports, seating charts, quarterly performance measures, panel records, and more.
Barcode element syntax change (9617b939): The barcode component namespace changed in JR7. Any custom templates maintained outside this repository must be updated:
<!-- Before (JR6 / short form — no longer valid) -->
<jr:Code39 .../>
<!-- After (JR7 — fully qualified barcode4j namespace required) -->
<barcode4j:Code39 .../>
New Gradle extension modules (b9aa615c, 6bf75840) — required for barcode rendering:
implementation 'net.sf.jasperreports:jasperreports-barcode4j:...' // barcode4j integration
implementation 'net.sf.jasperreports:jasperreports-barbecue:...' // additional barcode/layout support
Template cleanup (9cf1dad2): removed unused static text elements from several templates to reduce rendering overhead.
Compiled
.jasperfiles are automatically deleted beforecompileJavaby thedeleteJasperFilesGradle task. Never commit.jasperfiles.
Database
- PostgreSQL support (e12710b2) — PostgreSQL is now a supported cloud database.
- Juror file bulk loading via PostgreSQL COPY (e6e0ff78) — native bulk insert for
juror_master_stageeliminates entity lifecycle overhead during large DHSMV file loads.
Features
-
JURYCLOUD-70 — Notification System & API Key Authentication (827fefb1, 12a1bfcc, 46c5992c, 10a3843d)
SysApiKeyentity and admin view for managing API keys per tenant- API key authentication resolves to real
UserDetailsauthorities fromDomainUserDetailsService - Real-time Summons Ready notification bell in the app bar via Vaadin Push
SrMessageGridfilter panel; "Include Replied Requests" renamed to "Show Processed Requests"
-
JURYCLOUD-71 — Deny Excusal/Reschedule (a6b473ba)
- Administrators can now deny a juror's request for excusal or reschedule from the SR message grid
- Denial reason is stored and surfaced in the reply letter
-
sendSummonedBulk Messaging (66bb7844)SrMessageService.sendSummoned()sends notifications to all jurors on Summons Ready for a pool- Pool creation now automatically triggers summons notifications
- New
summoned.htmlemail template and i18n messages added
-
JurorFileBatchCompleteEvent (3368f2ec)
- Fires after each DHSMV load completes; triggers automatic non-in-county zip cleanup
-
Juror Notification UI Improvements (74276b16)
JurorNotifications: dynamic send-button state and field-level change listenersNotificationBell: tenant context correctly restored on dismissalJurorRequests: fallback to hostname-based tenant resolution when session context is unavailable
Security
- OAuth2 removed — the Azure AD / OAuth2 client configuration block is removed from
application.yml. (050c8545) VaadinSecurityConfigurationrefactored — migrated from deprecatedWebSecurityconfigurers to theVaadinSecurityConfigurerAPI (e646fa4f, 050c8545)- API key strict validation —
ApiKeyAuthenticationFilterloads real authorities fromDomainUserDetailsServiceand enforces stricter key-owner validation (46c5992c) - Circular serialization fixes —
@JsonIgnoreadded tojurorMastersinSysCountyCodeand relationships inPaymentMemberto prevent serialization stack overflows (88f1ec16, 6d27d234)
UI & Quality Improvements
- Layout refactoring — pool, panel, and payment views updated with
addSeparator()in submenus and consistent flex-based height distribution (c90b7c5a, 18f9e536, a1cf1bb3) - Home Page — query performance optimized; layout configuration cleaned up (f92e4e91)
SysApplicationPropertiesFormView— missing seal/signature images replaced with placeholder icons; error handling added for save operations (3dcf9c18, 1344723f)- Payment card — cleared automatically when employer-paid status changes (639a369f)
CheckInJurorsDialog— focus handling improved (917a6cce)- Panel Attendance view — refactored and caching corrected (d3554cd3)
- Pool detail view — responsiveness improvements (cdfe4ae4)
- Payment creation — optimized to reduce redundant service calls (1a3c00fc)
SysStatusTyperemoved — entity, repository, service, and all references deleted (f194324c)RandomMaster— dependencies onPanelMasterandPoolMasterremoved to eliminate circular load ordering (6eef55a1)Optional.get()eliminated — replaced throughout withOptional.orElseThrow()for safer null handling (43d161ec)- Data Generation Utility —
__pycache__/added to.gitignoreforgenerate_juror_file_stage.py(f064395b)
Configuration Changes
Action required for production deployments. Several properties changed package names or were removed as part of the Spring Boot 4 migration. Review each table below and update
application-prod.ymlaccordingly.
src/main/resources/config/application.yml
| Property | Before | After | Notes |
|---|---|---|---|
spring.jpa.properties.hibernate.batch_versioned_data |
(absent) | true |
Enables batch updates for versioned entities |
spring.jpa.hibernate.naming.implicit-strategy |
org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy |
org.springframework.boot.hibernate.SpringImplicitNamingStrategy |
Package moved in Spring Boot 4 |
spring.task.scheduling.thread-name-prefix |
juryflex-scheduling- |
juryflex-sched- |
Shortened for log readability |
spring.servlet.multipart.max-file-size |
65MB |
250MB |
Supports larger juror file uploads |
spring.servlet.multipart.max-request-size |
65MB |
250MB |
Matches above |
jhipster.mail.from |
jgulisano@gmail.com (hardcoded) |
${MAIL_FROM:jgulisano@gmail.com} |
Now environment-variable driven |
spring.security.oauth2.* |
Azure AD OIDC client block | Removed entirely | OAuth2 authentication dropped |
jhipster.security.oauth2.audience |
present | Removed entirely | No longer needed |
src/main/resources/config/application-dev.yml
| Property | Before | After | Notes |
|---|---|---|---|
logging.level.ROOT |
INFO |
WARN |
Reduce framework noise in dev logs |
logging.level.com.corrus.juryflex |
INFO |
DEBUG |
Full application debug output in dev |
spring.datasource.url |
jdbc:postgresql://rocky-db.corrus.local:5432/devjuryflex |
jdbc:sqlserver://rocky-db.corrus.local:1433;database=devjuryflex;encrypt=false |
Switched back to SQL Server for local dev |
spring.datasource.username |
postgres |
corrus |
Matches SQL Server credential |
server.servlet.session.cookie.* |
(absent) | Added as commented-out block | Template for future cookie tuning (same-site, secure, domain) |
jobs.deceased-process.cron |
0 0/15 * * * * |
0 0/59 * * * * |
Runs less frequently in dev |
jobs.juror-file-process.enabled |
true |
false |
Disabled by default in dev |
jobs.juror-file-process.cron |
0 0/2 * * * * |
0 0/59 * * * * |
Slowed for dev when manually enabled |
src/test/resources/config/application.yml
No changes since v5.6.7. Settings remain stable.
Version 5.6.7
Release Date: June 4, 2026
Bug Fixes
-
SrMessageService: Replace
orElseThrow()withorElseGet(SysExemptCode::new)onSysExemptCodelookup to prevent NPE when an exempt code does not exist (55054a7) -
SrMessageGrid: Remove invalid in-memory comparator on the "Excusal Reason" column that caused sort failures when exempt codes were null or empty (55054a7)
Version 5.6.6
Release Date: June 4, 2026
Improvements
- PoolMemberConversionService – Preload & Deduplication Refactor (55dafda4)
- Moved excusal data loading to a single upfront query (
loadExcusalsForPool()) instead of one database query per juror, significantly reducing database round-trips during conversion - Added
ROW_NUMBER() OVER (PARTITION BY a.juror_id ORDER BY a.juror_pool_id)to handle duplicate jurors in the same pool (addresses the DeSoto County scenario), ensuring only the first occurrence is processed - Moved
SysActivityCodelookups intoprocessExcusal()for better encapsulation and reduced unnecessary service calls - Replaced raw
booleancomparisons withBoolean.TRUE.equals()for null-safe evaluation - Reload
JurorMasterfrom the database before updating reschedule dates to prevent stale-data overwrites when a juror is already rescheduled in an earlier pool
- Moved excusal data loading to a single upfront query (
Version 5.6.5
Release Date: June 3, 2026
Bug Fixes
- PoolMemberConversionService – Regression Fix (7733fd63)
- Fixed operator-precedence bug in the excusal-denied log message where a null check on
reason_descriptionwas never evaluated due to string concatenation precedence; pre-evaluate the value before embedding it in the message - Improved error logging to include
jurorIdandsourcePoolcontext when excusal processing fails, making failures easier to diagnose
- Fixed operator-precedence bug in the excusal-denied log message where a null check on
Improvements
- PoolMemberConversionService: Move
SysActivityCodelookups intoprocessExcusal()(from the outer pool loop) to reduce unnecessary service calls (d13f48f0)
Version 5.6.4
Release Date: May 22, 2026
Improvements
- JURYCLOUD-74: Update pool master conversion query ordering and reduce dev logging verbosity (e6f585b)
- Updated query in
PoolMasterConversionServiceto order results byreporting_dte_tme ASC, ensuring pools are converted in chronological reporting order
- Updated query in
Version 5.6.3
Release Date: May 4, 2026
Improvements
- JURYCLOUD-72: Optimize database queries and caching for juror and pool member conversions (3f9c02e)
- Introduced pre-loading of juror and pool member data into in-memory maps to reduce per-record database queries during conversion
- Added caching for frequently accessed entities in
SourceConvertService,PoolMemberConversionService,PanelMemberConversionService, andCivitekSourceConversionService - Updated
JurorMasterExtendedServicewith new utility methods for bulk data retrieval and mapping
Version 5.6.2
Release Date: April 22, 2026
Changes
-
JURYCLOUD-68: Show excusal reason in SR message grid (b8d00cd)
- Added excusal reason column to the SR message grid in
SrMessageGrid - Updated
SrMessageServiceandSrMessageDTOMapperto populate and map the excusal reason field - Adds Liquibase migration
202604150000001_sr_excuse_code.xml
- Added excusal reason column to the SR message grid in
-
PaymentMember: Extend
@JsonIgnorePropertiesonPaymentMemberentity to prevent serialization issues (c3c4a70)
Version 5.6.1
Release Date: April 12, 2026
Major Features
-
JURYCLOUD-61: DHSMV Load Optimization – CRC32-based change detection and batch processing performance improvements
- Introduces
JurorHashUtilto compute CRC32 hashes for juror records; storesjuror_hashon bothJurorMasterandJurorMasterStageentities - Implements hash-based filtering in
JurorFileUpdateExtendedServiceto skip unchanged records during batch updates - Adds lightweight ID-only keyset pagination (
findTopNIdsAfterId) to advance the batch cursor without loading full entities - Adds hash-filtered fetch (
findChangedInIdRange) to retrieve only new, changed, or inactive jurors per batch window - Introduces deferred batch mode in
JurorHistoryExtendedServiceto buffer history writes and flush at chunk boundaries - Implements
JurorMasterStageBatchInserterfor bulk JDBC inserts into the stage table, eliminating entity lifecycle overhead - Pre-fetches juror records to improve DL number change handling and retries deceased processing logic (ae3c4c5)
- Re-enables juror file stage deletion after hash testing completion (8fc2471)
- Introduces
-
JURYCLOUD-59: Juror Name Change Tracking and Multi-Tenant Admin Views
- Adds
JUROR_NAME_CHANGE(60L) activity constant for auditing juror name changes - Updates juror update process to detect name changes, prioritize update actions, and log related history entries
- Adds "tenant-zero" admin views to monitor juror update history across all tenants
- Switches data normalization to use nulls for empty fields and refactors code for readability (3b841d0, 1791a119)
- Adds
-
JURYCLOUD-60: Fix appearance date not passed into
ReportRequestfor Call-Off Letter (2ed4564)- Bumps version from 5.5.10 → 5.5.11
Improvements
-
GL Payment Exports: Migrates GL export mappings from inline JSON to a dedicated database table (a21d3f6)
- Removes the inline JSON editor from
SysApplicationPropertiesFormView - Adds Liquibase migration
202603310000001_default_export_donation_mapping.xml - Adds row numbering and juror address details to GL export output
- Fixes donation GL account assignment and vendor mapping in
PaymentMemberService
- Removes the inline JSON editor from
-
Juror Check-In: Renames check-in confirmation properties and introduces an optional second confirmation dialog (0d4b777)
-
Logging – Grafana/Loki Monitoring: Adds Docker Compose stack for log monitoring with Grafana and Loki (aca38bb)
- Includes Promtail, Loki, and Grafana provisioning configs
- Adds multi-tenant SQL performance and batch processing dashboards
- Includes setup scripts and architecture documentation under
docker/
-
Bug Fix: Fix juror first name mapping in
JurorMasterExtendedServiceto use VM-provided value instead of incorrect field (f743d80)
Configuration Changes
Note: The following changes apply to
application.ymlandapplication-dev.yml. Production environments (application-prod.yml) are unaffected unless otherwise noted.
application.yml
- Scheduling thread name prefix shortened:
juryflex-scheduling-→juryflex-sched-(ce3860e)yaml spring: task: scheduling: thread-name-prefix: juryflex-sched- # was: juryflex-scheduling- - Tenant context added to MDC:
TenantInterceptor,TenantContext, andTenantAwareTaskDecoratornow set/clear atenantMDC key so the tenant identifier is included in all log output for multi-tenancy traceability (ce3860e)
application-dev.yml
- Deceased processor retry settings added (ce3860e)
yaml deceased: retry: max-attempts: 50 retry-delay: 200 retry-multiplier: 2.0 retry-max-delay: 45000
Version 5.5.10
Release Date: March 4, 2026
Changes
- Tenant Creation: Add default location to new tenant provisioning
- Adds a default "Jury Assembly Room" record to the system location codes template used for new tenant provisioning (8db2b2b)
- Bump version to 5.5.10
Version 5.5.9
Release Date: February 25, 2026
Major Features
- JURYCLOUD-56: Implements the ability to void one or more panel members from a panel (9ed0131)
- Introduces
priorLastSummonsDt,priorLastServeDt, andpriorReschedDtfields to PoolMember to store original juror master dates - These fields are set upon pool member creation and during check-in to facilitate state restoration
- Enhances the
undoCheckInprocess to accurately restore juror master service dates using the newly introduced prior dates - Integrates a dedicated confirmation dialog in the UI to guide users through the voiding process
- Ensures comprehensive cleanup of related entities, including:
- Nullifying panel member references in juror history
- Deleting associated panel member days
- Updating pool member status
- Decrementing panel juror counts
- Adds a new activity constant (
JUROR_VOIDED_FROM_PANEL) for auditing this operation - Refines the juror history grid to prevent null pointer exceptions when a panel member reference is no longer present
- Introduces a
saveWithoutChecksmethod in PoolMemberExtendedService for specific transactional requirements
- Introduces
Bug Fixes
- JURYCLOUD-57: Unable to undo panel removal (25e662a)
- Fixed issue in PanelMemberExtendedService
Version 5.5.8
Release Date: January 24, 2026
Changes
- JURYCLOUD-55: Prevent duplicate pool members for DeSoto County in the conversion
- Bump version to 5.5.8
- Build v5.5.8
Version 5.5.7
Release Date: January 20, 2026
Changes
- JURYCLOUD-54: DeSoto County Summons: QR Code
- Add QR Code support via Barcode4J and ZXing libraries, and bump version to 5.5.7
- Build v5.5.7
Version 5.5.6
Release Date: January 11, 2026
Changes
- JURYCLOUD-53: Fixed juror's suffix not being converted in automated load (fe23d3c, 7395b27)
- Build v5.5.6 (260f1e8)
Version 5.5.5
Release Date: January 6, 2026
Changes
- JURYCLOUD-53: Fixed juror's suffix not being converted in automated load (7395b27)
Version 5.5.4
Release Date: January 2, 2026
Changes
- JURYCLOUD-52: Added
bvsIdfield toSysCountyCode, updated bindings and references, and introduced Liquibase migration (f8e90d2)
Version 5.5.3
Release Date: January 2, 2026
Changes
- JURYCLOUD-51: Fixed DMV Load duplicate history entries (834be01)
- JURYCLOUD-34: Fixed tenant leak and added payment breakdown (304c0c3)
Version 5.5.2
Release Date: December 22, 2025
Changes
- JURYCLOUD-50: Update tenant reports on application startup
- Refactored: Renamed
is_system_defaulttosystem_defaultthroughout project and updated related references (0e53d50)
- Refactored: Renamed
Version 5.5.1
Release Date: December 22, 2025
Changes
- JURYCLOUD-50: Update tenant reports on application startup (4680bb0)
Version 5.5.0
Release Date: December 19, 2025
Major Changes
-
JURYCLOUD-40: Jury Quarterly Report – Quarterly Update
- Refactored
PerformanceMeasuresReportandPerformanceMeasuresMetricRowtoQuarterlyPerformanceReportandQuarterlyPerformanceMetricRow - Enhanced data model with additional fields for detailed reporting
- Adjusted Jasper report template for updated metrics
- Incremented project version to 5.5.0 (5799b3f)
- Refactored
-
JURYCLOUD-41: Article V Performance Measures Report (45eaf1f)
-
JURYCLOUD-43: Adjusted text field width and alignment to prevent DL number truncation in Venire Facias template (eaea73e)
-
JURYCLOUD-46: Pool ID Display Inconsistency
- Print Juror Summons Refactor: Renamed
idtopoolNumberin Juror Summons View and updated related bindings and log messages (de0995b)
- Print Juror Summons Refactor: Renamed
-
JURYSVC-33: JuryFlex Statewide Grand Jury Export
- Enhanced
EntityGraphinPoolMemberExtendedRepositoryto includejurorMaster.sysCountyCode - Updated
StatewideGrandJuryDTOMapperwith corrected county and ZIP code assignment logic - Renamed
execDownloadtoexecuteStatewideFileDownloadfor clarity inDownloadStatewideFileHelper - Cleaned up unused imports and redundant logic in
PoolReportsFlowView(de9ee98)
- Enhanced
Improvements
- Updated sys_report_artifact insert query to set
is_system_defaultto 1 for new tenant migrations (f602aad) - WIP - Concurrent Load (8839a6a)
Version 5.4.3
Release Date: December 2, 2025
Changes
- Build v5.4.3 (36b8636)
Version 5.4.2
Release Date: December 2, 2025
Changes
- Removed db/schema name from query (2ed6a03)
Version 5.4.1
Release Date: December 2, 2025
Changes
- Fixed GitHub Action (621fa0f)
Version 5.4.0
Release Date: November 2025
Required Configuration Changes
Updates are required for two configuration files. These modifications have already been applied to the Development and Test environment.
1. File: application-prod.yml
Action: Add the following properties after the section labeled:
# ===================================================================
# Application specific properties
# Add your own application properties here, see the ApplicationProperties class
# to have type-safe configuration, like in the JHipsterProperties above
#
# More documentation is available at:
# https://www.jhipster.tech/common-application-properties/
# ===================================================================
Action: Add the following section:
# The following properties are used by the DeceasedProcess to determine how often to run.
jobs:
deceased-process:
enabled: false
cron: 0 45 * * * *
zone: UTC
juror-file-process:
enabled: false
cron: 0 0 * * * *
zone: UTC
#The following properties are used by the DeceasedProcessor to determine how many tenants to process at a time.
deceased:
processor:
parallelism: 1
queueCapacity: 200
lock-at-most-for: PT10H
lock-at-least-for: PT10S
#The following properties are used by the JurorFileProcessor to determine how many tenants to process at a time.
juror-file:
processor:
parallelism: 3
queueCapacity: 200
lock-at-most-for: PT10H
lock-at-least-for: PT10S
update-batch-size: 250 #match with hibernate.jdbc.fetch_size
retry:
max-attempts: 50
retry-delay: 200
retry-multiplier: 2.0
retry-max-delay: 45000
2. File: application.yml
Action: Modify the existing properties after the section labeled:
# ===================================================================
# Application specific properties
# Add your own application properties here, see the ApplicationProperties class
# to have type-safe configuration, like in the JHipsterProperties above
#
# More documentation is available at:
# https://www.jhipster.tech/common-application-properties/
# ===================================================================
# application:
juryflex:
show-test-banner: true
brand-expression-logo: juryflex_logo_full_color_rgb_247px@72ppi.png
brand-expression-logo-min: brand-expression-logo-300px.png
brand-expression-title: JuryFlex
brand-expression-use-title: false
brand-expression-appbar-test-logo: testEnvLogoV2.png
brand-expression-appbar-logo: prodEnvLogo.png
master-tenant: tenant-zero
Major Features
- JURYCLOUD-18: Process BVS file (WIP) (cc468cf)
- JURYCLOUD-10: Automate DHSMV loads (ce0dd6f)
- Added county_id to tenant master (ce0dd6f)
- Renamed county if to dhsmv id in staging table (09e1c51)
- Added additional address lines for future imports (b5c57fa)
- Fixed dropped city column by mistake (ded37a4)
- Added debugging output (7c7a7c4)
- Don't allow duplicate dl_num in file stage (2b4d9d9)
- Fixed bug in repo delete statement (22f03b5)
- Removed debug filtering of tenants (81ef70d)
- Reduced info logging (5f15b05)
- Cleanup and use param properties (fa13ad4)
- Final changes to feature (de62682)
GitHub Actions & CI/CD
- GitHub Action - Create Release (5f8e093)
- Multiple GitHub Action improvements and fixes (e5cc306, 3c6a0822, 213031b, 18909a9, f5f380d, 1188861, 5724b36, 3027673)
- Fixed GitHub Action (8552c93)
- Cleaned up gradle build file (db9b467)
- Added action comment (68ce933)
- Renamed action file (d88af10)
- Allowed action to run on branches (61f5a99)
- Provided Vaadin License (5853b66)
- Fixed action script (d262be4)
- Allowed manual workflow trigger (97b1ee4)
- Added diagnostic step (6e0fab1)
- Renamed Vaadin offlinekey (eda6262)
- Added access token to GH Secrets (2cb607d)
- Removed arm64 from GitHub Action (d5a6ff2)
Improvements
- Updated the header logo and cleanup (57da9c2)
- Added activity code to track BVS excusals (da3c7ea)
- Configured job to run every 20 minutes (e829da8)
- Allowed access to management endpoints (2cb607d)
Summary Statistics
Total Releases: 33 releases (5.4.0 through 6.1.1)
Release Period: December 2025 - October 2026
Major Features: Spring Boot 4 / Vaadin 25 / Hibernate 7 platform upgrade, JasperReports 7 migration, PostgreSQL support, DHSMV automation, BVS file processing, Quarterly reports, Statewide Grand Jury export, Void Panel Member functionality, CRC32 hash-based juror change detection, GL export mapping migration, Grafana/Loki log monitoring, API key authentication, real-time push notifications, sendSummoned bulk messaging, conversion query optimization and caching, pool member conversion preload and deduplication, SrApplicationProperties admin UI, unified prod/cloud deployment configuration with Docker support, CORS and CSP security hardening, API-based DMV/BVS load processing, additional seating chart layouts, automated MkDocs release-notes site, bundled Liberation Sans report fonts, per-tenant report image library, report text field macros
Bug Fixes: 22 major bug fixes (JURYCLOUD-34, 43, 46, 51, 52, 53, 55, 60, 78, 79, 80, 82, 85, 87, 93, 94, 98, 102, 106, panel removal fix, SrMessageService NPE, PoolMemberConversionService regression)