f02f3b55b6
Speaker profiles share the vector table with notes and facts. The doc comment said reading them through Catalog is what keeps recall from ranking a voiceprint. It is not. Catalog controls how speaker code reads its own rows and says nothing about Search, which scanned every row. What actually hid them was cosine returning 0 on a width mismatch, so a 192-dim ECAPA row scored 0 against a 384-dim query. Some x-vector exports are 384-dim, and one of those would have surfaced speaker:kami as a recall hit carrying the name of a person. Both backends now skip the prefix in Search, and the prefix is one constant in internal/memory so the store layer can filter on it without importing internal/speaker. Two more differences between the backends closed here. ByPrefix on the in-memory store returned the stored metadata map by reference, so a caller editing a returned Record edited the row, while the persistent one unmarshals fresh. And the append to upsert change in Insert is a fix in its own right, not only a speaker concern: any re-indexed id used to leave a second stale copy searchable. Found in review of #74.