{"record":{"id":"8aa847aab55d9cdb","repo":"stablyai/orca","slug":"project-id-is-required","errorCode":null,"errorMessage":"Project ID is required","messagePattern":"Project ID is required","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/main/ipc/linear.ts","lineNumber":395,"sourceCode":"          content: args.content?.trim() || undefined,\n          teamIds,\n          leadId: normalizeWorkspaceId(args.leadId),\n          memberIds,\n          labelIds,\n          priority: typeof args.priority === 'number' ? args.priority : undefined,\n          startDate,\n          targetDate\n        },\n        normalizeWorkspaceId(args.workspaceId)\n      )\n    }\n  )\n\n  ipcMain.handle(\n    'linear:getProject',\n    async (_event, args: { id: string; workspaceId?: string; force?: boolean }) => {\n      if (typeof args?.id !== 'string' || !args.id.trim()) {\n        throw new Error('Project ID is required')\n      }\n      return getProject(\n        args.id.trim(),\n        normalizeConcreteWorkspaceId(args.workspaceId),\n        args.force === true\n      )\n    }\n  )\n\n  ipcMain.handle(\n    'linear:listProjectIssues',\n    async (\n      _event,\n      args: { projectId: string; limit?: number; workspaceId?: string; force?: boolean }\n    ) => {\n      if (typeof args?.projectId !== 'string' || !args.projectId.trim()) {\n        throw new Error('Project ID is required')\n      }","sourceCodeStart":377,"sourceCodeEnd":413,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/src/main/ipc/linear.ts#L377-L413","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nuseEffect(() => { if (open) void ipc.call('linear:getProject', { id }) }, [open])\n\n// after\nuseEffect(() => {\n  if (open && typeof id === 'string' && id.trim()) void ipc.call('linear:getProject', { id: id.trim() })\n}, [open, id])","handlingStrategy":"validation","validationCode":"if (typeof id !== 'string' || !id.trim()) {\n  throw new Error('Linear project 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":["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."],"tags":["linear","validation","required-field","ipc"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}