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-03

Changed

  • SO-1117: Sign-Off dashboards no longer queue behind a single global reload when many task actions happen at once.
  • SO-1110: Loading sign-off definitions no longer scans the workflow audit-log tables once per definition, improving performance when many definitions exist.
  • SO-1138: Loading sign-off definitions no longer issues Activiti workflow queries once per definition, improving the load time of the definition and task screens when many definitions exist.
  • SO-1122: The return type of ISignOffWorkflowStatusActionManager::getPendingApprovalTaskStatuses changed from List<String> to Map<String, List<String>> keyed by workflow type, since pending-approval status differs per workflow; see the migration guide for details.
  • PIVOT-14093: AStatusService#addRequest(String, AStatusTask) now takes a Supplier<AStatusTask> instead of a task instance; existing callers should wrap construction in a lambda, for example addRequest(pId, () -> new MyStatusTask(...)).
  • PIVOT-14106: Improved performance of audit history filtering.
  • PIVOT-14310: The dashboard and notification service SSE subscriptions now send X-Accel-Buffering: no and Cache-Control: no-cache, no-transform headers so reverse proxies stream updates immediately instead of buffering them.

Deprecated

  • PIVOT-14093: AStatusTask#run() is deprecated since 6.2.1 in favor of execute(); existing overrides of run() still work but log a warning the first time such a task is scheduled.

Removed

  • PIVOT-14667: The Dependencies page has been removed from the release documentation because the dependencies are now aligned with the Atoti Server version. See the Atoti Server dependencies page for the underlying Spring Boot and Java versions.

Fixed

  • PIVOT-14093: The export status poller no longer cancels itself while a sign-off is APPROVING, which previously stranded the sign-off at EXPORTING instead of letting it complete.
  • PIVOT-14093: A poller could leak past a rejected-and-re-exported sign-off and apply transitions concurrently with its replacement, 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 pre-transition data instead of what was actually persisted; they now reflect the transition’s actual result.
  • PIVOT-14093: Attachment and comment variables could be silently dropped from the audit history under heavy load when their timestamp drifted ahead of Activiti’s clock; it is now taken from Activiti’s clock.
  • 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.
  • SO-1116: The adjustment status poller could abandon an execution in a non-terminal state (e.g. REQUESTED) after a poll failure; failures are now retried, marking the execution FAILED after 5 consecutive failures.
  • SO-1116: The export status poller could abandon a repeatedly-failing poll silently, leaving the sign-off stuck at EXPORTING; poll failures are now retried, marking the sign-off EXPORT_FAILED after 5 consecutive failures.
  • SO-1116: A ~500ms race between the datastore cache update and the bulk publish could leave adjustment status stuck at its initial value; the update now retries briefly to bridge the race.
  • 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 and the execution is marked FAILED.
  • SO-1114: Creating or updating a sign-off definition as a user outside the definition’s candidate group returned HTTP 500 instead of 403 Forbidden; the access check now correctly returns 403.
  • SO-1121: Task-only approvers (in the workflow’s approvers group but not the definition’s candidateGroups) no longer receive an HTTP 403 on the SSE subscribe endpoint or the task approval window.
  • SO-1122: The “Pending Approval” column on the Sign-Off Task Configuration screen always showed 0 for simple-workflow tasks; awaiting-approval tasks are now counted correctly regardless of workflow type.
  • LIM-2319: Notifications could break after running for several hours, when a new subscriber’s stream raced a publish and failed with IllegalStateException; the notification store is now backed by a concurrent map.
  • SO-1144: Transactional CRUD operations no longer spawn many new threads when viewing screens in realtime mode; the maximum thread count is now sized by the 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.
  • SO-1115: Adjustments could show an outdated status (e.g. REQUESTED after EXECUTED) on the task screen and in API responses; the current execution version is now selected by its live range.
2026-07-27
This release does not ship any changes.