RRF constant k (60 per Cormack 2009; documented for transparency).
Always "rrf" in v3.x — present as a versioned discriminator.
Echo of the input query.
Optionalsignal_v2.0.0-beta.2: per-signal failure reasons. Pre-fix, ranker exceptions
were silently swallowed (only stderr-logged). The MCP response just
showed signals_used: [] with matches: [] — caller couldn't tell
"no hits" from "all rankers crashed". Now any catch'ed exception
surfaces here as a string so agents can reason about reliability.
v2.9.0 added reranker for cross-encoder failure surfacing.
Which rankers contributed to the fused result.
Envelope returned by searchHybrid.
signals_usedtells the agent which rankers actually fired (BM25 needs--persistent-index; embeddings needsbuild-embeddings).signal_errorssurfaces failed-but-attempted rankers so an emptymatches[]can be distinguished from "all rankers crashed".