paperclipai/paperclip · error
Plugin install did not return a registry row: ${manifest.id}
Error message
Plugin install did not return a registry row: ${manifest.id} What it means
Transactional invariant check in plugin install: the registry install call inside the transaction did not return the expected row, so persistence silently failed. Rare defensive check ensuring the plugin record exists before migrations proceed; the registry install path is at fault.
Source
Thrown at server/src/services/plugin-loader.ts:1731
const manifest = discovered.manifest!;
// Step 6: Persist install record and apply plugin-owned schema migrations
// in one database transaction. If migration validation fails, the plugin
// row, namespace record, migration ledger, and created schema all roll back.
const installDb = manifest.database ? migrationDb : db;
await installDb.transaction(async (tx) => {
const txDb = tx as unknown as Db;
const txRegistry = pluginRegistryService(txDb);
const installed = await txRegistry.install(
{
packageName: discovered.packageName,
packagePath: discovered.source === "local-filesystem" ? discovered.packagePath : undefined,
},
manifest,
);
if (!installed) {
throw new Error(`Plugin install did not return a registry row: ${manifest.id}`);
}
if (manifest.database) {
await pluginDatabaseService(txDb).applyMigrations(
installed.id,
manifest,
discovered.packagePath,
{ persistFailure: false },
);
}
});
log.info(
{
pluginId: manifest.id,
packageName: discovered.packageName,
version: discovered.version,
capabilities: manifest.capabilities,View on GitHub (pinned to 120ae5428f)
Solutions
- Internal install inconsistency: the registry row was not created. Retry the install; if it persists, check DB constraints and server logs for the install transaction.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at server/src/services/plugin-loader.ts:1731 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18).
Data as JSON: /api/errors/ef93148675556658.
Report an issue: GitHub.