> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

<Warning>
  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.
</Warning>

<Info>
  For a brief overview of the changes, see our [Release notes](./release-notes).
  For information on upgrading from previous versions, see the
  [Migration guide](./migration-guide).
</Info>

<Update label="6.1.23" description="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::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](./migration-guide#migrate-atoti-sign-off-6122-to-6123) 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 `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.
</Update>

<Update label="6.1.22" description="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 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.
</Update>

<Update label="6.1.21" description="2026-06-17">
  ### 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.
</Update>

<Update label="6.1.20" description="2026-05-28">
  ### Changed

  Group IDs of dependencies have changed and must be updated. See the [migration notes](./migration-guide#migrate-atoti-sign-off-6-2-2-back-to-6-1-20) 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.
</Update>

<Update label="6.2.1" description="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.
</Update>

<Update label="6.2.0" description="2026-01-23">
  ### 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](https://github.com/diffplug/spotless/tree/main/plugin-maven) with
    the [Palantir Java Format](https://github.com/palantir/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.
</Update>
