paperclipai/paperclip · warning
This task is paused by a parent task. Restart it from the pa
Error message
This task is paused by a parent task. Restart it from the pause root.
What it means
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).
Source
Thrown at ui/src/components/SidebarRecentTasks.tsx:207
if (restartIssue.assigneeAgentId) {
const wakeResult = await agentsApi.wakeup(
restartIssue.assigneeAgentId,
{
source: "assignment",
triggerDetail: "manual",
reason: "recent_task_restart",
payload: { issueId: restartIssue.id },
},
restartIssue.companyId,
);
if (!("id" in wakeResult)) {
throw new Error(wakeResult.message ?? "The assignee wake was skipped.");
}
}
setRestartWakeRetryPending(restartRetryStorageKey, entry.id, false);
toastActions?.pushToast({ title: "Task restarted", tone: "success" });
} else if (state.activePauseHold) {
throw new Error("This task is paused by a parent task. Restart it from the pause root.");
} else if (readRestartWakeRetryIssueIds(restartRetryStorageKey).has(entry.id)) {
const restartIssue = await issuesApi.get(entry.id);
if (restartIssue.assigneeAgentId) {
const wakeResult = await agentsApi.wakeup(
restartIssue.assigneeAgentId,
{
source: "assignment",
triggerDetail: "manual",
reason: "recent_task_restart_retry",
payload: { issueId: restartIssue.id },
},
restartIssue.companyId,
);
if (!("id" in wakeResult)) {
throw new Error(wakeResult.message ?? "The assignee wake was skipped.");
}
}
setRestartWakeRetryPending(restartRetryStorageKey, entry.id, false);View on GitHub (pinned to 01ad858492)
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
Example fix
// before
throw new Error("This task is paused by a parent task. Restart it from the pause root.");
// after
if (state.activePauseHold) {
toastActions?.pushToast({ title: "Paused by parent", description: "Restart it from the pause root.", tone: "warning" });
return;
} Defensive patterns
Strategy: validation
Validate before calling
if (state.activePauseHold) { showToast('Restart from pause root'); return; } Type guard
function isChildHold(s: { activePauseHold?: unknown }): boolean { return Boolean(s.activePauseHold); } Try / catch
try { await toggleTaskPause(entry); } catch (e) { if (/pause root/.test(e.message)) navigateToTask(state.activePauseHold.rootIssueId); else throw e; } Prevention
- 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
When it happens
Trigger: User clicks resume/restart on a recent task whose pause originates from a parent task's tree hold (state.activePauseHold set).
Common situations: 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.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- ${wakeResult.message ?? "The assignee wake was skipped."}
- The task is not available for reassignment.
- Queue reordering is unavailable.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/8ab83c478ea729aa.
Report an issue: GitHub.