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
- Guard the IPC call site: only call linear:getProject when a non-empty id is available.
- Render a loading/empty state until the id is present.
- 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
- Only call linear:getProject once a project is selected (non-empty id).
- Show a loading/empty state until the id resolves.
- Trim the id at the call boundary.
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
- Custom view ID is required
- Concrete Linear workspace ID is required
- Custom view model is required
- Invalid ${fieldName}
- Invalid localhost label ${field}.
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/8aa847aab55d9cdb.
Report an issue: GitHub.