For a brief overview of the changes, see our Release notes.
For information on upgrading from previous versions, see the
Migration guide.
2026-08-13
Changed
- SO-1138: Opening the Definitions, Tasks and Task Configuration screens no longer queries the workflow engine once per definition and per task. The running workflow instances, their workflow actions, their variables, their current tasks, their audit history and the adjustment executions are now resolved upfront in a bounded number of queries, significantly improving screen loading times when the databases are reached over the network.
- PIVOT-14310: The dashboard SSE subscription (
GET /sign-off/rest/v2/sse/subscribe) and the notification service SSE subscription now carryX-Accel-Buffering: noandCache-Control: no-cache, no-transformso that reverse proxies do not buffer or compress the event stream. A buffering proxy delivers the sign-off and notification updates only when the stream ends.
Fixed
- SO-1144: Transactional CRUD operations no longer spawn many new threads when viewing the screens in realtime mode. The max number of threads are sized by the new
sign-off.application.sse-executor-pool-sizeproperty (default8). - SO-1144: Opening many screens at the same time no longer leaves some of them without their initial data until the page is reloaded.
2026-07-10
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-09-07
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 notes 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.
2026-04-16
Fixed
- SO-1073: Memory leak issue when performing bulk adjustment executions that caused increased memory usage over time.
- SO-1089: Filtering by integers when creating adjustment dashboards.
2026-01-23
Added
- SO-1005: Added new
BulkAdjustmentExecutorin the application server for processing bulk adjustment execution logic. - SO-1006: Added a new
BulkTaskCompletecommand that is used to execute Activiti tasks in bulk. - SO-1006: Added a new method
ISignOffAdjustmentExecutionService::requestAdjustmentExecutionsAndPersistDefinitionsto request adjustment executions in bulk. - SO-1006: Added a new method
IAdjustmentsDefinitionCacheService::saveAllto save adjustment definitions in bulk to the datastore cache. - SO-1006: Added a new method
IAdjustmentsExecutionCacheService::saveAllto save adjustment executions in bulk to the datastore cache. - SO-1006: Added a new method
IAdjustmentExecutionService::bulkExecuteand a corresponding REST endpoint/adjustments/bulk-executeon the application server to execute adjustments in bulk on the application server. - SO-1006: Added a new method
ISignOffAdjustmentValidator::validateSignOffAdjustmentsCreationto validate adjustments in bulk when they’re created. - SO-1006: Added a new method
ISignOffAdjustmentValidator::validateSignOffAdjustmentsUpdateto validate adjustments in bulk when they’re updated. - SO-1006: Added a new method
IKeyedObjectService::createAllto create persistent objects in bulk. - SO-1006: Added a new method
IAuditLogService::saveUserTaskRecordsto save user task records in bulk. - SO-1006: Added a new method
IAuditLogService::saveProcessRecordsto save process records in bulk. - SO-1013: Added the ability to save multiple adjustment types at once.
- SO-1020: Added optional query parameter
objectTypesto the Server-Sent Events (SSE) subscription endpoint to allow for filtering events by object types. - SO-1020: Added new API methods in
ISseEmitterServiceto broadcast task and adjustment events. - SO-1020: Added new API method
ISignOffTaskService::getFilteredTasksto retrieve tasks that match specified field conditions. - SO-1020: Added new REST endpoint
/sign-off/rest/v2/tasks/filterto retrieve tasks matching specified definition criteria. - SO-1020: Added new API methods in
ISignOffTaskto get definition information associated with the task. - SO-1030: Added performance improvements that reduce the time to initiate and fetch tasks as the application data grows.
- SO-1060: Added properties to configure custom statuses for definitions and tasks. The properties are used in
DefaultSignOffWorkflowStatusActionManager.
Changed
- SO-913: Moved all tests from the
signoff-startermodule to a dedicated test modulesignoff-application-teststo reduce migration efforts and improve maintainability. - SO-952: The default history level of activiti has changed from
fulltoaudit. - SO-1002: New streamlined task and adjustment processing flow within the dashboard.
- SO-1020: Updated endpoints to subscribe and unsubscribe to Server-Sent Events (SSE) to remove
/definition/from the URL path. - SO-1020: Renamed
ISseEmitterServiceAPI methodssubscribeToDefinitionsandunsubscribeToDefinitionstosubscribeandunsubscriberespectively. - SO-1020: Renamed
SignOffDefinitionSseControllertoSignOffSseController. - SO-1020: Renamed
SseDefinitionEmittertoSignOffSseEmitter. - SO-1031: Upgraded Atoti Server to version 6.1.15.
- SO-1031: Upgraded Common Parent POM and Common Dependencies BOM to version 2.4.0.
- SO-1034: Released code is now formatted using the Spotless maven plugin with the Palantir Java Format.
- SO-1044: Adjustments are now only allowed in the cube if there is a selected task and if the user is authorized to make adjustments.
Fixed
- SO-961: Fixed an issue where instances of the Sign-Off server running longer than 12 hours would fail to connect to the application server.
- SO-1001: Fixed an issue where users could not access adjustment tasks if they did not have permission to interact with the associated definition’s workflow.
- SO-1017: Fixed an issue in the task definition creation screen where an error is sometimes thrown for slow-loading cubes.
- SO-1019: Fixed an issue in the tasks screen where the validity dates of an adjustment were not shown in real-time mode.
- SO-1024: Fixed an issue where task histories weren’t being returned in the audit after the task was restarted.
- SO-1030: Fixed an issue where initiating tasks became slower as more tasks were created.
- SO-1033: Fixed an issue where tasks could not be initiated on a definition’s end date.
- SO-1057: Fixed an issue where hard-coded completion statuses were used for tasks instead of the ones configured on the server.
- SO-1066: Fixed an issue where invalid workflow actions were being displayed in the process task drawer.