{"record":{"id":"00b07941233a1027","repo":"stablyai/orca","slug":"custom-view-id-is-required","errorCode":null,"errorMessage":"Custom view ID is required","messagePattern":"Custom view ID is required","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/main/ipc/linear.ts","lineNumber":457,"sourceCode":"        normalizeWorkspaceSelection(args?.workspaceId),\n        args?.force === true\n      )\n    }\n  )\n\n  ipcMain.handle(\n    'linear:getCustomView',\n    async (\n      _event,\n      args: {\n        viewId: string\n        model?: LinearCustomViewModel\n        workspaceId?: string\n        force?: boolean\n      }\n    ) => {\n      if (typeof args?.viewId !== 'string' || !args.viewId.trim()) {\n        throw new Error('Custom view ID is required')\n      }\n      return getCustomView(\n        args.viewId.trim(),\n        normalizeCustomViewModel(args.model),\n        normalizeConcreteWorkspaceId(args.workspaceId),\n        args.force === true\n      )\n    }\n  )\n\n  ipcMain.handle(\n    'linear:listCustomViewIssues',\n    async (\n      _event,\n      args: { viewId: string; limit?: number; workspaceId?: string; force?: boolean }\n    ) => {\n      if (typeof args?.viewId !== 'string' || !args.viewId.trim()) {\n        throw new Error('Custom view ID is required')","sourceCodeStart":439,"sourceCodeEnd":475,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/src/main/ipc/linear.ts#L439-L475","documentation":"Thrown by the linear:getCustomView IPC handler when args.viewId is not a non-empty trimmed string. viewId is required to fetch a single Linear custom view. The handler then calls normalizeCustomViewModel (requiring 'issue' or 'project') and normalizeConcreteWorkspaceId, but the viewId check fails first.","triggerScenarios":"Invoking linear:getCustomView with viewId undefined, empty, whitespace, or non-string. The renderer tries to load a custom view before its ID is known, or forwards an undefined selection.","commonSituations":"Opening a custom view detail before the view ID resolves from route/state. A stale/removed custom view reference. Selection state not propagated.","solutions":["Ensure viewId is a non-empty string before calling linear:getCustomView.","Also pass a valid model ('issue'|'project') and concrete workspaceId, or those will throw next.","Clear references to deleted custom views."],"exampleFix":"// before\nawait ipc.call('linear:getCustomView', { viewId, model, workspaceId })\n\n// after\nif (typeof viewId !== 'string' || !viewId.trim()) return\nawait ipc.call('linear:getCustomView', { viewId: viewId.trim(), model, workspaceId })","handlingStrategy":"validation","validationCode":"if (typeof viewId !== 'string' || !viewId.trim()) {\n  throw new Error('Linear custom view ID is required')\n}","typeGuard":"function isNonEmptyId(value: unknown): value is string {\n  return typeof value === 'string' && value.trim().length > 0\n}","tryCatchPattern":null,"preventionTips":["Resolve the custom view ID before calling linear:getCustomView.","Also prepare a valid model and concrete workspaceId to avoid subsequent throws.","Purge references to deleted custom views from selection state."],"tags":["linear","validation","required-field","custom-view","ipc"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}