paperclipai/paperclip · error
Issue follow-up blocked by unresolved blockers
Error message
Issue follow-up blocked by unresolved blockers
What it means
409 guard in assertExplicitResumeIntentAllowed: the issue is blocked and its dependency readiness still lists unresolved blocker issues, so follow-up is refused until blockers resolve.
Source
Thrown at server/src/routes/issues.ts:5213
if (!run) return true;
if (!isStatusOnlyRecoveryContext(run.contextSnapshot)) return true;
res.status(403).json({
error: "Status-only recovery runs cannot create or modify approvals",
details: {
issueId: issue.id,
runId: run.id,
recoveryIntent: "status_only",
resumeRequiresNormalModel: true,
},
});
return false;
}
async function loadWorkProductRunAttribution(runId: string) {
return await db
.select({
id: heartbeatRuns.id,
companyId: heartbeatRuns.companyId,
agentId: heartbeatRuns.agentId,
agentCompanyId: agents.companyId,
})
.from(heartbeatRuns)
.innerJoin(agents, eq(heartbeatRuns.agentId, agents.id))
.where(eq(heartbeatRuns.id, runId))
.then((rows) => rows[0] ?? null);
}
async function resolveWorkProductCreatedByRunId(
req: Request,
res: Response,
companyId: string,
input: { createdByRunId?: string | null },
mode: "create" | "update",
): Promise<string | null | undefined> {
const hasCreatedByRunId = Object.prototype.hasOwnProperty.call(input, "createdByRunId");View on GitHub (pinned to 01ad858492)
Solutions
- Correct the request so it satisfies the condition stated in the error message, then retry; see the throwing line in the named file for the exact check.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/routes/issues.ts:5083 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18).
Data as JSON: /api/errors/49a9daea8b05083d.
Report an issue: GitHub.