{"record":{"id":"75ea4ee2f74cd71d","repo":"paperclipai/paperclip","slug":"signing-secret-unconfigured","errorCode":"signing_secret_unconfigured","errorMessage":"PAPERCLIP_TOOL_ACTION_SIGNING_SECRET is not configured; signed tool action approvals cannot be issued. Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in this instance's environment (worktrees inherit it from .paperclip/.env).","messagePattern":"PAPERCLIP_TOOL_ACTION_SIGNING_SECRET is not configured; signed tool action approvals cannot be issued\\. Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in this instance's environment \\(worktrees inherit it from \\.paperclip/\\.env\\)\\.","errorType":"http","errorClass":"ToolGatewayHttpError","httpStatus":500,"severity":"error","filePath":"server/src/services/tool-gateway.ts","lineNumber":1635,"sourceCode":"    if (!outcome) return;\n\n    const now = new Date();\n    await tx\n      .update(issueThreadInteractions)\n      .set({\n        ...([\"expired\", \"cancelled\"].includes(input.status) && interaction.status === \"pending\"\n          ? { status: input.status, resolvedAt: now }\n          : {}),\n        result: {\n          ...(currentResult ?? { version: 1, outcome }),\n          toolAction: {\n            ...asRecord(currentResult?.toolAction),\n            version: 1,\n            status: input.status === \"cancelled\" ? \"expired\" : input.status,\n            errorCode: input.errorCode ?? null,\n            errorMessage: input.errorMessage ?? null,\n            resultSummary: input.resultSummary ?? null,\n            updatedAt: now.toISOString(),\n          },\n        } as unknown as NonNullable<typeof issueThreadInteractions.$inferInsert.result>,\n        updatedAt: now,\n      })\n      .where(eq(issueThreadInteractions.id, interactionId));\n    return true;\n    });\n    if (!changed) return;\n    await logActivity(db, { companyId: linked.companyId, actorType: \"system\", actorId: \"tool-gateway\", action: \"issue.thread_interaction_updated\", entityType: \"issue\", entityId: linked.issueId!, details: { interactionId: linked.interactionId, actionRequestId: input.actionRequestId, executionStatus: input.status } });\n    if ([\"executed\", \"failed\", \"expired\", \"cancelled\"].includes(input.status)) await options.onToolActionSettled?.(input.actionRequestId).catch(error => logger.warn({ err: error, actionRequestId: input.actionRequestId }, \"Tool review continuation will be retried\"));\n  }\n\n  async function approvalRequiredInstructions(issueId: string): Promise<string> {\n    const [issue] = await db\n      .select({ identifier: issues.identifier })\n      .from(issues)\n      .where(eq(issues.id, issueId))\n      .limit(1);","sourceCodeStart":1617,"sourceCodeEnd":1653,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/server/src/services/tool-gateway.ts#L1617-L1653","documentation":"Error \"PAPERCLIP_TOOL_ACTION_SIGNING_SECRET is not configured; signed tool action approvals cannot be issued. Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in this instance's environment (worktrees inherit it from .paperclip/.env).\" thrown in paperclipai/paperclip.","triggerScenarios":"Thrown at server/src/services/tool-gateway.ts:1594 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in the server environment (worktrees inherit from .paperclip/.env) and restart the instance."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}