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

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

<Update label="4.1.1" description="2025-09-05">
  ### Added

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1828</td><td>Added new services to start Activiti workflows in bulk.</td></tr></tbody></table>

  ### Changed

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1828</td><td>The default implementation of <code>ILimitsProcessInstanceWorkflowCacheService</code> is now a no-operation implementation as this class is unused.</td></tr><tr><td>LIM-1837</td><td>Updated the warning wording when creating a limit structure to “Warn when utilization reaches x% of a limit”.</td></tr></tbody></table>

  ### Deprecated

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1828</td><td><code>ILimitsProcessInstanceWorkflowCacheService</code> is unused and has been deprecated for removal. It’s still present to avoid breaking the API.</td></tr><tr><td>LIM-1828</td><td><code>IEvaluationTaskManager</code> has been deprecated for removal because most of its methods are unused.</td></tr></tbody></table>

  ### Fixed

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1827</td><td>Fixed the logic and wording for warning thresholds. The warning threshold is now directly correlated to the limit utilization percentage.</td></tr><tr><td>LIM-1850</td><td>Fixed an issue where JWT tokens weren’t being refreshed causing requests between servers to fail after token expiration (default is 12 hours).</td></tr></tbody></table>
</Update>

<Update label="4.1.0" description="2025-05-28">
  ### Added

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1335</td><td>Data permissions in Atoti Limits are now applied to the KPIs and calculated members created by the module in the business cube.</td></tr><tr><td>LIM-1378</td><td>Added a cache service to store structures/limits that exist on the business server to speed up evaluations.</td></tr><tr><td>LIM-1403</td><td>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.</td></tr><tr><td>LIM-1444</td><td>The newly developed Audit Service has been added and updated the version of <code>workflow-core</code>.</td></tr><tr><td>LIM-1488</td><td>Moved the <code>IAuthenticatedLimitsUserService</code> to <code>limits-common</code> and created a new implementation in <code>limits-activeviam</code> to assist with tasks requiring unrestricted access to Atoti Limits data.</td></tr><tr><td>LIM-1489</td><td>Updated dependencies for the Common Spring Services (<code>audit-service</code> and <code>notification-service</code>) to import the services from <code>common-spring-services-bom</code>.</td></tr><tr><td>LIM-1494</td><td>Added an <a href="../../../dev/roles/role-permissions-faq">FAQ page</a> in the Roles and Permissions documentation.</td></tr><tr><td>LIM-1511</td><td>Updating Limit KPIs will now trigger a refresh of the application server’s data model in the UI.</td></tr><tr><td>LIM-1514</td><td>Atoti Limits has been upgraded to Atoti Server 6.1.3. The <code>6.0.X</code> and <code>6.0.X-sb3</code> modules have been upgraded to use Atoti Server <code>6.0.18</code> and <code>6.0.18-sb3</code> respectively.</td></tr><tr><td>LIM-1517</td><td><code>sourceLimitId</code> is now validated when temporary limits are created. This field should reference the <code>limitId</code> of the parent limit.</td></tr><tr><td>LIM-1531</td><td>Added a property <code>limits.cube.scope-hierarchies-enabled</code> that can be used to disable scope hierarchies to improve loading performance for large cardinalities of limit scopes.</td></tr><tr><td>LIM-1538</td><td>Added the Audit screen to the Atoti Limits UI.</td></tr><tr><td>LIM-1565</td><td>A new service, <code>JfrService</code>, has been added to enable recording Java Flight Recordings (JFRs) on the fly.</td></tr><tr><td>LIM-1573</td><td>Added properties for controlling which user roles will receive the server started and evaluation completed notifications.</td></tr><tr><td>LIM-1596</td><td>Files can now be saved as attachments at each step of the default workflows.</td></tr><tr><td>LIM-1600</td><td>Incident differences are now visible in the audit history.</td></tr><tr><td>LIM-1601</td><td>Limit incidents can be reviewed directly from an incident’s linked dashboard.</td></tr><tr><td>LIM-1604</td><td>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</td></tr><tr><td>LIM-1756</td><td>Updated the version of <code>common-spring-services-bom</code> to <code>1.0.1</code> and <code>workflow-core</code> to <code>2.5.0</code>.</td></tr></tbody></table>

  ### Changed

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1241</td><td>Errors that occur during the validation of limits and incidents are now reported in a more consistent format.</td></tr><tr><td>LIM-1434</td><td><a href="../../../user-ref/using-limits/view-edit-limit">Temporary limits</a> are now grouped under their source limit.</td></tr><tr><td>LIM-1456</td><td>Atoti Limits now uses the <code>IConfigurationService</code> instead of REST requests to execute MDX statements when creating Atoti Limits calculated measures to improve performance.</td></tr><tr><td>LIM-1469</td><td>Server-side limit structure errors are shown alongside the offending field in the UI.</td></tr><tr><td>LIM-1490</td><td>The Inter Server event service that sends events from Atoti Limits to the connected server has been extracted into it’s own module.</td></tr><tr><td>LIM-1501</td><td>Migrated workflow-related constants to dedicated class, <code>WorkflowConstants</code>.</td></tr><tr><td>LIM-1525</td><td>Improved performance of limit evaluations by skipping unnecessary retrieval of limit workflow information.</td></tr><tr><td>LIM-1552</td><td>Only required folders are now fetched from the connected server when resolving calculated measures.</td></tr><tr><td>LIM-1560</td><td>Use one global <code>CalculatedMeasuresResolver</code> to speed up queries on limits on calculated measures.</td></tr><tr><td>LIM-1592</td><td>The APIs for validation errors and error handlers have been updated to improve error handling. See the <a href="./migrate-4.1">4.1 migration notes</a> for the list of changes to migrate your custom errors and/or error handlers.</td></tr><tr><td>LIM-1603</td><td>Improved the default validation error messages provided by Atoti Limits to have a more consistent format and better readability.</td></tr><tr><td>LIM-1635</td><td>The logic to filter objects based on user data permissions has been changed to use the Spring <code>@PostFilter</code> and <code>@PostAuthorize</code> annotations in <code>ILimitsRetrievalService</code>.</td></tr><tr><td>LIM-1659</td><td>The <code>ILimitsRestClientProvider</code>, <code>ILimitsRestTemplateProvider</code> and <code>ILimitsRestClientBuilderProvider</code> have all been updated to return builders and now they have been renamed to <code>ILimitsRestClientBuilder</code>, <code>ILimitsRestTemplateBuilder</code> and <code>ILimitsRestClientBuilder</code> respectively.</td></tr></tbody></table>

  ### Removed

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1070</td><td>Removed <code>evaluationDate</code> field from Incident that was redundant to the <code>evaluationTimestamp</code> field.</td></tr><tr><td>LIM-1407</td><td><code>limits-activeviam</code> no longer has a dependency on <code>limits-integration-common</code>. Classes previously imported from <code>limits-integration-common</code> are now imported from <code>limits-common</code>.</td></tr><tr><td>LIM-1493</td><td>Removed default value for property <code>limits.autoconfiguration.content-service.limits-created-measures-owners</code>. This property should be auto-configured, and if it is not then it should be explicitly set in the application configuration.</td></tr><tr><td>LIM-1591</td><td>Removed the deprecated <code>RemoteCubeRestService</code> as calculated measures are now fetched directly from the application server.</td></tr><tr><td>LIM-1581</td><td>The <code>limits-activeviam</code> source code has been removed from the released artifacts in an effort to ease client migrations. The javadoc sources are still available for download.</td></tr><tr><td>LIM-1629</td><td>Removed deprecated code for Basic authentication in favor of using JWT authentication as the default for machine-to-machine communication.</td></tr><tr><td>LIM-1634</td><td>Removed the <code>LimitsPermissionOverrideUtil</code> class and replaced its usage with queries that set <code>LimitsQueryPayload::checkuserPermissions</code> to <code>false</code>.</td></tr><tr><td>LIM-1636</td><td>Removed the <code>runWithAuthorization</code> and <code>decodeBase64EncodedAuthentication</code> methods from <code>IAuthenticatedLimitsUserService</code> that are no longer used since the removal of the Basic authentication logic.</td></tr></tbody></table>

  ### Fixed

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>LIM-1468</td><td>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.</td></tr><tr><td>LIM-1483</td><td>Fixed an issue where KPIs were not refreshed after restarting Atoti Limits in persistent mode.</td></tr><tr><td>LIM-1486</td><td>Attempting to edit a temporary limit on the Limits Viewer screen no longer produces duplicate temporary limits.</td></tr><tr><td>LIM-1492</td><td>Fixed an issue where Atoti Limits calculated measures were being created on connected server KPIs that did not belong to Atoti Limits.</td></tr><tr><td>LIM-1498</td><td>Fixed an issue where the connected application would not start if Atoti Limits Auto-configuration was disabled via <code>limits.autoconfiguration.enabled=false</code>.</td></tr><tr><td>LIM-1509</td><td>Fixed an issue where the differences in historical versions of incidents were not being returned in the <a href="../../../user-ref/manage-incidents/status-screen">status screen</a></td></tr><tr><td>LIM-1512</td><td>Fixed an issue where KPIs were not being created unless restricted users were defined.</td></tr><tr><td>LIM-1522</td><td>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.</td></tr><tr><td>LIM-1533</td><td>Fixed tooltip message inside of the Limits Viewer screen, which suggested that the user is not authorized to delete limits.</td></tr><tr><td>LIM-1536</td><td>Fixed an issue where having multiple valid temporary limits on the same official limit could cause errors when evaluating.</td></tr><tr><td>LIM-1542</td><td>Fixed an issue where workflow actions were not set on retrieved limits if property <code>limits.workflow\.workflow-rules.can-approver-be-same-as-creator</code> was set to <code>false</code>.</td></tr><tr><td>LIM-1550</td><td>Fixed an issue where users with the <code>ROLE\_CREATE\_ANY\_LIMIT</code> permission role were blocked when attempting to create a limit via the UI or REST.</td></tr><tr><td>LIM-1551</td><td>Fixed an issue where filtering on a limit with scope (Total) or (For each) would display no data.</td></tr><tr><td>LIM-1578</td><td>Non-limit features now remain accessible even if the Atoti Limits server is unavailable.</td></tr><tr><td>LIM-1605</td><td>Fixed an issue where updating a limit structure with no differences from the existing limit structure would result in an exception.</td></tr><tr><td>LIM-1612</td><td>Fixed an issue where some actions were not disabled when a limit was deleted or expired.</td></tr></tbody></table>

  ### Known issues

  <table><thead><tr><th>Issue Key</th><th>Details</th></tr></thead><tbody><tr><td>BAS-1330</td><td>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 <code>/modules/limits-module/limits/rest/v2/limitDefinition/limits/save</code>. The key of the limit structure will still be visible in the admin-ui.</td></tr><tr><td>LIM-846</td><td><strong>Complex Scopes:</strong> 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.</td></tr><tr><td>LIM-840</td><td><strong>Complex Scopes:</strong> 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.</td></tr><tr><td>LIM-813</td><td>Managers can incorrectly upload Limit Structures through the REST endpoint.</td></tr><tr><td>LIM-594</td><td>Having email notifications enabled for breaches causes decreased limit evaluation performance. See <a href="../../../dev/limit-workflow">Configuring the breach email</a> on how to disable breach emails.</td></tr><tr><td>LIM-357</td><td>The Six Eyes workflow is currently not implemented.</td></tr><tr><td>LIM-346</td><td>Limits on calculated measures only work through File Upload, not through the UI.</td></tr><tr><td>LIM-320</td><td>Calculated measures need to be included in Pivot Table Query in order to view a Limit’s KPI in the Pivot Table. See <a href="../../../user-ref/using-limits/measure-types">Measures</a> for more on how to create a query for Limits on calculated measures.</td></tr></tbody></table>
</Update>
