{"record":{"id":"9cffda5ac7e90620","repo":"ruvnet/ruflo","slug":"category-identifier-replacing-existing-s","errorCode":null,"errorMessage":"${category}: ${identifier} replacing ${existing}'s version with ${pluginName}'s","messagePattern":"(.+?): (.+?) replacing (.+?)'s version with (.+?)'s","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts","lineNumber":732,"sourceCode":"    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);\n          owners.delete(identifier);\n          owners.set(existingNs, existing);\n        }\n","sourceCodeStart":714,"sourceCodeEnd":750,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts#L714-L750","documentation":"Warning from the same conflict-resolution switch in EnhancedPluginRegistry, for the 'last' strategy: the incoming registration silently replaces the identifier previously owned by another plugin. Ownership of the identifier changes; the previous owner may break.","triggerScenarios":"Thrown at v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts:732 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Confirm the replacement is intended; if not, remove one of the plugins registering the same identifier."],"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"}