Follow-up to v0.13.3 (which hardened the AUTO many-to-one voiceprint fold).
Problem
The 0.13.3 fix guards the automatic identify_speakers Pass-2 fold, but a real field incident came through the human labeling path, which has no equivalent guard:
millet label --auto correctly left a new founder’’s cluster (SPEAKER_08, "Humphrey") raw — no voiceprint match, because he had no profile.
- A human then labeled that raw cluster as an existing, already-matched participant ("Bright", who was a different cluster
SPEAKER_06 in the same session) via the vezir TUI → millet label --apply-json ... --update-profiles.
- Result: two different people merged under one name in the transcript/summary, AND
--update-profiles blended Humphrey’’s voice into Bright’’s team voiceprint (n_sessions 11→12/13), causing profile drift that would degrade future auto-labeling.
Why it matters
Voiceprint contamination is silent and compounding: once a profile is polluted, future sessions mis-match, and each --update-profiles can deepen the drift.
Proposed guard (millet side)
- In
update_profiles_from_confirmed_labels (and/or the --apply-json --update-profiles path in cli/label.py): when a human assigns a name to a cluster that (a) did NOT voiceprint-match that name in this session AND (b) the name already belongs to a different cluster in the same session, emit a loud warning and, by default, skip the profile update for that cluster (require an explicit --force-profile to enroll it). Applying the transcript label is fine; polluting the profile is the dangerous part.
- Optionally: cross-check the newly-assigned cluster’’s embedding cosine against the existing profile of that name; if it’’s below
MATCH_THRESHOLD, warn that "this cluster does not sound like " before enrolling.
Vezir side (entry point)
The vezir TUI label screen (vezir/client/tui/label_screen.py) is where the human picks names; a pre-submit warning when reusing a name already bound to another cluster would catch this at the source. Cross-ref: pretyflaco/vezir.
Repro / evidence
Session 01KXZNWT2YNCQ7K6PTK8ZKJSTR (Blink Startups): SPEAKER_08 (Humphrey/BitZ/Zambia) labeled "Bright"; job log shows auto left it unrecognized, human apply-json added the mislabel, --update-profiles ran. Fixed manually (transcript re-split, Bright profile restored from backup, Humphrey enrolled fresh; post-fix cosine(Bright,Humphrey)=0.20).
Follow-up to v0.13.3 (which hardened the AUTO many-to-one voiceprint fold).
Problem
The 0.13.3 fix guards the automatic
identify_speakersPass-2 fold, but a real field incident came through the human labeling path, which has no equivalent guard:millet label --autocorrectly left a new founder’’s cluster (SPEAKER_08, "Humphrey") raw — no voiceprint match, because he had no profile.SPEAKER_06in the same session) via the vezir TUI →millet label --apply-json ... --update-profiles.--update-profilesblended Humphrey’’s voice into Bright’’s team voiceprint (n_sessions 11→12/13), causing profile drift that would degrade future auto-labeling.Why it matters
Voiceprint contamination is silent and compounding: once a profile is polluted, future sessions mis-match, and each
--update-profilescan deepen the drift.Proposed guard (millet side)
update_profiles_from_confirmed_labels(and/or the--apply-json --update-profilespath incli/label.py): when a human assigns a name to a cluster that (a) did NOT voiceprint-match that name in this session AND (b) the name already belongs to a different cluster in the same session, emit a loud warning and, by default, skip the profile update for that cluster (require an explicit--force-profileto enroll it). Applying the transcript label is fine; polluting the profile is the dangerous part.MATCH_THRESHOLD, warn that "this cluster does not sound like " before enrolling.Vezir side (entry point)
The vezir TUI label screen (
vezir/client/tui/label_screen.py) is where the human picks names; a pre-submit warning when reusing a name already bound to another cluster would catch this at the source. Cross-ref: pretyflaco/vezir.Repro / evidence
Session
01KXZNWT2YNCQ7K6PTK8ZKJSTR(Blink Startups):SPEAKER_08(Humphrey/BitZ/Zambia) labeled "Bright"; job log shows auto left it unrecognized, human apply-json added the mislabel,--update-profilesran. Fixed manually (transcript re-split, Bright profile restored from backup, Humphrey enrolled fresh; post-fix cosine(Bright,Humphrey)=0.20).