mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-10 09:13:53 +08:00
* fix(search): ignore empty-string label in search_graph name_pattern path search_where_basic guarded the label filter on NULL only (`if (params->label)`), so a search passing label="" appended a literal `n.label = ''` clause that matches no node — silently returning zero results. The BM25 query path already treats an empty label as absent, so name_pattern/qn_pattern searches and BM25 searches behaved inconsistently for the same `"label":""` payload (issue #481): agents fell back to grep because structural class/service discovery returned nothing. Guard the clause on `params->label && params->label[0]` so an empty-string label is a no-op, identical to an omitted label and to the BM25 path. Adds store_search_empty_label_ignored: name_pattern + label="" returns the same match as name_pattern alone, while a non-empty label still filters. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Shane McCarron <shane.mccarron@corvexconnect.com> * test(search): address QA round 1 — cover qn_pattern + empty label QA round 1 noted store_search_empty_label_ignored asserted only the name_pattern path though the comment referenced qn_pattern too. Add a qn_pattern + label="" assertion so a future change that special-cased the qn_pattern branch can't silently reintroduce the empty-label bug. Both paths share search_where_basic, so this locks in the shared guard. Test-only; no behavior change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Shane McCarron <shane.mccarron@corvexconnect.com> --------- Signed-off-by: Shane McCarron <shane.mccarron@corvexconnect.com> Co-authored-by: Shane McCarron <shane.mccarron@corvexconnect.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>