Skip to content

v3.10.33 β€” CI/router/ONNX bug cluster

Choose a tag to compare

@ruvnet ruvnet released this 02 Jun 08:00
· 49 commits to main since this release

v3.10.33 β€” CI/router/ONNX bug cluster

Critical / high-severity fixes from open issues

#2267 [HIGH] β€” v3-ci.yml 5 consecutive failures on main

  • Root cause: unquoted : inside a step name ("Guard 2 β€” smoke: generate ...") β€” YAML parser treated smoke: as a second mapping key and rejected the whole workflow. GitHub Actions accepted the push, scheduled the run, and produced zero jobs β€” invisible to green-dashboard-style monitoring.
  • Fix: quote the name. Workflow now parses to 53 jobs.

#2256 [HIGH] β€” --version blocks 60+ s on cold ONNX cache

  • Root cause: --version triggered the full CLI bootstrap, which eagerly loaded ruvector + downloaded a 23 MB ONNX model from HuggingFace. Cold-cache cost: ~60–90 s wall time, causing SIGTERM (exit 143) under the default npx and 30 s MCP stdio timeouts.
  • Fix: short-circuit --version/-V in both @claude-flow/cli/bin/cli.js and ruflo/bin/ruflo.js before any heavy import β€” read version straight from package.json.
  • Measured: 60s+ β†’ 33 ms against the published ruflo@3.10.33.

#2253 [Critical] β€” MCP stdio writes non-JSON to stdout, times out in Codex

  • Root cause: upstream embedder libraries (ruvector, ruvector-onnx-embeddings-wasm) emit progress to console.log (stdout) with messages like Loading model: ..., Downloading: ..., πŸš€ Initializing N worker threads.... That corrupts the MCP JSON-RPC stdio framer; strict clients like Codex never see initialize complete.
  • Fix: log-filters.ts now redirects all known embedder progress prefixes from console.log β†’ console.error. Filter installed in both bin/cli.js (covers MCP stdio path) and src/log-filters.ts (CLI path).
  • Verified end-to-end: echo '{"jsonrpc":"2.0",...}' | npx ruflo now returns clean JSON-RPC on stdout with all ONNX noise routed to stderr.

#2257 [High] β€” .claude/helpers/router.js mis-routes at 80% confidence via unanchored regex

  • Root cause: keyword patterns like cd/ci/ui/add/structure matched inside unrelated words: decision/infrastructure/address/addendum. Confidence was a hardcoded 0.8 despite the matcher being a static keyword table, not a learned classifier.
  • Fix: token-list schema with \b boundaries on single tokens (phrases keep whitespace as a natural boundary). Matched-confidence 0.8β†’0.6, fall-through 0.5β†’0.3 to reflect the heuristic-not-learned nature.
  • Validated against all 11 reported mis-route cases plus the source-of-truth generator output.

Already fixed (waiting for this publish)

#2246 β€” memory_search_unified 6-namespace hardcode

  • Already fixed in source (3.10.29, ADR-089). Reporter's environment was 3.10.22. Dynamic namespace enumeration now ships in 3.10.33.

Not a code bug

#2243 β€” verify.mjs cannot load @noble/ed25519

  • Script already handles missing dep with a clear Fix: ... message and exits 2 (precondition failure). Confirmed signatureValid=true on a clean checkout. Operational fix belongs in the external scheduled runner's config (must npm ci before invoking verify.mjs).

Out of scope

#2259 β€” memory store/list contradictory persistence surfaces

  • Architectural fix in memory-bridge.ts dispatch; tracked separately.

CI regression guards (so this can't happen again)

  • scripts/smoke-workflows-yaml.mjs β€” parses every .github/workflows/*.yml and fails the build on any YAML syntax error. Direct guard against the #2267 silent-fail mode.
  • scripts/smoke-router-regex.mjs β€” renders the router from helpers-generator.ts::generateAgentRouter, asserts all 11 mis-route cases pass, confidence isn't 0.8, and \b anchors are still in the source.
  • New static-regression-guards job runs both smokes early in v3-ci.yml (no install/build β€” just js-yaml + tsx).

Install

npx ruflo@latest --version           # β†’ ruflo v3.10.33  (33 ms)
npx @claude-flow/cli@latest --version  # β†’ ruflo v3.10.33  (35 ms)

All three dist-tags (latest, alpha, v3alpha) point at 3.10.33 across all three packages.