From 7caccadcd7b0c84b134be1b7f19d3833d27bd6b9 Mon Sep 17 00:00:00 2001 From: robertjamesprior <83608739+robertjamesprior@users.noreply.github.com> Date: Tue, 13 Oct 2026 19:11:39 +0000 Subject: [PATCH 1/2] Correct the media reason row to cover through connected --- browsers/live-view.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browsers/live-view.mdx b/browsers/live-view.mdx index d520bd98..3302a2ea 100644 --- a/browsers/live-view.mdx +++ b/browsers/live-view.mdx @@ -109,7 +109,7 @@ Both terminal events carry the same `reason`, so branch on it instead of matchin | --- | --- | | `transport` | the socket never opened inside its bound, or closed before signaling | | `signaling` | the socket opened but no offer arrived inside its bound | -| `media` | a peer exists but ICE never reached `checking` inside its bound | +| `media` | a peer exists but ICE never reached `connected` inside its bound — this covers a peer that stalls after `checking` | | `peer` | peer construction or the remote offer threw | | `unsupported` | the browser has no `RTCPeerConnection` | | `server` | the server closed the connect | From df0367d8bcd682e17b682533ead76eab142e5a60 Mon Sep 17 00:00:00 2001 From: robertjamesprior <83608739+robertjamesprior@users.noreply.github.com> Date: Wed, 14 Oct 2026 18:03:46 +0000 Subject: [PATCH 2/2] Cover `completed` in the media reason row and scope the timeout warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `media` reason matches a peer that reaches neither `connected` nor `completed` inside its bound — `completed` arrives without `connected` when gathering is already done. The warning under the watchdog example describes the client before this fix, where `checking` cleared the only watchdog, so scope it to images without the connect-failure fix. --- browsers/live-view.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browsers/live-view.mdx b/browsers/live-view.mdx index 3302a2ea..2dc7af46 100644 --- a/browsers/live-view.mdx +++ b/browsers/live-view.mdx @@ -109,7 +109,7 @@ Both terminal events carry the same `reason`, so branch on it instead of matchin | --- | --- | | `transport` | the socket never opened inside its bound, or closed before signaling | | `signaling` | the socket opened but no offer arrived inside its bound | -| `media` | a peer exists but ICE never reached `connected` inside its bound — this covers a peer that stalls after `checking` | +| `media` | a peer exists but ICE never reached `connected` or `completed` inside its bound — this covers a peer that stalls after `checking` | | `peer` | peer construction or the remote offer threw | | `unsupported` | the browser has no `RTCPeerConnection` | | `server` | the server closed the connect | @@ -161,7 +161,7 @@ window.addEventListener('message', (event) => { arm(); ``` -Do not gate on `KERNEL_CONNECTION_TIMEOUT` alone. The watchdog behind it is cleared once negotiation begins, so a connection that stalls after that point never emits it. Log it alongside `KERNEL_PLAYING` to capture the connection state at the moment things stalled. +Do not gate on `KERNEL_CONNECTION_TIMEOUT` alone. On images without the connect-failure fix, the watchdog behind it is cleared once negotiation begins, so a connection that stalls after that point never emits it. Log it alongside `KERNEL_PLAYING` to capture the connection state at the moment things stalled. `KERNEL_CONNECTION_FAILED` and `KERNEL_CONNECTION_TIMEOUT` are both terminal, and a failed connect posts one of them, never both. Whichever arrives, nothing further happens until the iframe reloads. Surface a persistent message rather than remounting blindly: a `peer` or `unsupported` reason is a property of the browser environment, so a remount repeats it, while a `transport` reason is worth one retry.