Virtual Agent "To Do Approvals" Topic Enters Infinite Error Loop for Specific UsersIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } When a specific user opens the OOTB "To do Approvals" or "To do Tasks" topic in Virtual Agent (standard chat), the VA enters an infinite error loop, displaying alternating error messages such as: "Sorry, something went wrong on our end while trying to complete this request. Try asking again later.""No agents are available right now. Try asking again later." The loop continues indefinitely until the user manually stops the conversation. The issue affects only specific users -- other users on the same instance can use the same topics without error. This issue occurs in standard chat only. Enhanced chat handles the condition gracefully and does not enter the loop. Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Zurich Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } The To Do topics query the user's pending approvals from sysapproval_approver, then follow the document reference to retrieve details about each approval's parent record. The infinite loop occurs when: The user has a pending approval record that is accessible to them (the sysapproval_approver record is visible).The parent document that the approval refers to is inaccessible to that user -- typically due to a before-query business rule, domain separation filtering, or another query-level restriction that prevents the user from reading the record. When ApprovalUtils.getApprovalsForUser() iterates the user's approvals and attempts to access the parent document via GlideRecordSecure, the inaccessible record returns null. The script does not guard against this null return, causing a TypeError at runtime. The topic's error recovery mechanism (TaskStateManager.recover()) then re-enters the data-gathering state unconditionally, restarting the same failing script. This creates the infinite loop. Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Diagnostic Steps Identify the affected user and reproduce the error loop.Check the system logs (syslog) filtered to the affected user during the reproduction window. Look for: TypeError: Cannot convert null to an object referencing ApprovalUtils.getApprovalsForUser()Repeated TaskStateManager.recover() entries Query the user's pending approvals: sysapproval_approver where approver = <affected_user> and state = requested.For each pending approval, attempt to open the parent document (document_id field) while impersonating the affected user.The approval whose parent document returns "record not found" (rather than "security prevents access") is the one triggering the loop.Check for before-query business rules or other query-level restrictions on the parent document's table that would filter the record for the affected user. Immediate fix Remove the access restriction that prevents the user from querying the parent document. This may involve adjusting the before-query business rule on the parent document's table, or removing the orphaned approval record that the user cannot action. Permanent fix Migrate from standard chat to enhanced chat. Enhanced chat handles the null document reference gracefully without entering the loop. To check the current chat mode: navigate to Assistant Designer > [Your assistant] > Display Experiences and verify whether the portal is using "Standard" or "Enhanced" chat. If using standard chat, edit the portal entry to change the experience to use enhanced chat.