fix(approval): clear pending attention state on dismiss (#4754)

This commit is contained in:
Rod Boev authored and nesquena-hermes committed 2026-06-25 02:04:51 +00:00
1 parent 2764e28b95
commit 0258599a46
2 files changed
+30

No files matched your search

+2
View File
@@ -5433,7 +5433,9 @@ function showApprovalCard(pending, pendingCount) {
function dismissApprovalCard() {
if (_approvalCurrentId) _markApprovalDismissed(_approvalCurrentId);
const sid = _approvalSessionId;
hideApprovalCard(true);
if (sid) _clearApprovalPendingForSession(sid);
}
function _syncApprovalCollapseButton(card) {
@@ -101,6 +101,34 @@ def test_dismiss_approval_card_hides_card():
assert "hideApprovalCard(true)" in body
def test_dismiss_approval_card_clears_pending_attention():
# dismissApprovalCard must call _clearApprovalPendingForSession so the tab
# indicator stops blinking after dismiss. Without this, _rememberApprovalPending
# reinsertes the pending entry on every poll tick and the indicator stays lit.
compact = _compact(MESSAGES_JS)
func_start = compact.find("functiondismissApprovalCard(")
assert func_start != -1
body_end = compact.find("}", func_start)
body = compact[func_start:body_end + 1]
assert "_clearApprovalPendingForSession(sid)" in body, (
"dismissApprovalCard must call _clearApprovalPendingForSession(sid)"
)
def test_dismiss_approval_card_captures_sid_before_hide():
# The session ID must be captured before hideApprovalCard(true) nulls out
# _approvalSessionId so the clear call receives the correct ID.
compact = _compact(MESSAGES_JS)
func_start = compact.find("functiondismissApprovalCard(")
assert func_start != -1
body_end = compact.find("}", func_start)
body = compact[func_start:body_end + 1]
sid_pos = body.find("constsid=_approvalSessionId")
hide_pos = body.find("hideApprovalCard(true)")
assert sid_pos != -1, "sid must be captured via const sid=_approvalSessionId"
assert sid_pos < hide_pos, "sid must be captured before hideApprovalCard is called"
# ---------------------------------------------------------------------------
# respondApproval prunes dismissed set
# ---------------------------------------------------------------------------