{"record":{"id":"7601345201f34bf6","repo":"paperclipai/paperclip","slug":"plugin-issue-originkind-must-be-a-string","errorCode":null,"errorMessage":"Plugin issue originKind must be a string","messagePattern":"Plugin issue originKind must be a string","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/services/plugin-host-services.ts","lineNumber":1040,"sourceCode":"    return {\n      ...(details ?? {}),\n      sourcePluginId: pluginId,\n      sourcePluginKey: pluginKey,\n      initiatingActorType,\n      initiatingActorId,\n      initiatingAgentId: actor?.actorAgentId ?? null,\n      initiatingUserId: actor?.actorUserId ?? null,\n      initiatingRunId: actor?.actorRunId ?? null,\n      pluginId,\n      pluginKey,\n    };\n  };\n\n  const defaultPluginOriginKind = `plugin:${pluginKey}`;\n  const normalizePluginOriginKind = (originKind: unknown = defaultPluginOriginKind) => {\n    if (originKind == null || originKind === \"\") return defaultPluginOriginKind;\n    if (typeof originKind !== \"string\") {\n      throw new Error(\"Plugin issue originKind must be a string\");\n    }\n    if (originKind === defaultPluginOriginKind || originKind.startsWith(`${defaultPluginOriginKind}:`)) {\n      return originKind;\n    }\n    throw new Error(`Plugin may only use originKind values under ${defaultPluginOriginKind}`);\n  };\n\n  const assertReadableOriginFilter = (originKind: unknown) => {\n    if (typeof originKind !== \"string\" || !originKind.startsWith(\"plugin:\")) return;\n    normalizePluginOriginKind(originKind);\n  };\n\n  const logPluginActivity = async (input: {\n    companyId: string;\n    action: string;\n    entityType: string;\n    entityId: string;\n    details?: Record<string, unknown> | null;","sourceCodeStart":1022,"sourceCodeEnd":1058,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/server/src/services/plugin-host-services.ts#L1022-L1058","documentation":"normalizePluginOriginKind received a non-string originKind value from the plugin (a number, object, etc.). The default plugin:<pluginKey> kind applies only for null/empty; any other value must be a string so it can be namespaced and validated.","triggerScenarios":"Thrown at server/src/services/plugin-host-services.ts:1031 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass issue originKind as a string value in the plugin host call; remove non-string (number/object/null) values from the request payload."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a7e689b3c35347b529cb9f54c9b9a8575a3dcab6","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}