{"record":{"id":"4cde3a4fc20f4429","repo":"paperclipai/paperclip","slug":"this-decision-must-be-completed-from-its-detail-vi","errorCode":null,"errorMessage":"This decision must be completed from its detail view.","messagePattern":"This decision must be completed from its detail view\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"ui/src/components/AttentionQueueRow.tsx","lineNumber":509,"sourceCode":"  const decision = useMutation<unknown, Error, CompactDecisionAction>({\n    mutationFn: (action: CompactDecisionAction) => {\n      if (item.sourceKind === \"approval\") {\n        if (action === \"approve\") return approvalsApi.approve(item.subject.id);\n        if (action === \"reject\") return approvalsApi.reject(item.subject.id);\n        return approvalsApi.requestRevision(item.subject.id);\n      }\n      if (item.sourceKind === \"join_request\") {\n        return action === \"approve\"\n          ? accessApi.approveJoinRequest(companyId, item.subject.id)\n          : accessApi.rejectJoinRequest(companyId, item.subject.id);\n      }\n      if (item.sourceKind === \"issue_thread_interaction\") {\n        const issueId = item.subject.metadata?.issueId;\n        if (typeof issueId !== \"string\") throw new Error(\"Missing issue reference for this decision.\");\n        if (action === \"accept\") return issuesApi.acceptInteraction(issueId, item.subject.id);\n        return issuesApi.rejectInteraction(issueId, item.subject.id);\n      }\n      throw new Error(\"This decision must be completed from its detail view.\");\n    },\n    onSuccess: (_result, action) => {\n      queryClient.invalidateQueries({ queryKey: queryKeys.attention(companyId) });\n      if (item.sourceKind === \"approval\") {\n        queryClient.invalidateQueries({ queryKey: queryKeys.approvals.list(companyId) });\n      } else {\n        queryClient.invalidateQueries({ queryKey: queryKeys.access.joinRequests(companyId) });\n      }\n      pushToast({\n        title: compactDecisionSuccessLabel(item.sourceKind, action),\n        tone: \"success\",\n      });\n    },\n    onError: (error, action) => {\n      // A policy denial is permanent, so it keeps the server's reason and names\n      // the real responder instead of asking for a retry that will fail again.\n      pushToast({\n        title: `Could not ${decisionLabel(action)}`,","sourceCodeStart":491,"sourceCodeEnd":527,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/ui/src/components/AttentionQueueRow.tsx#L491-L527","documentation":"Error \"This decision must be completed from its detail view.\" thrown in paperclipai/paperclip.","triggerScenarios":"Thrown at ui/src/components/AttentionQueueRow.tsx:509 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Open the decision's detail view and complete it there."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}