{"record":{"id":"8ab83c478ea729aa","repo":"paperclipai/paperclip","slug":"this-task-is-paused-by-a-parent-task-restart-it-f","errorCode":null,"errorMessage":"This task is paused by a parent task. Restart it from the pause root.","messagePattern":"This task is paused by a parent task\\. Restart it from the pause root\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"ui/src/components/SidebarRecentTasks.tsx","lineNumber":207,"sourceCode":"        if (restartIssue.assigneeAgentId) {\n          const wakeResult = await agentsApi.wakeup(\n            restartIssue.assigneeAgentId,\n            {\n              source: \"assignment\",\n              triggerDetail: \"manual\",\n              reason: \"recent_task_restart\",\n              payload: { issueId: restartIssue.id },\n            },\n            restartIssue.companyId,\n          );\n          if (!(\"id\" in wakeResult)) {\n            throw new Error(wakeResult.message ?? \"The assignee wake was skipped.\");\n          }\n        }\n        setRestartWakeRetryPending(restartRetryStorageKey, entry.id, false);\n        toastActions?.pushToast({ title: \"Task restarted\", tone: \"success\" });\n      } else if (state.activePauseHold) {\n        throw new Error(\"This task is paused by a parent task. Restart it from the pause root.\");\n      } else if (readRestartWakeRetryIssueIds(restartRetryStorageKey).has(entry.id)) {\n        const restartIssue = await issuesApi.get(entry.id);\n        if (restartIssue.assigneeAgentId) {\n          const wakeResult = await agentsApi.wakeup(\n            restartIssue.assigneeAgentId,\n            {\n              source: \"assignment\",\n              triggerDetail: \"manual\",\n              reason: \"recent_task_restart_retry\",\n              payload: { issueId: restartIssue.id },\n            },\n            restartIssue.companyId,\n          );\n          if (!(\"id\" in wakeResult)) {\n            throw new Error(wakeResult.message ?? \"The assignee wake was skipped.\");\n          }\n        }\n        setRestartWakeRetryPending(restartRetryStorageKey, entry.id, false);","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/ui/src/components/SidebarRecentTasks.tsx#L189-L225","documentation":"toggleTaskPause in SidebarRecentTasks throws this fixed message when the task's pause state has an activePauseHold created by a parent task. A child task cannot be restarted directly; the user must restart at the pause root (the parent that imposed the hold).","triggerScenarios":"User clicks resume/restart on a recent task whose pause originates from a parent task's tree hold (state.activePauseHold set).","commonSituations":"Resuming a subtask of a paused epic from the sidebar, orchestrator-paused child tasks where only the root can be resumed, stale sidebar state showing a child as independently pausable.","solutions":["Navigate to the parent/pause-root task and restart it there","Clear the parent's tree hold before restarting the child","Update the sidebar to offer 'Go to pause root' instead of restart for held children"],"exampleFix":"// before\nthrow new Error(\"This task is paused by a parent task. Restart it from the pause root.\");\n// after\nif (state.activePauseHold) {\n  toastActions?.pushToast({ title: \"Paused by parent\", description: \"Restart it from the pause root.\", tone: \"warning\" });\n  return;\n}","handlingStrategy":"validation","validationCode":"if (state.activePauseHold) { showToast('Restart from pause root'); return; }","typeGuard":"function isChildHold(s: { activePauseHold?: unknown }): boolean { return Boolean(s.activePauseHold); }","tryCatchPattern":"try { await toggleTaskPause(entry); } catch (e) { if (/pause root/.test(e.message)) navigateToTask(state.activePauseHold.rootIssueId); else throw e; }","preventionTips":["Check activePauseHold before enabling restart UI","Link the user directly to the pause root task","Keep pause-hold state fresh via query invalidation","Show hold provenance (which parent paused it) in the sidebar"],"tags":["ui-state","task-hold","hierarchy"],"backgroundTag":"invalid-state-transition","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}