stablyai/orca · error · Error
Linear attribute filters require a concrete workspace; "all"
Error message
Linear attribute filters require a concrete workspace; "all" workspaces is not supported.
What it means
Thrown by listIssues when an attributeFilter (state/member/label ids) is supplied together with workspaceId==='all'. Workspace-scoped ids cannot be safely fanned out across multiple workspaces, so the library rejects this combination before creating any client. It is a plain Error, not a LinearWriteFailure.
Source
Thrown at src/main/linear/issues.ts:1075
}
export async function listIssues(
filter: LinearListFilter = 'assigned',
limit = 20,
workspaceId?: LinearWorkspaceSelection | null,
options?: LinearIssueListOptions
): Promise<LinearCollectionResult<LinearIssue>> {
const effectiveLimit = clampLinearIssueListLimit(limit)
const attributeFilter = options?.attributeFilter
// Why: workspace-specific state/member/label ids cannot fan out safely across
// "all" workspaces; reject before creating clients so non-UI callers cannot
// get a misleading partial subset.
if (
attributeFilter &&
!isEmptyLinearIssueAttributeFilter(attributeFilter) &&
workspaceId === 'all'
) {
throw new Error(
'Linear attribute filters require a concrete workspace; "all" workspaces is not supported.'
)
}
const entries = getClients(workspaceId)
if (entries.length === 0) {
return { items: [] }
}
if (entries.length === 1) {
return readListIssuesForWorkspace(entries[0], filter, effectiveLimit, workspaceId, options)
}
return readListIssuesAcrossWorkspaces(entries, filter, effectiveLimit, workspaceId, options)
}
export async function createIssue(
teamId: string,
title: string,View on GitHub (pinned to 1136503c6a)
Solutions
- Resolve a single concrete workspace id before applying an attribute filter.
- If the user picked 'all', either clear the attributeFilter or run the query once per workspace with each workspace's own scoped ids.
- Validate at the call site that attributeFilter and workspaceId==='all' never travel together.
Example fix
// before
listIssues('assigned', 20, 'all', { attributeFilter: { stateIds: ['state-1'] } })
// after
const ws = resolveWorkspaceId(selection)
listIssues('assigned', 20, ws, { attributeFilter: { stateIds: ['state-1'] } }) Defensive patterns
Strategy: validation
Validate before calling
function assertConcreteForAttributeFilter(workspaceId: unknown, attributeFilter: unknown): void {
if (workspaceId === 'all' && attributeFilter && !isEmptyAttributeFilter(attributeFilter))
throw new Error('Resolve a single workspace before applying an attribute filter')
} Type guard
function isAllWorkspaceFilterError(e: unknown): boolean {
return e instanceof Error && e.message.includes('attribute filters require a concrete workspace')
} Try / catch
try { listIssues('assigned', 20, selection, { attributeFilter }) }
catch (e) { if (isAllWorkspaceFilterError(e)) selection = pickConcreteWorkspace(); else throw e } Prevention
- Never forward an 'all' UI selection into a scoped-filter query unchanged.
- Centralize workspace narrowing before building attributeFilter.
- Unit-test the boundary with workspaceId='all' plus a non-empty filter.
When it happens
Trigger: Passing options.attributeFilter that is non-empty (per isEmptyLinearIssueAttributeFilter) while workspaceId is the literal string 'all'. Typically a multi-workspace UI selection combined with a state/assignee/label filter.
Common situations: UI defaulted to 'All workspaces' and the user applied a state or label filter whose ids only exist in one workspace; an agent or background job reused a default 'all' selection with scoped filters.
Related errors
- Concrete Linear workspace ID is required
- Concrete Linear workspace ID is required
- linear_invalid_workspace
- linear_invalid_url
- linear_body_too_large
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/6924a310f2d47dbf.
Report an issue: GitHub.