A transaction history answer that landed on AddressDetail after a network switch drew the previous network's rows. The answer also added the previous network's fraud contracts to the new network's list.
Each history screen remembers which network is active before asking Blockscout. The screen drops the answer if another network is active on the page or in storage when the answer lands.
AddressDetail and AddressToken also drop an answer that lands once the screen shows another address. AddressToken does the same once the screen shows another token.
A failed request goes through the same checks. A dropped failure leaves the screen as it was.
Holding the lock, the save adds new fraud contracts only if the page and the stored record still name the request's network. doRefreshAndRender() in src/popup/index.js makes this check too. If the network changed while the save waited for the lock, the screen draws nothing.
storedNetworkIs() in src/shared/storedSettings.js reads the stored network.
The address screens now run the ENS lookup before the check. A switch during that lookup is caught too.
Home and AddressToken had the same fault and are fixed the same way.
Model: opus-5-5
A transaction history answer that landed on AddressDetail after a network switch drew the previous network's rows. The answer also added the previous network's fraud contracts to the new network's list.
- Each history screen remembers which network is active before asking Blockscout. The screen drops the answer if another network is active on the page or in storage when the answer lands.
- AddressDetail and AddressToken also drop an answer that lands once the screen shows another address. AddressToken does the same once the screen shows another token.
- A failed request goes through the same checks. A dropped failure leaves the screen as it was.
- Holding the lock, the save adds new fraud contracts only if the page and the stored record still name the request's network. `doRefreshAndRender()` in `src/popup/index.js` makes this check too. If the network changed while the save waited for the lock, the screen draws nothing.
- `storedNetworkIs()` in `src/shared/storedSettings.js` reads the stored network.
- The address screens now run the ENS lookup before the check. A switch during that lookup is caught too.
Home and AddressToken had the same fault and are fixed the same way.
Model: opus-5-5
src/popup/views/home.js, addressDetail.js and addressToken.js, the catch of each history load. A request for the previous network that fails after a switch writes "Failed to load transactions." on the new network's screen. If the new network's rows are already drawn, the message replaces them. On AddressDetail and AddressToken the message then stays until the screen is opened again. The message is false there, because the new network's history loaded. Acceptable: the catch makes the same check as a successful answer and writes nothing when that check fails. A test fails the previous network's request after the new network's rows are drawn. The PR body's "Not changed" line then goes.
The same three files, where new fraud contracts are saved. The stored network is read before the save takes the lock. If the background or another page saves a switch in that gap, this save still writes the previous network's fraud contracts. The stored record then names the new network and holds those contracts, and this page takes them when it follows the switch. Acceptable: the contracts are added inside the save, holding the lock. They are added only while this page and the stored record both still name the request's network, as doRefreshAndRender() in src/popup/index.js checks. A test lands the switch between the answer and the save.
tests/historyAfterNetworkSwitch.test.js: no test covers the page half of the check, state.networkId !== networkId. That half drops an answer once this page has switched while storage still names the previous network, for example while the switch's own save is writing. Acceptable: a test in which the page has switched and storage has not.
tests/historyAfterNetworkSwitch.test.js, header: "Each test holds the history request open, switches the network or what the screen shows, and then lets the answer land." This is false: the same-network tests switch nothing, and the ENS tests hold the ENS lookup instead. Suggested: "Most tests hold the history request open, switch the network or what the screen shows, and then let the answer land."
src/shared/storedSettings.js, header: "Before asking Blockscout for the transaction history, a screen notes the active network." "Notes" reads two ways, because a screen can also show a note. Suggested: "Before asking Blockscout for the transaction history, a screen remembers which network is active."
Follow-up note: the PR body has the same "notes the active network". The commit body's "drop it once the screen shows another address, and AddressToken once it shows another token" uses "it" for both the answer and the screen.
Judgement call: finding 2 is a short window. It fails because the definition of done names the fraud contracts.
Model: opus-5-5
**Review: FAIL (needs-rework)**
1. `src/popup/views/home.js`, `addressDetail.js` and `addressToken.js`, the `catch` of each history load. A request for the previous network that fails after a switch writes "Failed to load transactions." on the new network's screen. If the new network's rows are already drawn, the message replaces them. On AddressDetail and AddressToken the message then stays until the screen is opened again. The message is false there, because the new network's history loaded. Acceptable: the `catch` makes the same check as a successful answer and writes nothing when that check fails. A test fails the previous network's request after the new network's rows are drawn. The PR body's "Not changed" line then goes.
2. The same three files, where new fraud contracts are saved. The stored network is read before the save takes the lock. If the background or another page saves a switch in that gap, this save still writes the previous network's fraud contracts. The stored record then names the new network and holds those contracts, and this page takes them when it follows the switch. Acceptable: the contracts are added inside the save, holding the lock. They are added only while this page and the stored record both still name the request's network, as `doRefreshAndRender()` in `src/popup/index.js` checks. A test lands the switch between the answer and the save.
3. `tests/historyAfterNetworkSwitch.test.js`: no test covers the page half of the check, `state.networkId !== networkId`. That half drops an answer once this page has switched while storage still names the previous network, for example while the switch's own save is writing. Acceptable: a test in which the page has switched and storage has not.
4. `tests/historyAfterNetworkSwitch.test.js`, header: "Each test holds the history request open, switches the network or what the screen shows, and then lets the answer land." This is false: the same-network tests switch nothing, and the ENS tests hold the ENS lookup instead. Suggested: "Most tests hold the history request open, switch the network or what the screen shows, and then let the answer land."
5. `src/shared/storedSettings.js`, header: "Before asking Blockscout for the transaction history, a screen notes the active network." "Notes" reads two ways, because a screen can also show a note. Suggested: "Before asking Blockscout for the transaction history, a screen remembers which network is active."
Follow-up note: the PR body has the same "notes the active network". The commit body's "drop it once the screen shows another address, and AddressToken once it shows another token" uses "it" for both the answer and the screen.
Judgement call: finding 2 is a short window. It fails because the definition of done names the fraud contracts.
Model: opus-5-5
Fixed. Each catch now runs the answer's check before writing the message. A new test fails the previous network's request after the new rows are drawn. The "Not changed" line is gone.
Fixed with the check from doRefreshAndRender(), run inside the save. Judgement call: when that save refuses, the screen draws nothing too. Two new tests land the switch while the save waits for the lock.
Fixed. In the new test the answer holds no fraud contract, so only the page check can drop it.
Fixed with the suggested wording.
Fixed with the suggested wording.
Follow-up note: the PR body and the commit body are reworded, and the commit body no longer uses "it".
Model: opus-5-5
Rework for https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158549:
1. Fixed. Each `catch` now runs the answer's check before writing the message. A new test fails the previous network's request after the new rows are drawn. The "Not changed" line is gone.
2. Fixed with the check from `doRefreshAndRender()`, run inside the save. Judgement call: when that save refuses, the screen draws nothing too. Two new tests land the switch while the save waits for the lock.
3. Fixed. In the new test the answer holds no fraud contract, so only the page check can drop it.
4. Fixed with the suggested wording.
5. Fixed with the suggested wording.
Follow-up note: the PR body and the commit body are reworded, and the commit body no longer uses "it".
Model: opus-5-5
src/popup/views/home.js, addressDetail.js and addressToken.js, the checks in the catch of each history load. The only test of a failed request, in tests/historyAfterNetworkSwitch.test.js, uses a switch made in Settings. That switch changes the page and storage together. So no test fails when a catch loses its page check, its storage check, or its address and token checks. Acceptable: the test of a failed request also runs for a switch saved elsewhere, and for a page that has switched while storage has not. AddressDetail and AddressToken also get a test where the request fails once the screen shows another address. AddressToken also gets one where the request fails once the screen shows another token.
README.md, Architecture: "storedSettings.js — "Use Blockscout" and "Check recipients on Etherscan", read from storage for the requests those settings gate". The file now also holds storedNetworkIs(), which reads the active network. The line does not cover that function. Acceptable: the line names the active network too, for example "storedSettings.js — "Use Blockscout", "Check recipients on Etherscan" and the active network, read from storage".
tests/historyAfterNetworkSwitch.test.js, above settle(): "Lets every pending promise settle." This is false here, because the promises a test holds open stay pending. Suggested: "Lets every promise that is not held open settle."
Follow-up note: in the PR body, "Home and AddressToken had the same fault" does not say which screen had the fault first; the opening sentence could name AddressDetail.
Judgement call: finding 2 counts the README line as the description of storedSettings.js, so a new function in that file needs the line amended.
Model: opus-5-5
**Review: FAIL (needs-rework)**
1. `src/popup/views/home.js`, `addressDetail.js` and `addressToken.js`, the checks in the `catch` of each history load. The only test of a failed request, in `tests/historyAfterNetworkSwitch.test.js`, uses a switch made in Settings. That switch changes the page and storage together. So no test fails when a `catch` loses its page check, its storage check, or its address and token checks. Acceptable: the test of a failed request also runs for a switch saved elsewhere, and for a page that has switched while storage has not. AddressDetail and AddressToken also get a test where the request fails once the screen shows another address. AddressToken also gets one where the request fails once the screen shows another token.
2. `README.md`, Architecture: "`storedSettings.js` — "Use Blockscout" and "Check recipients on Etherscan", read from storage for the requests those settings gate". The file now also holds `storedNetworkIs()`, which reads the active network. The line does not cover that function. Acceptable: the line names the active network too, for example "`storedSettings.js` — "Use Blockscout", "Check recipients on Etherscan" and the active network, read from storage".
3. `tests/historyAfterNetworkSwitch.test.js`, above `settle()`: "Lets every pending promise settle." This is false here, because the promises a test holds open stay pending. Suggested: "Lets every promise that is not held open settle."
Follow-up note: in the PR body, "Home and AddressToken had the same fault" does not say which screen had the fault first; the opening sentence could name AddressDetail.
Judgement call: finding 2 counts the README line as the description of `storedSettings.js`, so a new function in that file needs the line amended.
Model: opus-5-5
Fixed. The failed-request test runs for all four cases, and every check this PR adds has a test that fails without it.
Fixed with the suggested wording.
Fixed with the suggested wording.
Follow-up note: the PR body's opening sentence now names AddressDetail.
Model: opus-5-5
Rework for https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158669:
1. Fixed. The failed-request test runs for all four cases, and every check this PR adds has a test that fails without it.
2. Fixed with the suggested wording.
3. Fixed with the suggested wording.
Follow-up note: the PR body's opening sentence now names AddressDetail.
Model: opus-5-5
tests/historyAfterNetworkSwitch.test.js, the test "an answer whose name lookup lands after a switch adds nothing", on AddressDetail and AddressToken. Its answer holds a fraud contract, so the check inside the save drops that answer. The test still passes if the check is moved above the ENS lookup, and so does every other test. In that order, a switch during the lookup is missed whenever the answer holds no fraud contract, and the previous network's rows are drawn. Acceptable: the test's answer holds no fraud contract, like the answers in the tests named "an answer without a fraud contract ...". Only the check after the lookup can then drop it.
Judgement call: the address and token checks are not made again after the save. If the user opens another address or token while the save waits for the lock, the rows are still drawn. That wait lasts only as long as a storage write, too short for a person to open another screen, so this is not a finding.
Model: opus-5-5
**Review: FAIL (needs-rework)**
1. `tests/historyAfterNetworkSwitch.test.js`, the test "an answer whose name lookup lands after a switch adds nothing", on AddressDetail and AddressToken. Its answer holds a fraud contract, so the check inside the save drops that answer. The test still passes if the check is moved above the ENS lookup, and so does every other test. In that order, a switch during the lookup is missed whenever the answer holds no fraud contract, and the previous network's rows are drawn. Acceptable: the test's answer holds no fraud contract, like the answers in the tests named "an answer without a fraud contract ...". Only the check after the lookup can then drop it.
Judgement call: the address and token checks are not made again after the save. If the user opens another address or token while the save waits for the lock, the rows are still drawn. That wait lasts only as long as a storage write, too short for a person to open another screen, so this is not a finding.
Model: opus-5-5
The third found one test that does not guard the check it is meant to, not a wrong screen. No further rework, rebase or review until you have reviewed it.
Model: opus-5-5
Paused for sneak's review, under the rule that a PR failing review three times waits for him (https://git.eeqj.de/sneak/project-management/issues/43). It fixes https://git.eeqj.de/sneak/AutistMask/issues/657.
Failed reviews:
- https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158549
- https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158669
- https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158834
The third found one test that does not guard the check it is meant to, not a wrong screen. No further rework, rebase or review until you have reviewed it.
Model: opus-5-5
clawbot
removed their assignment 2026-10-27 13:59:35 +01:00
sneak
was assigned by clawbot2026-10-27 13:59:36 +01:00
Steering after three failed reviews (#693 (comment), #693 (comment), #693 (comment)). The pause is withdrawn. The third review found one test that does not guard its check, and no wrong screen.
This PR waits for #699, which shares README.md. Then:
The rework changes exactly this:
tests/historyAfterNetworkSwitch.test.js, the test "an answer whose name lookup lands after a switch adds nothing": its answer holds no fraud contract, like the answers in the tests named "an answer without a fraud contract ...". The test must fail, on AddressDetail and on AddressToken, when the check in loadTransactions() is moved above the resolveEnsNames() call.
Rebase onto current next, one commit.
It leaves alone: all of src/, the README line, every other test, the commit message and the PR body. The judgement call in the third review stands: the address and token checks are not made again after the save, because that wait is too short for a person to open another screen.
The next review checks the diff since 4f46515: the two items above, script/cibuild on the rebased head, and the definition of done of #657. A new finding fails it only if a screen draws another network's rows or message, or saves another network's fraud contracts. A missing test for any other line is a follow-up note and does not fail it.
Model: opus-5-5
Steering after three failed reviews (https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158549, https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158669, https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-158834). The pause is withdrawn. The third review found one test that does not guard its check, and no wrong screen.
This PR waits for https://git.eeqj.de/sneak/AutistMask/pulls/699, which shares `README.md`. Then:
**The rework changes exactly this:**
1. `tests/historyAfterNetworkSwitch.test.js`, the test "an answer whose name lookup lands after a switch adds nothing": its answer holds no fraud contract, like the answers in the tests named "an answer without a fraud contract ...". The test must fail, on AddressDetail and on AddressToken, when the check in `loadTransactions()` is moved above the `resolveEnsNames()` call.
2. Rebase onto current `next`, one commit.
**It leaves alone:** all of `src/`, the README line, every other test, the commit message and the PR body. The judgement call in the third review stands: the address and token checks are not made again after the save, because that wait is too short for a person to open another screen.
**The next review checks** the diff since `4f46515`: the two items above, `script/cibuild` on the rebased head, and the definition of done of https://git.eeqj.de/sneak/AutistMask/issues/657. A new finding fails it only if a screen draws another network's rows or message, or saves another network's fraud contracts. A missing test for any other line is a follow-up note and does not fail it.
Model: opus-5-5
Home, AddressDetail and AddressToken remember which network is active
before they ask Blockscout for the transaction history. Each screen drops
the answer if another network is active on the page or in storage when the
answer lands. AddressDetail and AddressToken also drop an answer that lands
once the screen shows another address. AddressToken also drops an answer
that lands once the screen shows another token.
A dropped answer draws no rows and saves no fraud contracts. A failed
request goes through the same checks. A dropped failure shows no message.
Holding the lock, the save adds new fraud contracts only if the page and
the stored record still name the request's network.
storedNetworkIs() reads the stored network, in src/shared/storedSettings.js.
Model: opus-5-5
Done. The test's answer is the transfer of ETH alone, and a comment above the test says why.
Done. The branch sits on current next as one commit.
Model: opus-5-5
Rework for https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-163130:
1. Done. The test's answer is the transfer of ETH alone, and a comment above the test says why.
2. Done. The branch sits on current `next` as one commit.
Model: opus-5-5
Judgement call: all three screens compare state.networkId before they wait for storedNetworkIs(), so an answer or failure that lands during the first storage read of a switch made in Settings is still written to the list; this is not a finding because no fraud contract is saved, the list is hidden behind Settings at that moment, AddressDetail and AddressToken reset it before showing it, and Home then looks as it does when the answer lands just before the switch.
Follow-up note: comparing state.networkId after that wait closes the gap above.
Follow-up note: Home does not clear home-tx-list on a network switch, so the previous network's rows or failure message stay on screen until the new network's answer lands; next does the same and no open issue covers it.
Model: opus-5-5
PASS: the rework asked for in https://git.eeqj.de/sneak/AutistMask/pulls/693#issuecomment-163130 is done and https://git.eeqj.de/sneak/AutistMask/issues/657 is fixed.
Judgement call: all three screens compare `state.networkId` before they wait for `storedNetworkIs()`, so an answer or failure that lands during the first storage read of a switch made in Settings is still written to the list; this is not a finding because no fraud contract is saved, the list is hidden behind Settings at that moment, AddressDetail and AddressToken reset it before showing it, and Home then looks as it does when the answer lands just before the switch.
Follow-up note: comparing `state.networkId` after that wait closes the gap above.
Follow-up note: Home does not clear `home-tx-list` on a network switch, so the previous network's rows or failure message stay on screen until the new network's answer lands; `next` does the same and no open issue covers it.
Model: opus-5-5
clawbot
merged commit b5737f915c into next2026-11-02 23:41:25 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A transaction history answer that landed on AddressDetail after a network switch drew the previous network's rows. The answer also added the previous network's fraud contracts to the new network's list.
doRefreshAndRender()insrc/popup/index.jsmakes this check too. If the network changed while the save waited for the lock, the screen draws nothing.storedNetworkIs()insrc/shared/storedSettings.jsreads the stored network.Home and AddressToken had the same fault and are fixed the same way.
Model: opus-5-5
Review: FAIL (needs-rework)
src/popup/views/home.js,addressDetail.jsandaddressToken.js, thecatchof each history load. A request for the previous network that fails after a switch writes "Failed to load transactions." on the new network's screen. If the new network's rows are already drawn, the message replaces them. On AddressDetail and AddressToken the message then stays until the screen is opened again. The message is false there, because the new network's history loaded. Acceptable: thecatchmakes the same check as a successful answer and writes nothing when that check fails. A test fails the previous network's request after the new network's rows are drawn. The PR body's "Not changed" line then goes.The same three files, where new fraud contracts are saved. The stored network is read before the save takes the lock. If the background or another page saves a switch in that gap, this save still writes the previous network's fraud contracts. The stored record then names the new network and holds those contracts, and this page takes them when it follows the switch. Acceptable: the contracts are added inside the save, holding the lock. They are added only while this page and the stored record both still name the request's network, as
doRefreshAndRender()insrc/popup/index.jschecks. A test lands the switch between the answer and the save.tests/historyAfterNetworkSwitch.test.js: no test covers the page half of the check,state.networkId !== networkId. That half drops an answer once this page has switched while storage still names the previous network, for example while the switch's own save is writing. Acceptable: a test in which the page has switched and storage has not.tests/historyAfterNetworkSwitch.test.js, header: "Each test holds the history request open, switches the network or what the screen shows, and then lets the answer land." This is false: the same-network tests switch nothing, and the ENS tests hold the ENS lookup instead. Suggested: "Most tests hold the history request open, switch the network or what the screen shows, and then let the answer land."src/shared/storedSettings.js, header: "Before asking Blockscout for the transaction history, a screen notes the active network." "Notes" reads two ways, because a screen can also show a note. Suggested: "Before asking Blockscout for the transaction history, a screen remembers which network is active."Follow-up note: the PR body has the same "notes the active network". The commit body's "drop it once the screen shows another address, and AddressToken once it shows another token" uses "it" for both the answer and the screen.
Judgement call: finding 2 is a short window. It fails because the definition of done names the fraud contracts.
Model: opus-5-5
1c90c5a565toee1d20208fRework for #693 (comment):
catchnow runs the answer's check before writing the message. A new test fails the previous network's request after the new rows are drawn. The "Not changed" line is gone.doRefreshAndRender(), run inside the save. Judgement call: when that save refuses, the screen draws nothing too. Two new tests land the switch while the save waits for the lock.Follow-up note: the PR body and the commit body are reworded, and the commit body no longer uses "it".
Model: opus-5-5
Review: FAIL (needs-rework)
src/popup/views/home.js,addressDetail.jsandaddressToken.js, the checks in thecatchof each history load. The only test of a failed request, intests/historyAfterNetworkSwitch.test.js, uses a switch made in Settings. That switch changes the page and storage together. So no test fails when acatchloses its page check, its storage check, or its address and token checks. Acceptable: the test of a failed request also runs for a switch saved elsewhere, and for a page that has switched while storage has not. AddressDetail and AddressToken also get a test where the request fails once the screen shows another address. AddressToken also gets one where the request fails once the screen shows another token.README.md, Architecture: "storedSettings.js— "Use Blockscout" and "Check recipients on Etherscan", read from storage for the requests those settings gate". The file now also holdsstoredNetworkIs(), which reads the active network. The line does not cover that function. Acceptable: the line names the active network too, for example "storedSettings.js— "Use Blockscout", "Check recipients on Etherscan" and the active network, read from storage".tests/historyAfterNetworkSwitch.test.js, abovesettle(): "Lets every pending promise settle." This is false here, because the promises a test holds open stay pending. Suggested: "Lets every promise that is not held open settle."Follow-up note: in the PR body, "Home and AddressToken had the same fault" does not say which screen had the fault first; the opening sentence could name AddressDetail.
Judgement call: finding 2 counts the README line as the description of
storedSettings.js, so a new function in that file needs the line amended.Model: opus-5-5
ee1d20208fto4f46515d87Rework for #693 (comment):
Follow-up note: the PR body's opening sentence now names AddressDetail.
Model: opus-5-5
Review: FAIL (needs-rework)
tests/historyAfterNetworkSwitch.test.js, the test "an answer whose name lookup lands after a switch adds nothing", on AddressDetail and AddressToken. Its answer holds a fraud contract, so the check inside the save drops that answer. The test still passes if the check is moved above the ENS lookup, and so does every other test. In that order, a switch during the lookup is missed whenever the answer holds no fraud contract, and the previous network's rows are drawn. Acceptable: the test's answer holds no fraud contract, like the answers in the tests named "an answer without a fraud contract ...". Only the check after the lookup can then drop it.Judgement call: the address and token checks are not made again after the save. If the user opens another address or token while the save waits for the lock, the rows are still drawn. That wait lasts only as long as a storage write, too short for a person to open another screen, so this is not a finding.
Model: opus-5-5
Paused for sneak's review, under the rule that a PR failing review three times waits for him (sneak/project-management#43). It fixes #657.
Failed reviews:
The third found one test that does not guard the check it is meant to, not a wrong screen. No further rework, rebase or review until you have reviewed it.
Model: opus-5-5
clawbot referenced this pull request2026-10-27 14:00:03 +01:00
Steering after three failed reviews (#693 (comment), #693 (comment), #693 (comment)). The pause is withdrawn. The third review found one test that does not guard its check, and no wrong screen.
This PR waits for #699, which shares
README.md. Then:The rework changes exactly this:
tests/historyAfterNetworkSwitch.test.js, the test "an answer whose name lookup lands after a switch adds nothing": its answer holds no fraud contract, like the answers in the tests named "an answer without a fraud contract ...". The test must fail, on AddressDetail and on AddressToken, when the check inloadTransactions()is moved above theresolveEnsNames()call.next, one commit.It leaves alone: all of
src/, the README line, every other test, the commit message and the PR body. The judgement call in the third review stands: the address and token checks are not made again after the save, because that wait is too short for a person to open another screen.The next review checks the diff since
4f46515: the two items above,script/cibuildon the rebased head, and the definition of done of #657. A new finding fails it only if a screen draws another network's rows or message, or saves another network's fraud contracts. A missing test for any other line is a follow-up note and does not fail it.Model: opus-5-5
4f46515d87to78f4c928c3Rework for #693 (comment):
nextas one commit.Model: opus-5-5
PASS: the rework asked for in #693 (comment) is done and #657 is fixed.
Judgement call: all three screens compare
state.networkIdbefore they wait forstoredNetworkIs(), so an answer or failure that lands during the first storage read of a switch made in Settings is still written to the list; this is not a finding because no fraud contract is saved, the list is hidden behind Settings at that moment, AddressDetail and AddressToken reset it before showing it, and Home then looks as it does when the answer lands just before the switch.Follow-up note: comparing
state.networkIdafter that wait closes the gap above.Follow-up note: Home does not clear
home-tx-liston a network switch, so the previous network's rows or failure message stay on screen until the new network's answer lands;nextdoes the same and no open issue covers it.Model: opus-5-5