From 8d92028c0a4eeb19258e81156c5b9efc3c1d1f88 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 12 Nov 2026 23:35:08 -0700 Subject: Leaving a group from its own screen no longer breaks the app. "Tried to leave but got this" (Adam, 2026-11-13): ReferenceError "Cannot access 'Q' before initialization" in the group screen. wnView declares `const wn = gClient(g)` for the group on screen, which shadows the module's wn for the whole function; the "groups still loading" test above it (`!wn || … || !ng || ngLoading`, widened for relay groups in 3197c70) ran when the group was gone — just left — and read the inner wn before it was set. The test now lives outside the function (groupClientsLoading). nip29-group-test leaves the dead-relay group from its own screen on the second device: "Something broke" without this, back to Messages with it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VMan6UKGJyuGyZFxddYRxS --- tools/nip29-group-test.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tools') diff --git a/tools/nip29-group-test.js b/tools/nip29-group-test.js index de9b8e1..ddc7258 100644 --- a/tools/nip29-group-test.js +++ b/tools/nip29-group-test.js @@ -131,6 +131,13 @@ try { let dead = ''; for (let i = 0; i < 60 && !/answering/.test(dead); i++) { dead = await p2.evaluate(() => [...document.querySelectorAll('.chat-thread-row')].find((r) => r.textContent.includes('deadgroup'))?.textContent || ''); if (!/answering/.test(dead)) await sleep(250); } check("a group on a relay that's gone says so", /gone\.invalid isn't answering/.test(dead), dead.slice(0, 80)); + // leaving it from its own screen ("Tried to leave but got this": a + // ReferenceError on the screen of a group that had just gone) + await p2.evaluate(() => [...document.querySelectorAll('.chat-thread-row')].find((r) => r.textContent.includes('deadgroup'))?.click()); await sleep(800); + await p2.click('[aria-label="Leave group"]'); await sleep(200); + await p2.click('[aria-label="Leave group"]'); await sleep(2500); + const after = await p2.evaluate(() => document.body.innerText); + check('leaving a group from its screen goes back to Messages', !/something broke/i.test(after) && !/deadgroup/.test(after) && /new group/i.test(after), after.slice(0, 120)); await ctx.close(); } -- cgit v1.2.3