stablyai/orca · warning

Timed out loading check details.

Error message

Timed out loading check details.

What it means

Thrown by getPRCheckDetails in the outer catch when hostDeadlineExpired is true AND the caller's own signal has not aborted. The host deadline bounds the total time spent on gh API calls for check details; expiring it without a caller abort means the lookup genuinely timed out (slow network, stalled gh, GitHub incident) rather than being cancelled upstream. The constant GITHUB_CHECK_DETAILS_TIMEOUT_MESSAGE lets UI match it for a 'try again' prompt.

Source

Thrown at src/main/github/client.ts:4304

        : null
    return {
      name: nullableString(checkRun?.name) ?? args.checkName ?? 'Check',
      status: nullableString(checkRun?.status),
      conclusion: nullableString(checkRun?.conclusion),
      url: nullableString(checkRun?.html_url) ?? args.url ?? null,
      detailsUrl: nullableString(checkRun?.details_url) ?? args.url ?? null,
      startedAt: nullableString(checkRun?.started_at),
      completedAt: nullableString(checkRun?.completed_at),
      title: nullableString(output?.title),
      summary: nullableString(output?.summary),
      text: nullableString(output?.text),
      annotations,
      jobs
    }
  } catch (err) {
    console.warn('getPRCheckDetails failed:', err)
    if (hostDeadlineExpired && !callerSignal?.aborted) {
      throw new Error(GITHUB_CHECK_DETAILS_TIMEOUT_MESSAGE)
    }
    throw err
  } finally {
    clearTimeout(hostDeadline)
    callerSignal?.removeEventListener('abort', forwardCallerAbort)
    if (acquired) {
      release()
    }
  }
}

function parseActionsRunId(url: string | null | undefined): number | undefined {
  if (!url) {
    return undefined
  }
  const match = /\/actions\/runs\/(\d+)(?:\/|$)/.exec(url)
  if (!match) {
    return undefined

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Retry — transient GitHub slowness is the most common cause.
  2. Check https://www.githubstatus.com for incidents during the failure window.
  3. Pass a callerSignal so navigations away abort the lookup cleanly instead of running to the deadline.
  4. For PRs with many checks, accept partial detail rather than re-running the full multi-page load.

Example fix

// before: caller omits signal, lookup runs to deadline
const details = await getPRCheckDetails(...)

// after: pass abort signal so leaving the view cancels cleanly
const controller = new AbortController()
onNavigateAway(() => controller.abort())
const details = await getPRCheckDetails(..., { signal: controller.signal })
Defensive patterns

Strategy: retry

Type guard

function isCheckDetailsTimeout(err: unknown): boolean {
  return err instanceof Error && err.message === GITHUB_CHECK_DETAILS_TIMEOUT_MESSAGE
}

Try / catch

const controller = new AbortController()
const off = onNavigateAway(() => controller.abort())
try {
  const details = await getPRCheckDetails(..., { signal: controller.signal })
} catch (err) {
  if (controller.signal.aborted) return // user navigated; ignore
  if (isCheckDetailsTimeout(err)) {
    toast.info('Check details timed out. Retry?')
    return
  }
  throw err
} finally {
  off()
}

Prevention

When it happens

Trigger: gh api calls for check runs/jobs are slow due to a GitHub incident; a slow corporate proxy; a PR with hundreds of check runs requiring many paginated calls; the host running gh is CPU-starved; attachFailedJobLogTails fetching large log payloads over a slow link.

Common situations: GitHub incident slowing api.github.com; proxy latency; very large PR with many CI jobs; the SSH host has limited bandwidth; the caller did not pass an abort signal and the user navigated away without cancelling.

Understand the failure class

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/5c17634517ec59a4. Report an issue: GitHub.