From fe569ffa701e3f9b54330def31193217eb470ab9 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 2 Oct 2026 09:26:56 -0700 Subject: Balance card gear replaces Accounts; Spending's coins live behind it - The "Accounts" pill on each balance face is now a gear. It opens that face's settings: Spending leads with its coins (renewal, the co-operative move to Savings, unilateral exit), then Security (lock, change password), the recovery phrase, auto-logout; Savings adds its public key. A wallet with no nostr identity also gets sign-in and log-out there, since it has no profile page to hold them. - The exit cost is no longer said under the balance; the Spending settings state it, always, not only when coin chains run deep. - The lone Manage link under the balance is gone (the gear is the way in); warning notices that are about the coins link to the same page. - The Accounts list, Add wallet and Delete all are no longer reached from the wallet (Delete all stays behind profile > Log out > forget). - Tests follow the gear: padlock-ask, lock-wallet and account-access pass again; cooperative-exit-ui clicks the Spending gear. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Dmcrt9KyNDKVWFKnb8BREo --- tools/lock-wallet-test.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'tools/lock-wallet-test.js') diff --git a/tools/lock-wallet-test.js b/tools/lock-wallet-test.js index 13d2b91..107ccd0 100644 --- a/tools/lock-wallet-test.js +++ b/tools/lock-wallet-test.js @@ -82,8 +82,8 @@ try { await sleep(1000); console.log('\n[the padlock still asks — locking needs a password]'); - // the padlock lives on the Accounts page (the balance card's switcher opens it) - await page.evaluate(() => document.querySelector('.balance-switch')?.click()); + // the padlock lives on the wallet settings page (the balance card's gear) + await page.evaluate(() => document.querySelector('.balance-gear')?.click()); await sleep(600); await page.evaluate(() => { const b = [...document.querySelectorAll('button')].find((n) => n.title === 'Lock wallet'); if (b) b.click(); }); await sleep(600); @@ -91,7 +91,7 @@ try { check('padlock asks even after "Not now"', /protect this device/i.test(txt), txt.slice(0, 120).replace(/\n+/g, ' | ')); await click('button', 'Not now'); await sleep(600); - check('and declining lands back on the Accounts page', /add account/i.test(await body())); + check('and declining lands back on the wallet settings', /security/i.test(await body())); console.log('\n[now with a password]'); await click('button', 'Change password'); @@ -139,13 +139,17 @@ try { check('backing out deletes nothing', (await vaultSize()) > 0); console.log('\n[delete all is the destructive one]'); - await page.evaluate(() => document.querySelector('.balance-switch')?.click()); + // the same road as above, this time all the way: profile → Log out → + // forget all data → the warning → Delete all + await page.evaluate(() => document.querySelector('.header-avatar')?.click()); await sleep(800); - await click('button', 'Delete all'); + await click('button', 'Log out'); + await sleep(500); + await click('button', 'forget all data'); await sleep(600); txt = await body(); check('it warns first', /delete all/i.test(txt) && /(delete|remove|erase|wipe|lose)/i.test(txt), txt.slice(0, 160).replace(/\n+/g, ' | ')); - await page.evaluate(() => { const b = [...document.querySelectorAll('.btn-primary')].find((e) => /delete all/i.test(e.textContent)); if (b) b.click(); }); + await page.evaluate(() => { const b = [...document.querySelectorAll('.confirm-pop button')].find((e) => /delete all/i.test(e.textContent)); if (b) b.click(); }); await sleep(1200); txt = await body(); check('everything is gone', (await vaultSize()) === 0); -- cgit v1.2.3