Changelog 4.1
info
For a brief overview of the changes, see the Release notes.
For information on upgrading from previous versions, see the
Atoti Limits Migration Notes.
4.1.2
2026-02-18
Added
- LIM-1836: Added a new set of properties and a new API,
ILimitsStatusManager, that allow for statuses in custom workflows to be mapped to limit actions.
Fixed
- LIM-1865: Fixed an issue where a limit could not be created if it overlapped with an inactive (deleted or expired) limit.
- LIM-1954: You can now create limits on calculated measures where the underlying is a hierarchy.
- LIM-2121: Fixed an issue where temporary limits were not being exported.
- LIM-2124: Fixed incorrect parsing of localized numbers on the limits viewer.
4.1.1
2025-09-05
Added
- LIM-1828: Added new services to start Activiti workflows in bulk.
Changed
- LIM-1828: The default implementation of
ILimitsProcessInstanceWorkflowCacheServiceis now a no-operation implementation as this class is unused. - LIM-1837: Updated the warning wording when creating a limit structure to “Warn when utilization reaches x% of a limit”.
Deprecated
- LIM-1828:
ILimitsProcessInstanceWorkflowCacheServiceis unused and has been deprecated for removal. It’s still present to avoid breaking the API. - LIM-1828:
IEvaluationTaskManagerhas been deprecated for removal because most of its methods are unused.
Fixed
- LIM-1827: Fixed the logic and wording for warning thresholds. The warning threshold is now directly correlated to the limit utilization percentage.
- LIM-1850: Fixed an issue where JWT tokens weren’t being refreshed causing requests between servers to fail after token expiration (default is 12 hours).
4.1.0
2025-05-28
Added
- LIM-1335: Data permissions in Atoti Limits are now applied to the KPIs and calculated members created by the module in the business cube.
- LIM-1378: Added a cache service to store structures/limits that exist on the business server to speed up evaluations.
- LIM-1403: Atoti Limits now sends notifications to the UI when the initial data load completes, limit evaluations complete, and to users with the approval role when a FourEyes limit is created.
- LIM-1444: The newly developed Audit Service has been added and updated the version of
workflow-core. - LIM-1488: Moved the
IAuthenticatedLimitsUserServicetolimits-commonand created a new implementation inlimits-activeviamto assist with tasks requiring unrestricted access to Atoti Limits data. - LIM-1489: Updated dependencies for the Common Spring Services (
audit-serviceandnotification-service) to import the services fromcommon-spring-services-bom. - LIM-1494: Added an FAQ page in the Roles and Permissions documentation.
- LIM-1511: Updating Limit KPIs will now trigger a refresh of the application server’s data model in the UI.
- LIM-1514: Atoti Limits has been upgraded to Atoti Server 6.1.3. The
6.0.Xand6.0.X-sb3modules have been upgraded to use Atoti Server6.0.18and6.0.18-sb3respectively. - LIM-1517:
sourceLimitIdis now validated when temporary limits are created. This field should reference thelimitIdof the parent limit. - LIM-1531: Added a property
limits.cube.scope-hierarchies-enabledthat can be used to disable scope hierarchies to improve loading performance for large cardinalities of limit scopes. - LIM-1538: Added the Audit screen to the Atoti Limits UI.
- LIM-1565: A new service,
JfrService, has been added to enable recording Java Flight Recordings (JFRs) on the fly. - LIM-1573: Added properties for controlling which user roles will receive the server started and evaluation completed notifications.
- LIM-1596: Files can now be saved as attachments at each step of the default workflows.
- LIM-1600: Incident differences are now visible in the audit history.
- LIM-1601: Limit incidents can be reviewed directly from an incident’s linked dashboard.
- LIM-1604: Files saved as attachments in the workflow are now restricted to certain file types which are defined by the ‘limits.workflow.allowed-file-upload-extensions’ property
- LIM-1756: Updated the version of
common-spring-services-bomto1.0.1andworkflow-coreto2.5.0.
Changed
- LIM-1241: Errors that occur during the validation of limits and incidents are now reported in a more consistent format.
- LIM-1434: Temporary limits are now grouped under their source limit.
- LIM-1456: Atoti Limits now uses the
IConfigurationServiceinstead of REST requests to execute MDX statements when creating Atoti Limits calculated measures to improve performance. - LIM-1469: Server-side limit structure errors are shown alongside the offending field in the UI.
- LIM-1490: The Inter Server event service that sends events from Atoti Limits to the connected server has been extracted into it’s own module.
- LIM-1501: Migrated workflow-related constants to dedicated class,
WorkflowConstants. - LIM-1525: Improved performance of limit evaluations by skipping unnecessary retrieval of limit workflow information.
- LIM-1552: Only required folders are now fetched from the connected server when resolving calculated measures.
- LIM-1560: Use one global
CalculatedMeasuresResolverto speed up queries on limits on calculated measures. - LIM-1592: The APIs for validation errors and error handlers have been updated to improve error handling. See the 4.1 migration notes for the list of changes to migrate your custom errors and/or error handlers.
- LIM-1603: Improved the default validation error messages provided by Atoti Limits to have a more consistent format and better readability.
- LIM-1635: The logic to filter objects based on user data permissions has been changed to use the Spring
@PostFilterand@PostAuthorizeannotations inILimitsRetrievalService. - LIM-1659: The
ILimitsRestClientProvider,ILimitsRestTemplateProviderandILimitsRestClientBuilderProviderhave all been updated to return builders and now they have been renamed toILimitsRestClientBuilder,ILimitsRestTemplateBuilderandILimitsRestClientBuilderrespectively.
Removed
- LIM-1070: Removed
evaluationDatefield from Incident that was redundant to theevaluationTimestampfield. - LIM-1407:
limits-activeviamno longer has a dependency onlimits-integration-common. Classes previously imported fromlimits-integration-commonare now imported fromlimits-common. - LIM-1493: Removed default value for property
limits.autoconfiguration.content-service.limits-created-measures-owners. This property should be auto-configured, and if it is not then it should be explicitly set in the application configuration. - LIM-1591: Removed the deprecated
RemoteCubeRestServiceas calculated measures are now fetched directly from the application server. - LIM-1581: The
limits-activeviamsource code has been removed from the released artifacts in an effort to ease client migrations. The javadoc sources are still available for download. - LIM-1629: Removed deprecated code for Basic authentication in favor of using JWT authentication as the default for machine-to-machine communication.
- LIM-1634: Removed the
LimitsPermissionOverrideUtilclass and replaced its usage with queries that setLimitsQueryPayload::checkuserPermissionstofalse. - LIM-1636: Removed the
runWithAuthorizationanddecodeBase64EncodedAuthenticationmethods fromIAuthenticatedLimitsUserServicethat are no longer used since the removal of the Basic authentication logic.
Fixed
- LIM-1468: Fixed an issue where trying to create a limit structure with the same key fields as an existing limit structure would be treated as an update.
- LIM-1483: Fixed an issue where KPIs were not refreshed after restarting Atoti Limits in persistent mode.
- LIM-1486: Attempting to edit a temporary limit on the Limits Viewer screen no longer produces duplicate temporary limits.
- LIM-1492: Fixed an issue where Atoti Limits calculated measures were being created on connected server KPIs that did not belong to Atoti Limits.
- LIM-1498: Fixed an issue where the connected application would not start if Atoti Limits Auto-configuration was disabled via
limits.autoconfiguration.enabled=false. - LIM-1509: Fixed an issue where the differences in historical versions of incidents were not being returned in the status screen
- LIM-1512: Fixed an issue where KPIs were not being created unless restricted users were defined.
- LIM-1518: Fixed an issue where warning thresholds were not being correctly evaluated.
- LIM-1521: Fixed an issue that prevented limits from being created on nested calculated measures.
- LIM-1522: Fixed an issue where generated IDs for limits created via the UI could collide with IDs for limits created via file upload if the uploaded limits respected the ordering of the generated IDs.
- LIM-1533: Fixed tooltip message inside of the Limits Viewer screen, which suggested that the user is not authorized to delete limits.
- LIM-1536: Fixed an issue where having multiple valid temporary limits on the same official limit could cause errors when evaluating.
- LIM-1542: Fixed an issue where workflow actions were not set on retrieved limits if property
limits.workflow.workflow-rules.can-approver-be-same-as-creatorwas set tofalse. - LIM-1550: Fixed an issue where users with the
ROLE_CREATE_ANY_LIMITpermission role were blocked when attempting to create a limit via the UI or REST. - LIM-1551: Fixed an issue where filtering on a limit with scope (Total) or (For each) would display no data.
- LIM-1578: Non-limit features now remain accessible even if the Atoti Limits server is unavailable.
- LIM-1605: Fixed an issue where updating a limit structure with no differences from the existing limit structure would result in an exception.
- LIM-1612: Fixed an issue where some actions were not disabled when a limit was deleted or expired.
Known issues
- BAS-1330: Deleting the last limit value deletes the limit structure. As a workaround, don’t delete all limits on a limit structure unless you are sure that the structure won’t be used again. Alternatively, if you do need to reuse the structure, you can create a limit on it using the endpoint
/modules/limits-module/limits/rest/v2/limitDefinition/limits/save. The key of the limit structure will still be visible in the admin-ui. - LIM-846: Complex Scopes: Currently, a limit with an aggregated scope and a limit with a non-aggregated scope cannot be created on the same limit structure. As a workaround, create the limits on two separate structures.
- LIM-840: Complex Scopes: Currently, limits can’t be defined with an aggregated scope location and another scope location. As a workaround, create two separate limits on two separate structures.
- LIM-813: Managers can incorrectly upload Limit Structures through the REST endpoint.
- LIM-594: Having email notifications enabled for breaches causes decreased limit evaluation performance. See Configuring the breach email on how to disable breach emails.
- LIM-357: The Six Eyes workflow is currently not implemented.
- LIM-346: Limits on calculated measures only work through File Upload, not through the UI.
- LIM-320: Calculated measures need to be included in Pivot Table Query in order to view a Limit’s KPI in the Pivot Table. See Measures for more on how to create a query for Limits on calculated measures.