{"record":{"id":"46f8f3016bc973f4","repo":"paperclipai/paperclip","slug":"plugin-manifest-is-missing","errorCode":null,"errorMessage":"Plugin manifest is missing","messagePattern":"Plugin manifest is missing","errorType":"http","errorClass":null,"httpStatus":400,"severity":"error","filePath":"server/src/routes/plugins.ts","lineNumber":2718,"sourceCode":"    // Step 1: Resolve the plugin\n    const plugin = await resolvePlugin(registry, pluginId);\n    if (!plugin) {\n      res.status(404).json({ error: \"Plugin not found\" });\n      return;\n    }\n\n    // Step 2: Validate the plugin is in 'ready' state\n    if (plugin.status !== \"ready\") {\n      res.status(400).json({\n        error: `Plugin is not ready (current status: ${plugin.status})`,\n      });\n      return;\n    }\n\n    // Step 3: Validate the plugin has webhooks.receive capability\n    const manifest = plugin.manifestJson;\n    if (!manifest) {\n      res.status(400).json({ error: \"Plugin manifest is missing\" });\n      return;\n    }\n\n    const capabilities = manifest.capabilities ?? [];\n    if (!capabilities.includes(\"webhooks.receive\")) {\n      res.status(400).json({\n        error: \"Plugin does not have the webhooks.receive capability\",\n      });\n      return;\n    }\n\n    // Step 4: Validate the endpointKey exists in the manifest's webhook declarations\n    const declaredWebhooks = manifest.webhooks ?? [];\n    const webhookDecl = declaredWebhooks.find(\n      (w) => w.endpointKey === endpointKey,\n    );\n    if (!webhookDecl) {\n      res.status(404).json({","sourceCodeStart":2700,"sourceCodeEnd":2736,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/server/src/routes/plugins.ts#L2700-L2736","documentation":"400 from the plugin webhook ingestion route. Fires when the resolved plugin exists but has no manifestJson (manifest missing), so the handler cannot inspect its declared webhooks/capabilities to validate the delivery.","triggerScenarios":"Thrown at server/src/routes/plugins.ts:2696 when the library encounters an invalid state.","commonSituations":"Occurs when a webhook (or other plugin route) is invoked for a plugin instance whose stored manifest is missing, usually due to a partial install or corrupted plugin record.","solutions":["Reinstall or re-register the plugin so its manifest is written to the plugin instance record.","Verify the plugin package is intact and exposes a valid manifest (paperclip.plugin.json or equivalent)."],"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-14T05:17:10.506Z"}