c63de5a231
Port from nearai/ironclaw#7965: BM25 admits any document scoring above zero, i.e. sharing ONE term with the query. A long descriptive search for a capability that does not exist therefore returned a plausible- looking ranked list, and the model read 'results exist' as 'it is in here somewhere' and rephrased instead of stopping (IronClaw production trace: 652 tool calls, 216 of them tool_search, hunting a 'data' tool that did not exist). A document must now match at least half the query's ANSWERABLE terms (terms present anywhere in the index) before it is offered. Coverage only engages from four answerable terms up, preserving recall on short queries; exact tool-name matches remain authoritative; the substring fallback is unchanged. Docs: relevance-floor bullet added to tool-search.md implementation details.