{"record":{"id":"5049e36aa1c56281","repo":"paperclipai/paperclip","slug":"agent-authentication-required-5049e3","errorCode":null,"errorMessage":"Agent authentication required","messagePattern":"Agent authentication required","errorType":"http","errorClass":null,"httpStatus":403,"severity":"error","filePath":"server/src/routes/issues.ts","lineNumber":4771,"sourceCode":"      kind: string;\n      status: string;\n      result?: unknown;\n    }>;\n    actor: ReturnType<typeof getActorInfo>;\n    source: string;\n  }) {\n    for (const interaction of input.interactions) {\n      await logActivity(db, {\n        companyId: input.issue.companyId,\n        actorType: input.actor.actorType,\n        actorId: input.actor.actorId,\n        agentId: input.actor.agentId,\n        runId: input.actor.runId,\n        agentApiKeyId: input.actor.agentApiKeyId,\n        action: \"issue.thread_interaction_expired\",\n        entityType: \"issue\",\n        entityId: input.issue.id,\n        details: {\n          identifier: input.issue.identifier ?? null,\n          interactionId: interaction.id,\n          interactionKind: interaction.kind,\n          interactionStatus: interaction.status,\n          source: input.source,\n          result: interaction.result ?? null,\n        },\n      });\n    }\n  }\n\n  async function queueExpiredInteractionReviewPathRecovery(input: {\n    issue: IssueRouteSnapshot;\n    interactions: Array<{ id: string }>;\n    actor: ReturnType<typeof getActorInfo>;\n    source: string;\n  }) {\n    if (","sourceCodeStart":4753,"sourceCodeEnd":4789,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/server/src/routes/issues.ts#L4753-L4789","documentation":"403 guard in assertCanManageIssueApprovalLinks: the actor is not board and carries no agentId, so there is no authenticated agent identity to authorize approval-link management.","triggerScenarios":"Thrown at server/src/routes/issues.ts:3713 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include the required field(s) in the request path, query, or body as named by the error message, then retry.","Check the API contract in packages/shared validators for the exact required shape of this endpoint."],"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-20T23:17:15.980Z"}