{"record":{"id":"81c875c5f56c8dcf","repo":"ruvnet/ruflo","slug":"plugin-name-requires-core-version-resolved","errorCode":null,"errorMessage":"Plugin ${name} requires core version >= ${resolvedPlugin.metadata.minCoreVersion}, but current version is ${this.config.coreVersion}","messagePattern":"Plugin (.+?) requires core version >= (.+?), but current version is (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts","lineNumber":303,"sourceCode":"    }\n\n    const name = resolvedPlugin.metadata.name;\n    const version = resolvedPlugin.metadata.version;\n\n    // Check for duplicates\n    if (this.plugins.has(name)) {\n      throw new Error(`Plugin ${name} already registered`);\n    }\n\n    // Check max plugins\n    if (this.config.maxPlugins && this.plugins.size >= this.config.maxPlugins) {\n      throw new Error(`Maximum plugin limit (${this.config.maxPlugins}) reached`);\n    }\n\n    // Check core version compatibility\n    if (resolvedPlugin.metadata.minCoreVersion) {\n      if (!satisfiesVersion(`>=${resolvedPlugin.metadata.minCoreVersion}`, this.config.coreVersion)) {\n        throw new Error(\n          `Plugin ${name} requires core version >= ${resolvedPlugin.metadata.minCoreVersion}, ` +\n          `but current version is ${this.config.coreVersion}`\n        );\n      }\n    }\n    if (resolvedPlugin.metadata.maxCoreVersion) {\n      if (!satisfiesVersion(`<=${resolvedPlugin.metadata.maxCoreVersion}`, this.config.coreVersion)) {\n        throw new Error(\n          `Plugin ${name} requires core version <= ${resolvedPlugin.metadata.maxCoreVersion}, ` +\n          `but current version is ${this.config.coreVersion}`\n        );\n      }\n    }\n\n    // Parse dependencies\n    const dependencies = this.parseDependencies(resolvedPlugin.metadata.dependencies);\n\n    // Add to dependency graph","sourceCodeStart":285,"sourceCodeEnd":321,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts#L285-L321","documentation":"Thrown by EnhancedPluginRegistry.register() during core-version compatibility checking. If plugin.metadata.minCoreVersion is set, the registry builds the constraint '>=' + minCoreVersion and tests it against config.coreVersion (the version the registry was constructed with) using satisfiesVersion. A miss means the plugin requires a newer core than this registry claims to be, and registration aborts before dependencies are parsed.","triggerScenarios":"Registering a plugin declaring minCoreVersion '3.2.0' against a registry constructed with coreVersion '3.0.0' or '2.x'; coreVersion omitted/defaulted to an older value in the registry config; plugin built against newer SDK APIs (hence the min bound) loaded into an older host; version strings that satisfiesVersion fails to compare as expected.","commonSituations":"Upgrading a third-party plugin package without upgrading the host application; copy-pasting registry config with a stale coreVersion instead of the actual package version; local dev running an older branch while the plugin comes from a newer branch.","solutions":["Upgrade the host/core so config.coreVersion satisfies the plugin's minCoreVersion","If the plugin actually runs fine on your core, lower or remove its metadata.minCoreVersion and rebuild","Set config.coreVersion to the real core package version (import from package.json) instead of a hardcoded stale string","Pin a compatible older release of the plugin whose minCoreVersion your core satisfies"],"exampleFix":"// before\nconst registry = new EnhancedPluginRegistry({ coreVersion: '3.0.0' });\nawait registry.register(plugin); // plugin.metadata.minCoreVersion = '3.2.0' -> throws\n\n// after\nimport { version as CORE_VERSION } from '@claude-flow/core/package.json';\nconst registry = new EnhancedPluginRegistry({ coreVersion: CORE_VERSION }); // '3.4.1'\nawait registry.register(plugin);","handlingStrategy":"validation","validationCode":"const minCore = plugin.metadata.minCoreVersion;\nif (minCore && !satisfiesSemver(coreVersion, `>=${minCore}`)) {\n  throw new Error(\n    `skip ${plugin.metadata.name}: needs core >= ${minCore}, host is ${coreVersion}`\n  );\n}\nawait registry.register(plugin);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Feed config.coreVersion from the actual core package version (import from package.json), never a hardcoded string","Include plugin/core version pairs in your review when upgrading either side","Gate plugin loading on a version-compatibility check in your bootstrap so skips are logged, not thrown"],"tags":["version-compatibility","plugin-registry","semver","typescript"],"backgroundTag":"plugin-core-version-incompatible","analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}