For a brief overview of the changes, see our Release notes.
For information on upgrading from previous versions, see the
Migration guide.
2026-09-29
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests.
Changed
- SO-1117: Sign-Off dashboards no longer queue behind a single global reload when many task actions happen at once.
- SO-1146: Loading sign-off definitions and tasks no longer queries the Atoti Server once per definition to resolve as-of-dates; dates are now resolved once per server and cube instead.
- SO-1146: Loading sign-off audit history no longer processes each record’s full payload upfront; records are now processed only when read, improving performance when history is extensive.
- SO-1146: The Tasks screen and
GET /sign-off/rest/v2/tasksnow load the adjustment definitions of the requested tasks in a few batched queries instead of one query per adjustment. - PIVOT-14667: Atoti Sign-Off dependencies are now aligned with the Atoti Server version, so the
Dependenciespage no longer lists a new table for every release. See the Atoti Server dependencies page for the underlying Spring Boot and Java versions.
Fixed
- SO-1114: Creating or updating a sign-off definition as a user outside the definition’s candidate group returned an HTTP 500 Internal Server Error instead of 403 Forbidden. The candidate-group access check now correctly returns a 403 Forbidden response.
- SO-1116: A failed adjustment status poll could leave the execution stuck in
REQUESTEDforever. Poll failures are now retried, and the execution is markedFAILEDafter 5 consecutive failures. - SO-1116: A failed export status poll could leave the sign-off stuck in
EXPORTINGforever. Poll failures are now retried, and the sign-off is markedEXPORT_FAILEDafter 5 consecutive failures. - SO-1116:
AdjustmentsDatastoreExecutionCacheServicecould miss a status update if it ran before the row was published, leaving the datastore cache stuck on the initial status. It now retries briefly to avoid this race. - SO-1115: Adjustments could keep showing an outdated status (for example
REQUESTEDafter the execution had reachedEXECUTED) on the task screen and inGET /sign-off/rest/v2/adjustments/{taskId}. The current version of an adjustment execution was taken to be the last row of an unordered database query, which can be a closed version. The current version is now selected by its live range. - SO-1147: Opening the Definitions, Tasks or Adjustments screens returned an HTTP 500 Internal Server Error once an installation held several thousand sign-off tasks. The screens now load this data in batches instead of a single request, so the error no longer occurs.
- PIVOT-14684: Rolling back a sign-off that was exporting left its export status poller running. The orphaned poller kept polling the application server for an export the user had abandoned and could still apply a terminal export status to a sign-off that had moved on. Rolling back now cancels the export poller.
- SO-1139: Restricted users could click the “Create Sign-Off Task Configuration” button and only find out they lacked permission after submitting. The “Create Sign-Off Task Configuration” button is now disabled for users who don’t have permission to create a definition.
- PIVOT-15093: Applications supplying their own
IExportStatusServiceimplementation failed at runtime with aNoSuchBeanDefinitionException.SignOffProcessInstanceWorkflowServicenow injects theIExportStatusServiceinterface instead of its default implementation.
2026-08-13
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests.
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
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests.
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-14093:
AStatusService#addRequest(String, AStatusTask)now takes aSupplier<AStatusTask>instead of a task instance, because a task self-schedules its first poll in its constructor and must not be built until the task it supersedes has been cancelled and drained. If you call it from your own status service, wrap the construction in a lambda:addRequest(pId, () -> new MyStatusTask(...)). - PIVOT-14106 Improved performance of audit history filtering.
Deprecated
- PIVOT-14093:
AStatusTask#run()is deprecated since 6.2.1 and planned for removal. It is no longer the extension point for a task’s polling logic — overrideexecute()instead. Classes that still overriderun()keep working, but the first time such a task is scheduled a warning is logged pointing atexecute().
Fixed
- PIVOT-14093: The export status poller could cancel itself while a sign-off was in the
APPROVINGstate, permanently stranding the sign-off atEXPORTINGinstead of letting it complete. The poller no longer cancels itself in that state, so the sign-off completes normally. - PIVOT-14093: A poller could leak past a rejected-and-re-exported sign-off, continuing to apply transitions concurrently with its replacement and causing data races. Pollers are now stopped when their sign-off is rejected and re-exported.
- PIVOT-14093: Cancelling a poller mid-transition could leave the audit log and database inconsistent. Cancellation now waits for an in-flight transition to finish instead of interrupting it.
- PIVOT-14093: Audit records for a completed workflow transition could store the data as it stood before the transition, instead of what was actually persisted. For example, a sign-off export’s audit history could show no export details even though the export succeeded. Audit records now reflect the transition’s actual result.
- PIVOT-14093: Under heavy load, attachment and comment variables added during a workflow action could be silently dropped from that action’s audit history, because their timestamp could drift ahead of Activiti’s clock. The timestamp is now taken from Activiti’s own clock, so it can no longer drift ahead.
- 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.
Security
2026-09-07
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests.
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
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests.
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
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests.
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
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Maven repository required to build the project and run the tests. The Atoti Server 6.1.19 Maven repository files can be downloaded from here.
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
Follow this link to download the zipped distribution files for:
- UI source code
- UI build
- Source files to build the module
- Offline documentation that can be served by the module
- Maven repository required to build the project and run the tests. The Atoti Server 6.1.15 Maven repository files can be downloaded from here.
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.