For a brief overview of the changes, see our Release notes.
For information on upgrading from previous versions, see the
Migration guide.
2026-07-09
Changed
- SO-1110: Loading sign-off definitions no longer scans the workflow audit-log tables once per definition. Their history is now bulk-loaded for the required keys in a bounded number of queries, significantly improving performance when many definitions exist.
- SO-1122: The return type of
ISignOffWorkflowStatusActionManager::getPendingApprovalTaskStatuseschanged from aList<String>to aMap<String, List<String>>keyed by workflow type, because the pending-approval status differs per workflow. If you have implemented your own statuses you will need to change the type. See the migration guide for details. - PIVOT-14106 Improved performance of audit history filtering.
Fixed
- LIM-2319: Fixed notifications breaking after running for several hours, where streaming the stored notifications for a new subscriber while another thread published could fail with
IllegalStateException: Accept exceeded fixed size. The notification store is now backed by a concurrent map. - SO-1122: Fixed the “Pending Approval” column on the Sign-Off Task Configuration screen always showing
0for tasks created with the simple workflow. The simple workflow’s awaiting-approval state isINITIATED, but the count only consideredPENDING(the awaiting-approval state for four-eyes workflows). Simple-workflow tasks awaiting approval are now counted correctly.
2026-06-18
Fixed
- SO-1121: Task-only approvers (users in the workflow instance approvers group but not in the definition
candidateGroups) no longer receive an HTTP 403 on the SSE subscribe endpoint (GET /sign-off/rest/v2/sse/subscribe) or when opening the process task approval window. The dashboard now loads correctly for users who can approve tasks but do not manage definitions. - SO-1119: Adjustment execution and deletion failures were silently swallowed, leaving the execution stuck in a non-terminal status (
PENDING/DELETING). Uncaught exceptions are now logged with their stack trace and the execution is markedFAILED. - SO-1116: Adjustment audit records written by the status poller stored the
executionIdin thedefinitionIdfield, breaking definition-based audit queries and correlation. ThedefinitionIdis now persisted correctly.
2026-06-17
Added
- SO-1118:
POST /sign-off/rest/v2/adjustmentsandPOST /sign-off/rest/v2/adjustmentnow return the identifiers of the created adjustments (id,executionId, anddefinitionId), in request order, so that clients can track the execution status of each adjustment.
Changed
- SO-1118:
IAdjustmentService::createAdjustmentandIAdjustmentService::createAdjustmentsnow return the identifiers of the created adjustments instead ofvoid.
Fixed
- SO-1118:
ISignOffAdjustmentExecutionService::requestAdjustmentExecutionsAndPersistDefinitionsreturned an empty list instead of the created adjustment executions.
2026-05-28
Changed
Group IDs of dependencies have changed and must be updated. See the migration guide for more details.Fixed
- SO-1082: Fixed SignOff task getting stuck at
EXPORTINGdue to a race condition where the export status poller could check the workflow instance state before the export details were persisted. - SO-1090: JPA rollbacks not being handled correctly.
- SO-1111 Dashboard: Fixed the dashboard becoming unusable when the Sign-off server is unavailable.
- SO-1112 Dashboard: Fixed widget type switching not working in the adjustment analysis dashboard.