For user-facing changes, see the Release notes.
For information on upgrading from previous versions, see the
Migration guide.
2026-09-03
Changed
- PIVOT-14310: The incident SSE subscription (
GET /limits/sse/v2/incidents/subscribe/filter) 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 incident and notification updates only when the stream ends.
Removed
- PIVOT-14667: The
Dependenciespage 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
- LIM-2278: Fixed limit evaluation considering only the default member for scopes on a slicing hierarchy (no AllMember level); every matching member, including multi-level Total subtotals, is now evaluated.
- LIM-2346: Fixed a limit defined at the
(Total)of a multi-level hierarchy’s first level (for example a dynamic tenor hierarchy) not applying to the Total row, which showed no limit status. - LIM-2352: Fixed the Audit Screen reporting a spurious change (for example
100 → 100) when an unchanged numeric value was deserialized as a different numeric type, such asIntegerandDouble. - LIM-2370: Querying a limit KPI (Goal or Status) on a recently created calculated measure would throw an
IllegalArgumentException: Unknown measure contributors.COUNT. - LIM-2171: Fixed Limit Structures with no Limits minting a duplicate Scope Value ID instead of reusing the existing “N/A” ID, which could crash the scope cache with a duplicate-key error.
- LIM-2366: Fixed the log filling with
ERROR-level stack traces for everyAccessDeniedException, which now logs atDEBUGwhile other exceptions still log atERROR. - LIM-2365: Fixed the
Mismatch for scope locationserror not naming which limits caused a limit structure to fail loading; it now names the structure, the two limits, and the missing level. - LIM-2428: Fixed querying a limit KPI (Goal or Status) throwing a
NullPointerExceptionwhen the as-of date fell outside the date range of the limits covering the queried location. - LIM-2355: Fixed the Audit Screen showing no entry for a breach review or other workflow-engine task, leaving only the object’s creation entry.
- LIM-2388: Fixed approving an update or deletion of a limit with an existing attachment failing with an error, which could leave Atoti Limits unable to restart.
- LIM-2358: Fixed workflow buttons (“Approve”, “Reject”, “Review breach”) being enabled without the required permission, showing an “Access Forbidden” error on click instead of being disabled.
2026-07-27
Added
- LIM-2228: Added a first-class Atoti Limits plugin for the Atoti Python SDK (
atoti-limits), replacing the existing Atoti Limits Python extension as the way to connect an Atoti Python session to a running Atoti Limits server. - LIM-2350: Fixed a limit’s ID being reused by a new limit created with the same scope after a restart, which merged their audit histories. New limits no longer reuse a soft-deleted limit’s ID, so their audit histories stay separate.
Fixed
- LIM-2364: Fixed creating a limit structure on a recently created calculated measure failing validation with
Measure ... not in the list of measures for the cube. - LIM-2348: Fixed the audit history and decision buttons failing to open for expired, deleted-and-recreated, or fully-approved six-eyes limits. Those steps now simply show no available actions.