stablyai/orca · error · Error

Project ID is required

Error message

Project ID is required

What it means

Thrown by the linear:getProject IPC handler when args.id is not a non-empty trimmed string. The handler validates the project ID before delegating to getProject, since the ID is required to fetch a single Linear project. A missing, empty, or non-string id means the request cannot be routed.

Source

Thrown at src/main/ipc/linear.ts:395

          content: args.content?.trim() || undefined,
          teamIds,
          leadId: normalizeWorkspaceId(args.leadId),
          memberIds,
          labelIds,
          priority: typeof args.priority === 'number' ? args.priority : undefined,
          startDate,
          targetDate
        },
        normalizeWorkspaceId(args.workspaceId)
      )
    }
  )

  ipcMain.handle(
    'linear:getProject',
    async (_event, args: { id: string; workspaceId?: string; force?: boolean }) => {
      if (typeof args?.id !== 'string' || !args.id.trim()) {
        throw new Error('Project ID is required')
      }
      return getProject(
        args.id.trim(),
        normalizeConcreteWorkspaceId(args.workspaceId),
        args.force === true
      )
    }
  )

  ipcMain.handle(
    'linear:listProjectIssues',
    async (
      _event,
      args: { projectId: string; limit?: number; workspaceId?: string; force?: boolean }
    ) => {
      if (typeof args?.projectId !== 'string' || !args.projectId.trim()) {
        throw new Error('Project ID is required')
      }

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Guard the IPC call site: only call linear:getProject when a non-empty id is available.
  2. Render a loading/empty state until the id is present.
  3. Trim and validate the id at the call boundary.

Example fix

// before
useEffect(() => { if (open) void ipc.call('linear:getProject', { id }) }, [open])

// after
useEffect(() => {
  if (open && typeof id === 'string' && id.trim()) void ipc.call('linear:getProject', { id: id.trim() })
}, [open, id])
Defensive patterns

Strategy: validation

Validate before calling

if (typeof id !== 'string' || !id.trim()) {
  throw new Error('Linear project ID is required')
}

Type guard

function isNonEmptyId(value: unknown): value is string {
  return typeof value === 'string' && value.trim().length > 0
}

Prevention

When it happens

Trigger: Invoking linear:getProject with args.id undefined, empty string, whitespace-only, or a non-string type. The renderer attempts to load a project before an ID is selected, or forwards an undefined route param.

Common situations: Navigating to a project detail view before the project ID is resolved. Route param not yet populated. A list click handler fires before the selected ID state updates.

Related errors


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