{"record":{"id":"7fa3f6daaf371255","repo":"ruvnet/ruflo","slug":"category-identifier-already-registered-by","errorCode":null,"errorMessage":"${category}: ${identifier} already registered by ${existing}, ignoring from ${pluginName}","messagePattern":"(.+?): (.+?) already registered by (.+?), ignoring from (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts","lineNumber":728,"sourceCode":"    category: string,\n    identifier: string,\n    item: T,\n    pluginName: string,\n    owners: Map<string, string>,\n    resolution?: ConflictResolution\n  ): T | null {\n    const existing = owners.get(identifier);\n\n    if (!existing) {\n      owners.set(identifier, pluginName);\n      return item;\n    }\n\n    const strategy = resolution?.strategy ?? 'error';\n\n    switch (strategy) {\n      case 'first':\n        this.logger.warn(`${category}: ${identifier} already registered by ${existing}, ignoring from ${pluginName}`);\n        return null;\n\n      case 'last':\n        this.logger.warn(`${category}: ${identifier} replacing ${existing}'s version with ${pluginName}'s`);\n        owners.set(identifier, pluginName);\n        // Remove existing from cache\n        this.removeFromCache(category, identifier);\n        return item;\n\n      case 'namespace': {\n        const template = resolution?.namespaceTemplate ?? '{plugin}:{name}';\n\n        // Namespace the existing entry too (on first conflict)\n        const existingNs = template\n          .replace('{plugin}', existing)\n          .replace('{name}', identifier);\n        if (!owners.has(existingNs)) {\n          this.renameInCache(category, identifier, existingNs);","sourceCodeStart":710,"sourceCodeEnd":746,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts#L710-L746","documentation":"Warning from the internal conflict-resolution helper in EnhancedPluginRegistry: a second plugin tried to register a category identifier already owned by another plugin, and the configured strategy is 'first', so the new registration is discarded and null returned.","triggerScenarios":"Thrown at v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts:728 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rename the conflicting identifier in one of the plugins, or remove the duplicate registration."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}