ruvnet/ruflo · error

Plugin ${name} requires core version <= ${resolvedPlugin.met

Error message

Plugin ${name} requires core version <= ${resolvedPlugin.metadata.maxCoreVersion}, but current version is ${this.config.coreVersion}

What it means

Thrown by EnhancedPluginRegistry.register() during the upper-bound core-version check. If plugin.metadata.maxCoreVersion is set, the registry tests '<=' + maxCoreVersion against config.coreVersion. A miss means the plugin declares it does not work with cores newer than its ceiling, and registration is refused rather than loading a plugin likely to break at runtime.

Source

Thrown at v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts:311

    }

    // Check max plugins
    if (this.config.maxPlugins && this.plugins.size >= this.config.maxPlugins) {
      throw new Error(`Maximum plugin limit (${this.config.maxPlugins}) reached`);
    }

    // Check core version compatibility
    if (resolvedPlugin.metadata.minCoreVersion) {
      if (!satisfiesVersion(`>=${resolvedPlugin.metadata.minCoreVersion}`, this.config.coreVersion)) {
        throw new Error(
          `Plugin ${name} requires core version >= ${resolvedPlugin.metadata.minCoreVersion}, ` +
          `but current version is ${this.config.coreVersion}`
        );
      }
    }
    if (resolvedPlugin.metadata.maxCoreVersion) {
      if (!satisfiesVersion(`<=${resolvedPlugin.metadata.maxCoreVersion}`, this.config.coreVersion)) {
        throw new Error(
          `Plugin ${name} requires core version <= ${resolvedPlugin.metadata.maxCoreVersion}, ` +
          `but current version is ${this.config.coreVersion}`
        );
      }
    }

    // Parse dependencies
    const dependencies = this.parseDependencies(resolvedPlugin.metadata.dependencies);

    // Add to dependency graph
    this.dependencyGraph.addPlugin(name, version, dependencies);

    // Create config
    const pluginConfig: PluginConfig = {
      enabled: true,
      priority: 50,
      settings: {},
      ...this.config.defaultConfig,

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Upgrade the plugin to a release built for your core major (no maxCoreVersion ceiling below it)
  2. Drop the incompatible legacy plugin from the discovery/load list
  3. If you maintain the plugin, raise or remove metadata.maxCoreVersion after verifying compatibility, and rebuild

Example fix

// before
await registry.register(legacyPlugin); // maxCoreVersion: '2.9.0', coreVersion '3.0.0' -> throws

// after
// in the plugin source, after verifying compatibility with core v3:
// metadata: { name: 'legacy', version: '3.0.0' /* maxCoreVersion removed */ }
await registry.register(upgradedPlugin);
Defensive patterns

Strategy: validation

Validate before calling

const maxCore = plugin.metadata.maxCoreVersion;
if (maxCore && !satisfiesSemver(coreVersion, `<=${maxCore}`)) {
  logger.warn(
    `skipping ${plugin.metadata.name}: supports core <= ${maxCore}, host is ${coreVersion}`
  );
  continue;
}
await registry.register(plugin);

Prevention

When it happens

Trigger: Registering a legacy plugin declaring maxCoreVersion '2.9.0' against a registry with coreVersion '3.x'; plugin package abandoned before the v3 API rename, so its ceiling excludes your host; major-version upgrade of the host with old plugin bundles still in the load path.

Common situations: Upgrading the core/host to a new major while third-party plugins lag behind; stale plugin directories auto-discovered at boot; coreVersion config edited to a newer value without checking plugin ceilings.

Related errors


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/08d6a7aa61817faf. Report an issue: GitHub.