diff --git a/docs/requirements/Component-ManagementService.md b/docs/requirements/Component-ManagementService.md
index 83ded24c..38b1b7e7 100644
--- a/docs/requirements/Component-ManagementService.md
+++ b/docs/requirements/Component-ManagementService.md
@@ -192,6 +192,7 @@ The two-person authorization workflow for writes through the MxAccess Gateway. B
- **ListApiKeys** / **CreateApiKey** / **UpdateApiKey** / **EnableApiKey** / **DisableApiKey** / **DeleteApiKey**: Manage API keys.
- **ListRoleMappings** / **CreateRoleMapping** / **UpdateRoleMapping** / **DeleteRoleMapping**: Manage LDAP group-to-role mappings.
- **ListScopeRules** / **AddScopeRule** / **DeleteScopeRule**: Manage site scope rules on role mappings.
+- Every role-mapping and scope-rule mutation (Create/Update/DeleteRoleMapping, Add/DeleteScopeRule) calls `RoleMappingCache.Invalidate()` as a **post-commit** action, so the change takes effect for the next role mapping on the node that served the command instead of after the `RoleMappingCacheSeconds` TTL (default 30 s); the other central node still converges within that TTL. Post-commit, because invalidating inside the transaction would let a concurrent mapping re-cache the pre-change table.
### Audit Log
diff --git a/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs b/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs
index 57cc52f7..1ea6c920 100644
--- a/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs
+++ b/src/ZB.MOM.WW.ScadaBridge.ManagementService/ManagementActor.cs
@@ -2820,6 +2820,21 @@ public class ManagementActor : ReceiveActor
$"Role '{role}' is not a recognized role. Valid roles are: {string.Join(", ", Roles.All)}.");
}
+ ///
+ /// Drops this node's snapshot once a mapping / scope-rule
+ /// change has committed, so the next role mapping on this node sees it immediately rather
+ /// than after the cache TTL (lane K review M1). Queued post-commit: invalidating before the
+ /// commit would let a concurrent mapping re-cache the pre-change table. Other central
+ /// nodes still converge within RoleMappingCacheSeconds.
+ ///
+ private static Task InvalidateRoleMappingCacheAfterCommit(IServiceProvider sp)
+ {
+ var cache = sp.GetService();
+ return cache is null
+ ? Task.CompletedTask
+ : AfterConfigurationCommit(sp, () => { cache.Invalidate(); return Task.CompletedTask; });
+ }
+
private static async Task