{"record":{"id":"012ffc0f4f4fd8fc","repo":"paperclipai/paperclip","slug":"cheap-status-only-recovery-runs-cannot-update-issu","errorCode":null,"errorMessage":"Cheap status-only recovery runs cannot update issue documents, plans, or deliverable artifacts","messagePattern":"Cheap status-only recovery runs cannot update issue documents, plans, or deliverable artifacts","errorType":"http","errorClass":null,"httpStatus":403,"severity":"error","filePath":"server/src/routes/issues.ts","lineNumber":6282,"sourceCode":"    }\n\n    const sourceIssue = await svc.getById(scope.watchedIssueId);\n    if (!sourceIssue || sourceIssue.companyId !== companyId) {\n      res.status(404).json({ error: \"Watched source issue not found\" });\n      return false;\n    }\n    const watchdogIssue = scope.watchdogIssueId\n      ? await svc.getById(scope.watchdogIssueId)\n      : null;\n    if (watchdogIssue && watchdogIssue.companyId !== companyId) {\n      res.status(403).json({\n        error:\n          \"Task-watchdog product bug evidence issue is outside the watchdog company\",\n      });\n      return false;\n    }\n\n    return { scope, discovery, sourceIssue, watchdogIssue };\n  }\n\n  function isStatusOnlyRecoveryContext(contextSnapshot: unknown) {\n    if (\n      !contextSnapshot ||\n      typeof contextSnapshot !== \"object\" ||\n      Array.isArray(contextSnapshot)\n    )\n      return false;\n    const context = contextSnapshot as Record<string, unknown>;\n    return (\n      context.recoveryIntent === \"status_only\" &&\n      context.allowDeliverableWork === false &&\n      context.allowDocumentUpdates === false &&\n      context.resumeRequiresNormalModel === true\n    );\n  }\n","sourceCodeStart":6264,"sourceCodeEnd":6300,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/server/src/routes/issues.ts#L6264-L6300","documentation":"The acting run's context snapshot marks it as a cheap status-only recovery run, which is forbidden from touching issue documents, plans, or deliverable artifacts — only status/comment updates are permitted.","triggerScenarios":"Thrown at server/src/routes/issues.ts:4935 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["This is an authorization rule, not a bug: perform the action with an actor that satisfies the stated constraint (board user, the owning agent, or an in-scope resource).","If access should be allowed, verify the actor's credentials/company scope and the resource's ownership before retrying."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f1d897a7c018d76563a21c6e39c3c9b03933622","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}