{"record":{"id":"9b6eb7547b1df52e","repo":"ruvnet/ruflo","slug":"hierarchy-must-have-at-least-one-node","errorCode":null,"errorMessage":"Hierarchy must have at least one node","messagePattern":"Hierarchy must have at least one node","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"v3/plugins/hyperbolic-reasoning/src/bridges/hyperbolic-bridge.ts","lineNumber":403,"sourceCode":"\n    // Sort by distance and take top k\n    results.sort((a, b) => a.distance - b.distance);\n    const topK = results.slice(0, k);\n\n    return {\n      items: topK,\n      totalCandidates: results.length,\n      searchTimeMs: performance.now() - startTime,\n    };\n  }\n\n  // ============================================================================\n  // Private Helper Methods\n  // ============================================================================\n\n  private validateHierarchy(hierarchy: Hierarchy): void {\n    if (hierarchy.nodes.length === 0) {\n      throw new Error('Hierarchy must have at least one node');\n    }\n\n    if (hierarchy.nodes.length > 1_000_000) {\n      throw new Error('Hierarchy exceeds maximum size of 1M nodes');\n    }\n\n    // Check for cycles\n    const visited = new Set<string>();\n    const inStack = new Set<string>();\n\n    const hasCycle = (nodeId: string): boolean => {\n      if (inStack.has(nodeId)) return true;\n      if (visited.has(nodeId)) return false;\n\n      visited.add(nodeId);\n      inStack.add(nodeId);\n\n      const node = hierarchy.nodes.find(n => n.id === nodeId);","sourceCodeStart":385,"sourceCodeEnd":421,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/plugins/hyperbolic-reasoning/src/bridges/hyperbolic-bridge.ts#L385-L421","documentation":"validateHierarchy() found the hierarchy's node list empty. Embedding an empty hierarchy is meaningless, so the guard fires before any hyperbolic embedding work; supply a hierarchy with at least one node.","triggerScenarios":"Thrown at v3/plugins/hyperbolic-reasoning/src/bridges/hyperbolic-bridge.ts:403 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a hierarchy containing at least one node before embedding.","Validate input size up front and return an empty-result status instead of throwing for empty input, if that is acceptable."],"exampleFix":null,"handlingStrategy":"validation","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"}