From ad081f1a9342071650a515dd324b4378b17931b9 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Tue, 9 Jun 2026 17:43:09 -0700 Subject: [PATCH] [eric] frontend: parked cards must not arm the Windows webview crash marker, a phantom strike locked Windows into iframes --- .../src/app/pages/Dashboard/cards/BrowserCard.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/pages/Dashboard/cards/BrowserCard.tsx b/frontend/src/app/pages/Dashboard/cards/BrowserCard.tsx index 2ec024f5..f21d1ce4 100644 --- a/frontend/src/app/pages/Dashboard/cards/BrowserCard.tsx +++ b/frontend/src/app/pages/Dashboard/cards/BrowserCard.tsx @@ -190,12 +190,6 @@ const BrowserCard: React.FC = ({ isSelected = false, isHighlighted = false, multiDragDelta, onCardSelect, onDragStart, onDragMove, onDragEnd, cardZOrder = 0, onDoubleClick, onBringToFront, }) => { - // Arm the Windows webview crash-safety marker synchronously, before React commits - // the below. Cleared on dom-ready; a leftover marker next launch tells - // windowsWebviewEnabled() the mount crashed, so it falls back to the iframe. - // Idempotent, no-op on Mac and on the iframe path. See the gate block above. - if (isElectron && isWindows) armWindowsWebviewPending(); - const c = useClaudeTokens(); const dispatch = useAppDispatch(); const scrollOverlayRef = useOverlayScrollPassthrough(isSelected); @@ -222,6 +216,13 @@ const BrowserCard: React.FC = ({ const suspendedSnap = useAppSelector((state) => state.dashboardLayout.suspendedBrowserCards[browserId]); + // Arm the Windows webview crash-safety marker synchronously, before React commits + // the below. Cleared on dom-ready; a leftover marker next launch tells + // windowsWebviewEnabled() the mount crashed, so it falls back to the iframe. + // MUST skip parked cards: they render no webview, so dom-ready never fires and a + // stale marker reads as a phantom crash that locks Windows out of webviews. + if (isElectron && isWindows && !suspendedSnap) armWindowsWebviewPending(); + const activity = useBrowserActivity(browserId); const agentRunning = browserAgentSession?.status === 'running'; const agentActive = activity.active || agentRunning;