v3.10.31
ruvnet/ruflov3.10.31May 31, 2026by ruvnet
AI Summary
Bug-fix patch addressing model router escalation overriding Thompson bandit and daemon trigger racing headless initialization.
Key Highlights
- Fixed model router escalation discarding trained opus-suppressed priors
- Fixed daemon trigger -w <worker> racing headless init (new headlessInitPromise field)
- New env override: CLAUDE_FLOW_MAX_UNCERTAINTY
- 4 regression tests covering reporter's exact scenario
- Cold-start Beta(1,1) priors preserve original conservative behavior
New Features
- Router escalation with mean and confidence checks
- Daemon trigger with deferred promise initialization
- Environment variable for uncertainty threshold
Full Release Notes
## Bug fixes ### #2250 — model router escalation overrode Thompson bandit Trained opus-suppressed priors were discarded by an "escalate one tier up" step that fired on ~every trivial route (the `uncertainty` formula was structurally >0.6, gate at 0.15). Reporter (@grym3s) measured opus selected ~40% on trivial tasks, haiku never selected. **Fix in `v3/@claude-flow/cli/src/ruvector/model-router.ts`:** - Escalation now skips when (a) target mean is meaningfully worse than selected (`< selected_mean − 0.10`), OR (b) selected has confident+decent posterior (`α+β ≥ 5` AND `mean ≥ 0.45`) - Cold-start `Beta(1,1)` priors fail both checks → unlearned routers preserve original conservative behavior - New env override: `CLAUDE_FLOW_MAX_UNCERTAINTY=0.0..1.0` ### #2251 — `daemon trigger -w <worker>` raced headless init Constructor kicked off `initHeadlessExecutor()` fire-and-forget. On-demand `daemon trigger` called `triggerWorker()` immediately after construction, raced the init, and fell through to the local stub in ~2ms. Scheduled fires were unaffected (long-running daemon never raced). Reporter (@shaharKeisarApps). **Fix in `v3/@claude-flow/cli/src/services/worker-daemon.ts`:** - New `headlessInitPromise` field capturing the constructor's init promise - `triggerWorker()` awaits it before checking `headlessAvailable` ## Regression guard `v3/@claude-flow/cli/__tests__/issue-2250-2251-regression.test.ts` — 4 new tests: - Loads reporter's exact suppressed-opus prior, asserts opus rate <20% AND haiku selected ≥1 time over 50 trivial routes - Cold-start preservation - Env override - Deferred-promise harness proves `executeWorker()` cannot fire until `headlessInitPromise` resolves All 12 router + daemon tests pass. TypeScript clean. ## Install ```bash npx ruflo@latest # or @alpha / @v3alpha npx @claude-flow/cli@latest npx claude-flow@latest ``` All three packages published to npm, all three dist-tags (`latest`, `alpha`, `v3alpha`) pointing at 3.10.31. ## What's NOT in this release 5-dataset BEIR benchmark work (TREC-COVID ingest still in flight) → ships as 3.10.32.