{"record":{"id":"5384e0548f7f4a8b","repo":"paperclipai/paperclip","slug":"plugin-installed-but-not-found-in-registry","errorCode":null,"errorMessage":"Plugin installed but not found in registry","messagePattern":"Plugin installed but not found in registry","errorType":"http","errorClass":null,"httpStatus":500,"severity":"error","filePath":"server/src/routes/plugins.ts","lineNumber":1233,"sourceCode":"      }\n\n      // Transition to ready state\n      const existingPlugin = await registry.getByKey(discovered.manifest.id);\n      if (existingPlugin) {\n        await lifecycle.load(existingPlugin.id);\n        const updated = await registry.getById(existingPlugin.id);\n        await logPluginMutationActivity(req, \"plugin.installed\", existingPlugin.id, {\n          pluginId: existingPlugin.id,\n          pluginKey: existingPlugin.pluginKey,\n          packageName: updated?.packageName ?? existingPlugin.packageName,\n          version: updated?.version ?? existingPlugin.version,\n          source: isLocalPath ? \"local_path\" : \"npm\",\n        });\n        publishGlobalLiveEvent({ type: \"plugin.ui.updated\", payload: { pluginId: existingPlugin.id, action: \"installed\" } });\n        res.json(updated);\n      } else {\n        // This shouldn't happen since installPlugin already registers in the DB\n        res.status(500).json({ error: \"Plugin installed but not found in registry\" });\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      res.status(400).json({ error: message });\n    }\n  });\n\n  // ===========================================================================\n  // UI Bridge proxy routes (getData / performAction)\n  // ===========================================================================\n\n  /** Request body for POST /api/plugins/:pluginId/bridge/data */\n  interface PluginBridgeDataRequest {\n    /** Plugin-defined data key (e.g. `\"sync-health\"`). */\n    key: string;\n    /** Optional company scope for authorizing company-context bridge calls. */\n    companyId?: string;\n    /** Optional context and query parameters from the UI. */","sourceCodeStart":1215,"sourceCodeEnd":1251,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/server/src/routes/plugins.ts#L1215-L1251","documentation":"500 from POST /plugins/install. Fires when the installed plugin cannot be fetched back from the registry after installation/transition to ready — the plugin is installed but not registered, indicating an inconsistent install pipeline.","triggerScenarios":"Thrown at server/src/routes/plugins.ts:1217 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the id in the request path or body refers to an existing record in this company; re-list the parent collection to get a valid id.","Check that the record was not deleted or archived, and that the request is scoped to the correct companyId."],"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"}