# E2E Playwright run — emergency-fix baseline - **Started (UTC):** 2026-08-12T10:58:08Z - **Finished (UTC):** 2026-08-12T11:11:34Z - **Wall duration:** 804.6s (~13.4 min) - **Command:** `npm run test:e2e -- --reporter=list --reporter=json` - **Result:** 65 passed, 0 failed, 0 flaky, 0 skipped ## Verdict **No hard errors.** The suite completed green: 65/65 expected, 0 unexpected, 0 timeouts, 0 flakes. There is nothing to triage as a failing assertion in this run. Slow cases below are the only signals worth watching if “timeouts shouldn’t happen / app should be fast.” ## Errors / failures _None in this run._ Stale note: `test-results/.last-run.json` and `test-results/html-report/` still show an old July failure; this run overrode reporters with list+json and did not refresh those artifacts. ## Slow tests (≥30s) — soft concern | Duration | File | Test | | --- | --- | --- | | 128.2s | `voice/mixed-signal-config-voice.spec.ts` | 8 users with different signal configs can voice, mute, deafen, and chat concurrently | | 125.1s | `voice/multi-signal-eight-user-voice.spec.ts` | keeps 8 users on 2 signal apis while voice, mute, and deafen stay consistent for 20+ seconds | | 53.4s | `auth/user-session-data-isolation.spec.ts` | gives a new user a blank slate and restores only that user local data after account switches | | 33.7s | `chat/chat-message-features.spec.ts` | shows per-server channel lists on first saved-server click | | 30.3s | `chat/multi-client-chat-sync.spec.ts` | syncs messages between same-user devices and late-joining users after offline gaps | These passed, but they are the closest thing to “timeout risk” in a green suite. Multi-user voice specs dominate wall time. ## Per-file totals | File | Tests | Total | Max | | --- | ---: | ---: | ---: | | `voice/mixed-signal-config-voice.spec.ts` | 1 | 128.2s | 128.2s | | `voice/multi-signal-eight-user-voice.spec.ts` | 1 | 125.1s | 125.1s | | `chat/chat-message-features.spec.ts` | 9 | 84.2s | 33.7s | | `auth/user-session-data-isolation.spec.ts` | 2 | 73.2s | 53.4s | | `screen-share/screen-share.spec.ts` | 3 | 49.8s | 23.4s | | `voice/direct-call.spec.ts` | 3 | 31.8s | 17.5s | | `chat/multi-client-chat-sync.spec.ts` | 1 | 30.3s | 30.3s | | `plugins/plugin-api-two-users.spec.ts` | 1 | 27.4s | 27.4s | | `chat/notifications.spec.ts` | 2 | 25.6s | 20.9s | | `voice/data-channel-recovery.spec.ts` | 2 | 22.1s | 12.1s | | `chat/profile-avatar-sync.spec.ts` | 2 | 21.5s | 11.9s | | `settings/connectivity-warning.spec.ts` | 1 | 21.3s | 21.3s | | `voice/voice-full-journey.spec.ts` | 1 | 21.1s | 21.1s | | `chat/server-icon-sync.spec.ts` | 1 | 14.2s | 14.2s | | `chat/dm-flow.spec.ts` | 3 | 11.8s | 4.0s | | `settings/stun-turn-fallback.spec.ts` | 1 | 11.5s | 11.5s | | `auth/login-return-url.spec.ts` | 3 | 9.4s | 3.5s | | `voice/dm-header-call-ring.spec.ts` | 2 | 9.1s | 4.8s | | `auth/multi-device-session.spec.ts` | 1 | 8.6s | 8.6s | | `chat/multi-device-attachment-sharing.spec.ts` | 2 | 8.6s | 4.3s | | `voice/voice-mute-state-reset.spec.ts` | 1 | 6.9s | 6.9s | | `servers/server-discovery-default.spec.ts` | 2 | 6.3s | 3.1s | | `settings/ice-server-settings.spec.ts` | 2 | 6.2s | 3.9s | | `chat/large-generic-file-transfer.spec.ts` | 1 | 5.7s | 5.7s | | `plugins/plugin-manager-ui.spec.ts` | 1 | 4.6s | 4.6s | | `chat/custom-emoji-user-binding.spec.ts` | 1 | 3.9s | 3.9s | | `auth/multi-signal-server-auth.spec.ts` | 1 | 3.8s | 3.8s | | `auth/offline-signal-server-no-login-loop.spec.ts` | 1 | 3.7s | 3.7s | | `chat/local-attachment-persistence.spec.ts` | 1 | 2.8s | 2.8s | | `chat/attachment-only-message-grouping.spec.ts` | 1 | 2.5s | 2.5s | | `mobile/mobile-login-on-startup.spec.ts` | 2 | 2.4s | 1.2s | | `chat/multi-image-gallery.spec.ts` | 1 | 2.3s | 2.3s | | `plugins/plugin-support-api.spec.ts` | 1 | 1.9s | 1.9s | | `mobile/mobile-settings-logout.spec.ts` | 1 | 1.7s | 1.7s | | `mobile/android-app-icon.spec.ts` | 6 | 0.0s | 0.0s | ## All tests by duration | Duration | Status | File | Test | | --- | --- | --- | --- | | 128.2s | passed | `voice/mixed-signal-config-voice.spec.ts` | 8 users with different signal configs can voice, mute, deafen, and chat concurrently | | 125.1s | passed | `voice/multi-signal-eight-user-voice.spec.ts` | keeps 8 users on 2 signal apis while voice, mute, and deafen stay consistent for 20+ seconds | | 53.4s | passed | `auth/user-session-data-isolation.spec.ts` | gives a new user a blank slate and restores only that user local data after account switches | | 33.7s | passed | `chat/chat-message-features.spec.ts` | shows per-server channel lists on first saved-server click | | 30.3s | passed | `chat/multi-client-chat-sync.spec.ts` | syncs messages between same-user devices and late-joining users after offline gaps | | 27.4s | passed | `plugins/plugin-api-two-users.spec.ts` | runs chat, embed, soundboard, and profile APIs between two users | | 23.4s | passed | `screen-share/screen-share.spec.ts` | screen share connection stays stable for 10+ seconds | | 21.3s | passed | `settings/connectivity-warning.spec.ts` | shows warning icon when a peer loses all connections | | 21.1s | passed | `voice/voice-full-journey.spec.ts` | two users register, create server, join voice, and stay connected 10+ seconds with audio | | 20.9s | passed | `chat/notifications.spec.ts` | keeps unread badges visible when a muted channel suppresses desktop popups | | 19.7s | passed | `auth/user-session-data-isolation.spec.ts` | preserves a user saved rooms and local history across app restarts | | 19.6s | passed | `chat/chat-message-features.spec.ts` | syncs messages in a newly created text channel | | 17.5s | passed | `voice/direct-call.spec.ts` | two users can ring, answer, chat, see self voice indicators, and exchange audio | | 15.4s | passed | `screen-share/screen-share.spec.ts` | single user screen share: video and audio flow to receiver, voice audio continues | | 14.2s | passed | `chat/server-icon-sync.spec.ts` | loads the chat-server image for online, late-joining, restarted, and discovery users | | 12.1s | passed | `voice/data-channel-recovery.spec.ts` | heals a three-user voice mesh when one client loses every data channel | | 11.9s | passed | `chat/profile-avatar-sync.spec.ts` | syncs display name and description changes for online and late-joining users and persists after restart | | 11.5s | passed | `settings/stun-turn-fallback.spec.ts` | users with different ICE configs can voice chat together | | 11.1s | passed | `screen-share/screen-share.spec.ts` | multiple users screen share simultaneously | | 10.0s | passed | `voice/data-channel-recovery.spec.ts` | keeps two users hearing each other after a data-channel error and close | | 9.6s | passed | `chat/profile-avatar-sync.spec.ts` | syncs avatar changes for online and late-joining users and persists after restart | | 8.9s | passed | `voice/direct-call.spec.ts` | keeps private-call audio flowing after the data channel closes | | 8.6s | passed | `auth/multi-device-session.spec.ts` | covers identity, chat sync, typing exclusion, and voice exclusivity | | 6.9s | passed | `voice/voice-mute-state-reset.spec.ts` | clears stale mute state after abrupt disconnect and voice rejoin | | 5.7s | passed | `chat/large-generic-file-transfer.spec.ts` | browser receiver can request and download a generic file above the auto-save cap | | 5.5s | passed | `chat/chat-message-features.spec.ts` | edits and removes messages for both users | | 5.3s | passed | `voice/direct-call.spec.ts` | missing and ended private calls do not leave stale call controls behind | | 4.8s | passed | `voice/dm-header-call-ring.spec.ts` | callee homed on another signal server is notified when called via their provisioned actor id | | 4.8s | passed | `chat/notifications.spec.ts` | shows desktop notifications and unread badges for inactive channels | | 4.6s | passed | `chat/chat-message-features.spec.ts` | sends KLIPY GIF messages with mocked API responses | | 4.6s | passed | `plugins/plugin-manager-ui.spec.ts` | installs, grants, activates, and logs an all-API test plugin | | 4.4s | passed | `chat/chat-message-features.spec.ts` | syncs image and file attachments between users | | 4.4s | passed | `chat/chat-message-features.spec.ts` | syncs multi-chunk image attachments byte-identical between users | | 4.3s | passed | `chat/multi-device-attachment-sharing.spec.ts` | only the uploading device claims "Shared from your device"; the second same-user device can request it | | 4.3s | passed | `chat/chat-message-features.spec.ts` | renders link embeds for shared links | | 4.3s | passed | `chat/multi-device-attachment-sharing.spec.ts` | relays file-announce metadata to a sibling device that is already online during upload | | 4.2s | passed | `voice/dm-header-call-ring.spec.ts` | callee is notified when the caller starts the call from the DM chat header | | 4.1s | passed | `chat/chat-message-features.spec.ts` | shows typing indicators to other users | | 4.0s | passed | `chat/dm-flow.spec.ts` | delivers a live DM to the recipient conversation | | 3.9s | passed | `chat/custom-emoji-user-binding.spec.ts` | a second user on the same client does not inherit the first user library | | 3.9s | passed | `chat/dm-flow.spec.ts` | opens a DM from a user card and queues messages while offline | | 3.9s | passed | `settings/ice-server-settings.spec.ts` | allows adding, removing, and reordering ICE servers | | 3.8s | passed | `chat/dm-flow.spec.ts` | shows friend and message actions on the search people list | | 3.8s | passed | `auth/multi-signal-server-auth.spec.ts` | auto-provisions a foreign signal server when a new endpoint is added | | 3.7s | passed | `auth/offline-signal-server-no-login-loop.spec.ts` | does not redirect to authorize login after a foreign server goes offline | | 3.6s | passed | `chat/chat-message-features.spec.ts` | shows local room history on first saved-server click | | 3.5s | passed | `auth/login-return-url.spec.ts` | unwraps nested login returnUrl chains after successful login | | 3.1s | passed | `servers/server-discovery-default.spec.ts` | a fresh account sees public servers in Popular Servers without searching | | 3.1s | passed | `servers/server-discovery-default.spec.ts` | discovery falls back to the public listing when featured/trending routes 404 | | 3.1s | passed | `auth/login-return-url.spec.ts` | redirects unauthenticated /servers visits to login and returns there after login | | 2.8s | passed | `auth/login-return-url.spec.ts` | lets a returning user log back in after an expired session redirect | | 2.8s | passed | `chat/local-attachment-persistence.spec.ts` | remembers sent image and file across a page reload with no peer connected | | 2.5s | passed | `chat/attachment-only-message-grouping.spec.ts` | each caption-less attachment keeps its own message bubble and preview | | 2.3s | passed | `settings/ice-server-settings.spec.ts` | validates TURN entries require credentials | | 2.3s | passed | `chat/multi-image-gallery.spec.ts` | groups three images in one message bubble with a visible grid | | 1.9s | passed | `plugins/plugin-support-api.spec.ts` | covers plugin requirement, event, data, and websocket APIs with the fixture plugin | | 1.7s | passed | `mobile/mobile-settings-logout.spec.ts` | exposes logout in the settings menu on mobile viewports | | 1.2s | passed | `mobile/mobile-login-on-startup.spec.ts` | greets a signed-out mobile visitor on /dashboard with the login screen | | 1.2s | passed | `mobile/mobile-login-on-startup.spec.ts` | greets a signed-out mobile visitor on the app root with the login screen | | 0.0s | passed | `mobile/android-app-icon.spec.ts` | renders the brand mark (white cat on a purple disc) in the launcher bitmap | | 0.0s | passed | `mobile/android-app-icon.spec.ts` | renders the splash art as the brand mark centred on a purple field | | 0.0s | passed | `mobile/android-app-icon.spec.ts` | insets the adaptive foreground so launcher masks do not clip the cat face | | 0.0s | passed | `mobile/android-app-icon.spec.ts` | replaces every stock Capacitor placeholder with the brand asset | | 0.0s | passed | `mobile/android-app-icon.spec.ts` | ships a launcher icon and splash for every required density | | 0.0s | passed | `mobile/android-app-icon.spec.ts` | uses the brand purple as the adaptive-icon background | ## Files in this folder | Path | Purpose | | --- | --- | | `README.md` | This summary | | `00-summary.md` | Short status for handoff/skimming | | `slow-tests.md` | Slow-test detail only | | `parsed-report.json` | Machine-readable extract | | `full-run.log` | Raw Playwright JSON report (+ npm banner) | | `run-started.txt` / `run-finished.txt` | UTC timestamps |