diff options
| author | Adam Soltys <[email protected]> | 2026-09-28 23:29:55 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-09-28 23:29:55 -0700 |
| commit | d5598a131a9d160b929ff7ccbd650a4ef57b21c0 (patch) | |
| tree | 4514d9524c2724a191790de6a473c4a375bdbe61 /tools | |
| parent | 73ab54a004113b32a9a12661e7e7eb9151999ee3 (diff) | |
| download | coinosv3-d5598a131a9d160b929ff7ccbd650a4ef57b21c0.tar.gz coinosv3-d5598a131a9d160b929ff7ccbd650a4ef57b21c0.zip | |
"Save feed" on someone's timeline adds it to your feeds at once, instead of an editor listing every person they follow.
The editor copied their whole follow list into the form, one row each —
long enough to freeze the browser. A saved timeline now keeps only the
person (of: pk); their follow list is read from the relays when it is
opened, so it stays small in sync and follows who they follow. Its ⋯
offers Delete rather than Edit, and list pickers leave it out.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Du1qT1wbkYwYK6zkGH79Rp
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/avatar-profile-test.js | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/avatar-profile-test.js b/tools/avatar-profile-test.js index 0f59e10..6e84429 100644 --- a/tools/avatar-profile-test.js +++ b/tools/avatar-profile-test.js @@ -76,6 +76,20 @@ try { await sleep(1500); const chip = await page.evaluate(() => document.querySelector('.feed-chip.on')?.textContent || null); check('someone’s timeline has a labelled chip', !!chip && /Bob Poster/.test(chip), JSON.stringify(chip)); + + // ⋯ → Save feed: straight into the chips, no editor listing their follows + await page.evaluate((l) => document.querySelector('button[aria-label="' + l + '"]').click(), 'Feed options'); + await sleep(500); + const saved = await click('save feed'); + await sleep(1000); + const savedState = await page.evaluate(() => ({ editor: /New feed/.test(document.body.innerText), chips: [...document.querySelectorAll('.feed-chip')].map((c) => c.textContent), on: document.querySelector('.feed-chip.on')?.textContent })); + check('“Save feed” on a timeline saves it without the editor', saved && !savedState.editor && /Bob Poster/.test(savedState.on || ''), JSON.stringify(savedState)); + await page.reload({ waitUntil: 'domcontentloaded' }); + await waitText('receive', 20000); + await page.evaluate(() => document.querySelector('.app-bottom-nav .app-nav-button').click()); + await sleep(2000); + const kept = await page.evaluate(() => [...document.querySelectorAll('.feed-chip')].map((c) => c.textContent)); + check('...and it is still among the feeds after a reload', kept.some((c) => /(Bob Poster|npub1hwam).*’s timeline/.test(c)), JSON.stringify(kept)); } finally { await browser.close(); server.stop(true); } console.log(ok ? '\n✅ a face opens its profile at the top' : '\n❌ failed'); process.exit(ok ? 0 : 1); |
