stablyai/orca · error · Error
Concrete Linear workspace ID is required
Error message
Concrete Linear workspace ID is required
What it means
Thrown by normalizeConcreteWorkspaceId when the Linear workspaceId is missing, blank, or the sentinel value 'all'. Some Linear IPC operations require a single concrete workspace because they query workspace-scoped resources (a specific project, custom view, or issue list) that cannot be resolved across all workspaces. The 'all' sentinel is valid for listing operations but not for single-resource fetches.
Source
Thrown at src/main/ipc/linear.ts:49
LinearIssueUpdate,
LinearWorkspaceSelection
} from '../../shared/types'
const VALID_FILTERS = new Set<LinearListFilter>(['assigned', 'created', 'all', 'completed'])
function normalizeWorkspaceId(value: unknown): string | undefined {
return typeof value === 'string' && value.trim() ? value.trim() : undefined
}
function normalizeWorkspaceSelection(value: unknown): LinearWorkspaceSelection | undefined {
const workspaceId = normalizeWorkspaceId(value)
return workspaceId as LinearWorkspaceSelection | undefined
}
function normalizeConcreteWorkspaceId(value: unknown): string {
const workspaceId = normalizeWorkspaceId(value)
if (!workspaceId || workspaceId === 'all') {
throw new Error('Concrete Linear workspace ID is required')
}
return workspaceId
}
function normalizeCustomViewModel(value: unknown): LinearCustomViewModel {
if (value !== 'issue' && value !== 'project') {
throw new Error('Custom view model is required')
}
return value
}
function normalizeIdList(value: unknown, fieldName: string): string[] | undefined {
if (value === undefined) {
return undefined
}
if (
!Array.isArray(value) ||
!value.every((id): id is string => typeof id === 'string' && Boolean(id.trim()))View on GitHub (pinned to 1136503c6a)
Solutions
- Pass a specific Linear workspace UUID/string, not 'all' and not empty.
- In the UI, disable single-resource actions when the workspace picker is set to 'All workspaces', or auto-select the first workspace.
- Ensure the workspace selection state is threaded through to every IPC call site that needs a concrete ID.
Example fix
// before
await ipc.call('linear:getProject', { id, workspaceId: selectedWorkspace }) // selectedWorkspace === 'all'
// after
if (selectedWorkspace === 'all') throw new Error('Select a single workspace first')
await ipc.call('linear:getProject', { id, workspaceId: selectedWorkspace }) Defensive patterns
Strategy: type-guard
Validate before calling
if (typeof workspaceId !== 'string' || !workspaceId.trim() || workspaceId === 'all') {
throw new Error('Select a single Linear workspace')
} Type guard
function isConcreteWorkspaceId(value: unknown): value is string {
return typeof value === 'string' && value.trim().length > 0 && value !== 'all'
} Prevention
- Disable single-resource Linear actions when the workspace picker is 'all'.
- Thread the concrete workspaceId through every IPC call that requires one.
- Default the workspace picker to a single workspace, not 'all', for detail views.
When it happens
Trigger: Calling a Linear IPC method that internally uses normalizeConcreteWorkspaceId (e.g. linear:getProject, linear:listProjectIssues, linear:getCustomView) without a workspaceId, with an empty string, or with the value 'all'. The renderer omits workspaceId assuming a default, or passes the multi-workspace 'all' selection from a workspace picker.
Common situations: User selected 'All workspaces' in the UI picker but invoked a single-resource action. workspaceId was not propagated from the parent component. A new Linear account with workspace selection state defaulting to 'all'.
Related errors
- Custom view model is required
- Invalid ${fieldName}
- Project ID is required
- Custom view ID is required
- Linear attribute filters require a concrete workspace; "all"
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/dc1114ad4f0758bc.
Report an issue: GitHub.