tinyhumansai/openhuman · error

[skills] default channel persist failed:

Error message

[skills] default channel persist failed:

What it means

Persisting the newly selected default channel failed in the Skills page handler: after the single-flight guard admitted the click, the persistence write (persist-first, then update UI) rejected, so the stored default-channel preference may disagree with what the UI shows. The busy flag is cleared in the finally, allowing a retry.

Source

Thrown at app/src/pages/Skills.tsx:559

    },
    [location.pathname, location.search, navigate]
  );
  const dispatch = useAppDispatch();
  const [defaultChannelBusy, setDefaultChannelBusy] = useState<ChannelType | null>(null);
  const handleSetDefaultChannel = useCallback(
    async (channel: ChannelType) => {
      // Single-flight: ignore re-entries while a write is in progress so two
      // back-to-back clicks can't interleave (would leave UI + persisted
      // preference disagreeing on which channel won).
      if (defaultChannelBusy !== null) return;
      setDefaultChannelBusy(channel);
      try {
        // Persist first, then dispatch — on failure the UI keeps the previous
        // selection and the user sees no false-positive flicker.
        await channelConnectionsApi.updatePreferences(channel);
        dispatch(setDefaultMessagingChannel(channel));
      } catch (err) {
        console.warn('[skills] default channel persist failed:', err);
      } finally {
        setDefaultChannelBusy(null);
      }
    },
    [dispatch, defaultChannelBusy]
  );
  const { definitions: channelDefs } = useChannelDefinitions();
  const channelConnections = useAppSelector(state => state.channelConnections);

  const {
    toolkits: composioToolkits,
    // Default to an empty map so the component is resilient when a test
    // mock (or an older hook build) omits the dynamic-catalog field.
    catalogByToolkit: composioCatalogByToolkit = new Map(),
    connectionByToolkit: composioConnectionByToolkit,
    connectionsByToolkit: composioConnectionsByToolkit,
    loading: composioLoading,
    error: composioError,

View on GitHub (pinned to 7491200858)

Solutions

  1. Check the warned error to identify the failing persist layer (core RPC vs backend)
  2. Verify core/session health and retry the channel selection once the cause is fixed
  3. Confirm the persisted preference after retry rather than trusting the UI toggle
  4. Recurrent failures: inspect the core log for the default-channel config write path
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at app/src/pages/Skills.tsx:559 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/2e7dcd7dfba4e6e6. Report an issue: GitHub.