{"record":{"id":"465e55d7ac0fcfa7","repo":"tinyhumansai/openhuman","slug":"overlay-failed-to-open-core-socket","errorCode":null,"errorMessage":"[overlay] failed to open core socket","messagePattern":"\\[overlay\\] failed to open core socket","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/overlay/OverlayApp.tsx","lineNumber":388,"sourceCode":"        socket.on('connect_error', (err: Error) => {\n          console.debug('[overlay] socket connect error:', err.message);\n        });\n\n        socket.on('disconnect', (reason: string) => {\n          console.debug('[overlay] socket disconnected:', reason);\n        });\n\n        // Core emits each event under both colon and underscore forms\n        // (see `emit_with_aliases` in `src/core/socketio.rs`). Subscribe\n        // only to the canonical colon-delimited form so each signal fires\n        // the handler exactly once.\n        socket.on('dictation:toggle', handleDictationToggle);\n        socket.on('dictation:transcription', handleDictationTranscription);\n        socket.on('overlay:attention', handleAttention);\n\n        socket.connect();\n      } catch (err) {\n        console.warn('[overlay] failed to open core socket', err);\n      }\n    };\n\n    void connect();\n\n    return () => {\n      disposed = true;\n      if (socket) {\n        socket.disconnect();\n        socket = null;\n      }\n      clearDismissTimer();\n    };\n  }, [clearDismissTimer, handleAttention, handleDictationToggle, handleDictationTranscription]);\n\n  // ── Companion state via Tauri event ────────────────────────────────────\n  // The desktop companion now lives shell-side and emits a\n  // `companion://state_changed` Tauri event (camelCase payload) rather than the","sourceCodeStart":370,"sourceCodeEnd":406,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/app/src/overlay/OverlayApp.tsx#L370-L406","documentation":"The overlay window failed to open its core socket connection at setup. The overlay subscribes to the canonical colon-delimited event forms (e.g. dictation:toggle) over this socket; when the connection cannot be established, the overlay's event-driven UI (dictation state, notifications) does not update. Debug-level connect_error/disconnect handlers are installed alongside, so repeated failures are visible in the debug console.","triggerScenarios":"Thrown at app/src/overlay/OverlayApp.tsx:388 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the core process is healthy and the socket endpoint URL/port passed to the overlay is correct","Check for auth rejection during the socket handshake (invalid/expired bearer)","Look at the overlay debug console for the paired 'connect error' messages with the underlying reason","Restarting the app re-initializes the overlay and its socket"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}