tinyhumansai/openhuman · error

[ptt] thread resolution failed — aborting commit

Error message

[ptt] thread resolution failed — aborting commit

What it means

Resolving or creating the destination thread for a finished push-to-talk turn failed: deps.resolveActiveThreadId() threw, and the fallback path deps.createNewVoiceThread() also threw inside the same try block. The transcribed text is discarded (the commit is aborted) and the error chime plays, because there is no thread to post the message to.

Source

Thrown at app/src/services/pttService.ts:144

    const trimmed = text.trim();

    if (!trimmed) {
      deps.logger.info('[ptt] session dropped — empty transcript', { sessionId });
      await deps.playChime('error');
      return;
    }

    let threadId: string;
    try {
      const resolved = await deps.resolveActiveThreadId();
      if (!resolved) {
        threadId = await deps.createNewVoiceThread();
      } else {
        threadId = resolved;
      }
    } catch (err) {
      deps.logger.warn('[ptt] thread resolution failed — aborting commit', {
        sessionId,
        err: String(err),
      });
      await deps.playChime('error');
      return;
    }

    try {
      await deps.sendMessage({
        threadId,
        body: trimmed,
        metadata: { source: 'ptt', session_id: sessionId },
        speakReply: settings.speakReplies,
      });
    } catch (err) {
      deps.logger.warn('[ptt] sendMessage failed', { sessionId, threadId, err: String(err) });
      await deps.playChime('error');
      return;

View on GitHub (pinned to 7491200858)

Solutions

  1. Check the core log for the underlying RPC error — resolveActiveThreadId and createNewVoiceThread both go through core RPC to the threads domain
  2. Verify the core process is healthy and the RPC bearer token is still valid (a SessionExpired event often precedes this)
  3. If thread creation consistently fails, inspect threads.db / the threads store for the active user workspace
  4. Retry the push-to-talk session once the underlying RPC path recovers — the transcript is not queued, so it must be re-spoken
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at app/src/services/pttService.ts:144 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/66b3e04c95e1d4c7. Report an issue: GitHub.