check / check (push) Waiting to run
After a join request returned, joinChannel made tab number tabsRef.current.length active. When the user's own JOIN event had already added the tab, or the tab was already open, that index was one past the last tab. The view then fell back to the Server tab and typed lines were dropped. joinChannel now finds the channel's tab by name inside its own tab-list update and makes that tab active there. Preact runs that update at once on the newest tab list, so the position is right even when the JOIN event, or the close of another tab, landed first. Model: opus-5-5