{"record":{"id":"3bf299a22ec5cb55","repo":"tinyhumansai/openhuman","slug":"app-update-hook-check-failed","errorCode":null,"errorMessage":"[app-update] hook.check: failed","messagePattern":"\\[app-update\\] hook\\.check: failed","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/hooks/useAppUpdate.ts","lineNumber":190,"sourceCode":"    setError(null);\n    try {\n      const result = await checkAppUpdate();\n      if (!mountedRef.current) return result;\n      if (result?.available) {\n        console.info(\n          `[app-update] hook.check: update available ${result.current_version} -> ${result.available_version}`\n        );\n        setInfo(result);\n        setPhase('available');\n      } else {\n        console.debug('[app-update] hook.check: up to date');\n        setInfo(result);\n        setPhase('up_to_date');\n      }\n      return result;\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      console.warn('[app-update] hook.check: failed', message);\n      if (mountedRef.current) {\n        setError(message);\n        setPhase('error');\n      }\n      return null;\n    }\n  }, []);\n\n  /** Download bytes in the background. Normally fires automatically. */\n  const download = useCallback(async (): Promise<void> => {\n    if (!isTauri()) {\n      console.debug('[app-update] hook.download: skipped — not running in Tauri');\n      return;\n    }\n    if (downloadInFlightRef.current) {\n      console.debug('[app-update] hook.download: already in flight');\n      return;\n    }","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/app/src/hooks/useAppUpdate.ts#L172-L208","documentation":"Failure of the manual update check in useAppUpdate.hook.check: the checkAppUpdate Tauri invoke rejected (network failure, updater plugin not initialized, or a malformed release feed). The catch normalizes the error to a message, sets the error state and phase so the UI shows a retry affordance instead of a stuck 'checking' spinner.","triggerScenarios":"Thrown at app/src/hooks/useAppUpdate.ts:190 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry via the UI's error-state action — transient network failures are the common cause","Verify the updater endpoint configuration (latest.json URL) is reachable","Check that the tauri-plugin-updater is registered in the shell build"],"exampleFix":null,"handlingStrategy":"try-catch","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-14T00:17:10.932Z"}