Skip to content

Broken optionalDependencies in @ruvector/ruvllm@2.4.0–2.5.4 (pin to unpublished 2.3.0 native binaries) #411

@ruvnet

Description

@ruvnet

Summary

@ruvector/ruvllm@2.4.0 through 2.5.4 (current latest on npm) declare
optionalDependencies for all five native binary packages pinned to
2.3.0 — but no native package was ever published at 2.3.0. The
highest published version of every platform binary is 2.0.1.

Net effect: the JS wrapper installs cleanly but the native loader has
nothing to load on any platform, because npm silently skips
optional deps it can't resolve. ruvllm@2.4.0+ is effectively broken-by-design
as published.

This package is pulled in transitively by @claude-flow/cli via
@claude-flow/memory@3.0.0-alpha.14 → agentdb@3.0.0-alpha.11 → @ruvector/ruvllm@2.5.4,
so any user installing claude-flow gets the broken wrapper.

Reproduce

$ npm view @ruvector/ruvllm@2.5.4 optionalDependencies
{
  '@ruvector/ruvllm-linux-x64-gnu': '2.3.0',
  '@ruvector/ruvllm-linux-arm64-gnu': '2.3.0',
  '@ruvector/ruvllm-darwin-x64': '2.3.0',
  '@ruvector/ruvllm-darwin-arm64': '2.3.0',
  '@ruvector/ruvllm-win32-x64-msvc': '2.3.0'
}

$ npm view @ruvector/ruvllm-darwin-arm64 versions
[ '0.2.0', '0.2.3', '2.0.0', '2.0.1' ]

$ npm view @ruvector/ruvllm-darwin-arm64@2.3.0
npm error 404 '@ruvector/ruvllm-darwin-arm64@2.3.0' is not in this registry.

All five native packages have the identical published version set
[0.2.0, 0.2.3, 2.0.0, 2.0.1].

Why it happened

.github/workflows/ruvllm-native.yml builds and publishes the platform
binaries on a ruvllm-v* tag, then publishes the main JS package in the
same job. Versions 2.4.0, 2.5.0–2.5.4 of the JS package were
published outside that flow (see
e9295556e,
3d7f31ce7,
e7e545e22) without rebuilding/republishing the
native binaries. Each release bumped the wrapper version and the
optionalDependencies pin to 2.3.0, but the native binaries never
caught up — they remain at 2.0.1 on npm.

Fix

Two-part:

  1. Source fix (this PR-equivalent edit): point
    npm/packages/ruvllm/package.json optionalDependencies at the
    latest actually-published native version 2.0.1, so the next
    release of the wrapper resolves its native loader.
  2. Republish: ship a new wrapper version (e.g. 2.5.5) with the
    corrected pin. Either:
    • keep pinning to the existing native 2.0.1 (cheapest, ships today), or
    • run the RuvLLM Native Build workflow with a fresh tag
      (ruvllm-v2.5.5) to rebuild + republish the native binaries at the
      same version as the wrapper. ADR-recommend the latter so the
      version space stays one-to-one going forward.

Process gap to close

The prepublishOnly script for @ruvector/ruvllm should
verify each optionalDependencies version exists on npm before letting
the publish proceed. A 6-line npm view ... version check would have
caught every one of the broken 2.4.x/2.5.x releases at publish time.

Affected versions

@ruvector/ruvllm2.4.0, 2.4.1, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.5.4
(all currently resolvable, all silently broken on every platform).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions