tinyhumansai/openhuman · error

[privacy] failed to load capability catalog:

Error message

[privacy] failed to load capability catalog:

What it means

The Privacy panel's initial fetch of the capability catalog (listCapabilities) rejected, so the annotated-capability list could not be rendered. The panel switches loadState to 'error' (rendering an error state instead of the list) and the cancelled flag guards against a late rejection after unmount. Causes: core RPC unreachable, auth expired, or the capabilities controller erroring.

Source

Thrown at app/src/components/settings/panels/PrivacyPanel.tsx:75

  const [capabilities, setCapabilities] = useState<AnnotatedCapability[]>([]);
  const [loadState, setLoadState] = useState<'loading' | 'ready' | 'error'>('loading');

  useEffect(() => {
    let cancelled = false;
    log('[privacy] fetching capability catalog');
    listCapabilities()
      .then(items => {
        if (cancelled) return;
        const annotated = items.filter(
          (c): c is AnnotatedCapability => c.privacy !== undefined && c.privacy !== null
        );
        log('[privacy] catalog ready', { total: items.length, annotated: annotated.length });
        setCapabilities(annotated);
        setLoadState('ready');
      })
      .catch(err => {
        if (cancelled) return;
        console.warn('[privacy] failed to load capability catalog:', err);
        setLoadState('error');
      });
    return () => {
      cancelled = true;
    };
  }, []);

  const handleToggleAnalytics = async () => {
    const newValue = !analyticsEnabled;
    try {
      await setAnalyticsEnabled(newValue);
    } catch (error) {
      console.warn('[privacy] failed to persist analytics setting:', error);
    }
  };

  const handleToggleMeetAutoHandoff = async () => {
    const newValue = !meetAutoHandoff;

View on GitHub (pinned to 7491200858)

Solutions

  1. Check the warned error — SessionExpired means re-auth is needed before the catalog loads
  2. Confirm the core process is healthy (Settings diagnostics or core log)
  3. Remount/reopen the Privacy panel to re-trigger the useEffect fetch once the cause is fixed
  4. If loadState stays 'error', inspect the core-side capabilities controller log for the failure
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at app/src/components/settings/panels/PrivacyPanel.tsx:75 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/fdf9011446b391f8. Report an issue: GitHub.