Skip to main content
From version 6.1.20 onwards, Atoti Sign-Off version numbers are aligned with the Atoti Java SDK. Previously, Atoti Sign-Off used its own versioning scheme which had moved ahead of the Atoti Java SDK. The last release under the old scheme was Atoti Sign-Off 6.2.1.Although the version number appears to go backwards, this is not a rollback or downgrade. It reflects the realignment with the Atoti Java SDK release track.
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/tasks now 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 Dependencies page 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 REQUESTED forever. Poll failures are now retried, and the execution is marked FAILED after 5 consecutive failures.
  • SO-1116: A failed export status poll could leave the sign-off stuck in EXPORTING forever. Poll failures are now retried, and the sign-off is marked EXPORT_FAILED after 5 consecutive failures.
  • SO-1116: AdjustmentsDatastoreExecutionCacheService could 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 REQUESTED after the execution had reached EXECUTED) on the task screen and in GET /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 IExportStatusService implementation failed at runtime with a NoSuchBeanDefinitionException. SignOffProcessInstanceWorkflowService now injects the IExportStatusService interface 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 carry X-Accel-Buffering: no and Cache-Control: no-cache, no-transform so 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-size property (default 8).
  • 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::getPendingApprovalTaskStatuses changed from a List<String> to a Map<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 a Supplier<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 — override execute() instead. Classes that still override run() keep working, but the first time such a task is scheduled a warning is logged pointing at execute().

Fixed

  • PIVOT-14093: The export status poller could cancel itself while a sign-off was in the APPROVING state, permanently stranding the sign-off at EXPORTING instead 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 0 for tasks created with the simple workflow. The simple workflow’s awaiting-approval state is INITIATED, but the count only considered PENDING (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 marked FAILED.
  • SO-1116: Adjustment audit records written by the status poller stored the executionId in the definitionId field, breaking definition-based audit queries and correlation. The definitionId is 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/adjustments and POST /sign-off/rest/v2/adjustment now return the identifiers of the created adjustments (id, executionId, and definitionId), in request order, so that clients can track the execution status of each adjustment.

Changed

  • SO-1118: IAdjustmentService::createAdjustment and IAdjustmentService::createAdjustments now return the identifiers of the created adjustments instead of void.

Fixed

  • SO-1118: ISignOffAdjustmentExecutionService::requestAdjustmentExecutionsAndPersistDefinitions returned 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 EXPORTING due 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 BulkAdjustmentExecutor in the application server for processing bulk adjustment execution logic.
  • SO-1006: Added a new BulkTaskComplete command that is used to execute Activiti tasks in bulk.
  • SO-1006: Added a new method ISignOffAdjustmentExecutionService::requestAdjustmentExecutionsAndPersistDefinitions to request adjustment executions in bulk.
  • SO-1006: Added a new method IAdjustmentsDefinitionCacheService::saveAll to save adjustment definitions in bulk to the datastore cache.
  • SO-1006: Added a new method IAdjustmentsExecutionCacheService::saveAll to save adjustment executions in bulk to the datastore cache.
  • SO-1006: Added a new method IAdjustmentExecutionService::bulkExecute and a corresponding REST endpoint /adjustments/bulk-execute on the application server to execute adjustments in bulk on the application server.
  • SO-1006: Added a new method ISignOffAdjustmentValidator::validateSignOffAdjustmentsCreation to validate adjustments in bulk when they’re created.
  • SO-1006: Added a new method ISignOffAdjustmentValidator::validateSignOffAdjustmentsUpdate to validate adjustments in bulk when they’re updated.
  • SO-1006: Added a new method IKeyedObjectService::createAll to create persistent objects in bulk.
  • SO-1006: Added a new method IAuditLogService::saveUserTaskRecords to save user task records in bulk.
  • SO-1006: Added a new method IAuditLogService::saveProcessRecords to save process records in bulk.
  • SO-1013: Added the ability to save multiple adjustment types at once.
  • SO-1020: Added optional query parameter objectTypes to the Server-Sent Events (SSE) subscription endpoint to allow for filtering events by object types.
  • SO-1020: Added new API methods in ISseEmitterService to broadcast task and adjustment events.
  • SO-1020: Added new API method ISignOffTaskService::getFilteredTasks to retrieve tasks that match specified field conditions.
  • SO-1020: Added new REST endpoint /sign-off/rest/v2/tasks/filter to retrieve tasks matching specified definition criteria.
  • SO-1020: Added new API methods in ISignOffTask to 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-starter module to a dedicated test module signoff-application-tests to reduce migration efforts and improve maintainability.
  • SO-952: The default history level of activiti has changed from full to audit.
  • 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 ISseEmitterService API methods subscribeToDefinitions and unsubscribeToDefinitions to subscribe and unsubscribe respectively.
  • SO-1020: Renamed SignOffDefinitionSseController to SignOffSseController.
  • SO-1020: Renamed SseDefinitionEmitter to SignOffSseEmitter.
  • 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.