{"record":{"id":"1de6788fd5eef7fb","repo":"ruvnet/ruflo","slug":"reasoningbank-hnsw-search-failed-falling-back-t","errorCode":null,"errorMessage":"[ReasoningBank] HNSW search failed, falling back to brute-force","messagePattern":"\\[ReasoningBank\\] HNSW search failed, falling back to brute-force","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/hooks/src/reasoningbank/index.ts","lineNumber":395,"sourceCode":"    let results: Array<{ pattern: GuidancePattern; similarity: number }> = [];\n\n    // Try HNSW search first (150x+ faster)\n    if (this.hnswIndex && this.useRealBackend) {\n      const hnswStart = performance.now();\n      try {\n        const hnswResults = await this.hnswIndex.search(embedding, k, this.config.hnswEfSearch);\n        this.metrics.hnswSearchTime += performance.now() - hnswStart;\n\n        for (const { id, distance } of hnswResults) {\n          const pattern = this.shortTermPatterns.get(id) || this.longTermPatterns.get(id);\n          if (pattern) {\n            // Convert distance to similarity (cosine distance -> similarity)\n            const similarity = 1 - distance;\n            results.push({ pattern, similarity });\n          }\n        }\n      } catch (e) {\n        console.warn('[ReasoningBank] HNSW search failed, falling back to brute-force');\n        results = this.bruteForceSearch(embedding, k);\n      }\n    } else {\n      // Brute-force search\n      results = this.bruteForceSearch(embedding, k);\n    }\n\n    const searchTime = performance.now() - startTime;\n    this.metrics.searchCount++;\n    this.metrics.totalSearchTime += searchTime;\n    this.metrics.patternsRetrieved += results.length;\n\n    return results;\n  }\n\n  /**\n   * Brute-force search (fallback)\n   */","sourceCodeStart":377,"sourceCodeEnd":413,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/hooks/src/reasoningbank/index.ts#L377-L413","documentation":"Log warning in searchPatterns: the HNSW index search threw, so pattern retrieval degrades to brute-force scanning over the stored patterns (correct but ~150x slower).","triggerScenarios":"Thrown at v3/@claude-flow/hooks/src/reasoningbank/index.ts:395 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the HNSW index error detail; brute-force fallback keeps results correct but slower — rebuild the index or fix the AgentDB install."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}