Skip to content

[Bug]: Infinite spinner on revealing SRP or switching networks #32416

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Gudahtt opened this issue Apr 30, 2025 · 1 comment · Fixed by #32391
Closed

[Bug]: Infinite spinner on revealing SRP or switching networks #32416

Gudahtt opened this issue Apr 30, 2025 · 1 comment · Fixed by #32391
Labels
regression-prod-12.16.1 Regression bug that was found in production in release 12.16.1 rollout-blocker Sev1-high High severity; partial loss of service with severe impact upon users, with no workaround. team-extension-platform Extension Platform team type-bug Something isn't working

Comments

@Gudahtt
Copy link
Member

Gudahtt commented Apr 30, 2025

Describe the bug

Some users are reporting an infinite loading indicator after submitting password to reveal SRP, and after switching networks.

Expected behavior

No response

Screenshots/Recordings

No response

Steps to reproduce

Users report encountering this issue when switching networks. One user reports seeing also when revealing SRP (after submitting password for verification).

The team has not reproduced the issue yet.

Error messages or log output

Detection stage

In production (default)

Version

12.16.1

Build type

None

Browser

Chrome

Operating system

Other (please elaborate in the "Additional Context" section)

Hardware wallet

No response

Additional context

See this thread for details: https://consensys.slack.com/archives/C8RSKCNCD/p1745939968893759

Severity

No response

@Gudahtt Gudahtt added the type-bug Something isn't working label Apr 30, 2025
@github-project-automation github-project-automation bot moved this to To be fixed in Bugs by severity Apr 30, 2025
@github-project-automation github-project-automation bot moved this to To be triaged in Bugs by team Apr 30, 2025
@Gudahtt Gudahtt added team-extension-platform Extension Platform team regression-prod-12.16.1 Regression bug that was found in production in release 12.16.1 labels Apr 30, 2025
@metamaskbot metamaskbot added the needs-triage Issue needs to be triaged label Apr 30, 2025
@Gudahtt Gudahtt added Sev1-high High severity; partial loss of service with severe impact upon users, with no workaround. and removed needs-triage Issue needs to be triaged labels Apr 30, 2025
github-merge-queue bot pushed a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
@github-project-automation github-project-automation bot moved this from To be fixed to Fixed in Bugs by severity May 1, 2025
Copy link
Contributor

github-actions bot commented May 1, 2025

runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details>

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot pushed a commit that referenced this issue May 1, 2025
…ces controller (#32391)

## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
DDDDDanica pushed a commit that referenced this issue May 1, 2025
Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details>

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

Fixes: Potentially fixes
#32416
#31422

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

<!-- [screenshots/recordings] -->

<!-- [screenshots/recordings] -->

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 1, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
runway-github bot added a commit that referenced this issue May 5, 2025
## **Description**

Wow, huge oopsy on my side. Urgh, a little annoyed that I didn't spot
this earlier.

After doing some thorough debugging, I found an infinite state update
loop from the NotificationServicesController.
I didn't find the full context but this controller:

- Listens to `KeyringController:stateChange` events
- When receiving an event we perform a `KeyringController:withKeyring`
action.

Somewhere above (or potentially another controller firing events or
actions?) will then fire another `KeyringController:stateChange` and the
loop repeats. This prevents other state updates and redux updates.

Controller fix: MetaMask/core#5731
However this patch can be an interim for existing releases or until the
CORE package is released.

<details><summary>Screenshot of background logs</summary>

![Screenshot 2025-04-29 at 22 43
03](https://github.com/user-attachments/assets/a1f07672-d471-4e60-8124-e6644df0b5f4)

</details> 

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32391?quickstart=1)

## **Related issues**

Fixes: Potentially fixes
#32416
#31422

## **Manual testing steps**

1. Turn on notifications
2. Try dismissing the carousel banners
3. Try switching networks
4. Try the send flow where you send sepolia

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
regression-prod-12.16.1 Regression bug that was found in production in release 12.16.1 rollout-blocker Sev1-high High severity; partial loss of service with severe impact upon users, with no workaround. team-extension-platform Extension Platform team type-bug Something isn't working
Projects
Archived in project
Status: To be triaged
Development

Successfully merging a pull request may close this issue.

4 participants