{"record":{"id":"f26a69ab97391155","repo":"tinyhumansai/openhuman","slug":"core-state-bootstrap-budget-exhausted-continuin","errorCode":null,"errorMessage":"[core-state] bootstrap budget exhausted; continuing with backoff. Suppressing further warnings until recovery:","messagePattern":"\\[core-state\\] bootstrap budget exhausted; continuing with backoff\\. Suppressing further warnings until recovery:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/providers/CoreStateProvider.tsx","lineNumber":536,"sourceCode":"  );\n\n  useEffect(() => {\n    let cancelled = false;\n    const doRefresh = async () => {\n      try {\n        await refresh();\n        bootstrapFailCountRef.current = 0;\n      } catch (error) {\n        if (!cancelled) {\n          bootstrapFailCountRef.current += 1;\n          const safe = sanitizeError(error);\n          const debugMessage = coreStatePollFailureDebugMessage(bootstrapFailCountRef.current);\n          if (debugMessage) {\n            log('%s error=%O', debugMessage, safe);\n          }\n          const warningMessage = coreStatePollFailureWarningMessage(bootstrapFailCountRef.current);\n          if (warningMessage) {\n            console.warn(warningMessage, safe);\n          }\n          if (bootstrapFailCountRef.current >= MAX_BOOTSTRAP_RETRIES) {\n            commitState(previous => {\n              if (previous.isBootstrapping) {\n                return { ...previous, isBootstrapping: false };\n              }\n              return previous;\n            });\n          }\n        }\n      }\n    };\n\n    const load = async () => {\n      await doRefresh();\n      if (!cancelled) {\n        const next = getCoreStateSnapshot();\n        if (","sourceCodeStart":518,"sourceCodeEnd":554,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/app/src/providers/CoreStateProvider.tsx#L518-L554","documentation":"CoreStateProvider bootstrap refresh: the retry budget (MAX_BOOTSTRAP_RETRIES) was exhausted, so the warning message escalates and the poller backs off instead of hammering the core, suppressing further warning noise until a successful refresh resets the counter. The app keeps running on the stale/last snapshot; recovery is automatic once the core answers again.","triggerScenarios":"Thrown at app/src/providers/CoreStateProvider.tsx:536 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the core process: is it running, did it crash, is the RPC port/token valid","Restart the core (or the app) if it is wedged — recovery re-arms on the next successful refresh","Check core logs for the underlying RPC failure once warning suppression kicks in"],"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-14T00:17:10.932Z"}