Skip to content

fix(voices): distinguishing subtitles for identically-named catalog rows (#474)#478

Merged
rosscado merged 1 commit into
mainfrom
fix/474-paola-disambiguation
Jul 2, 2026
Merged

fix(voices): distinguishing subtitles for identically-named catalog rows (#474)#478
rosscado merged 1 commit into
mainfrom
fix/474-paola-disambiguation

Conversation

@rosscado

@rosscado rosscado commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Why

Founder tasting feedback on Patch A (#470): "Paola appears in the list for Pi twice." The live pi /voices payload genuinely contains two distinct Paolas — classic (ig1Te…, 33 languages, 1000 credits/1k, no description) and paola-v3 (eleven_v3 model, 75 languages, 2000 credits/1k, with a description). The settings catalog rendered subtitles only from description, so the classic row was bare and the two rows were indistinguishable.

What

  • Rows without a server description now fall back to a language-coverage subtitle — "Speaks N languages" (voiceSpeaksNLanguages, new en key with a $count$ placeholder). Language coverage is exactly what separates the twins, and it's honest, useful copy on any description-less row (Joey gets it too).
  • SpeechSynthesisVoiceRemote gains the optional languages?: string[] field the server already sends.
  • No dedupe: the two Paolas are different products (price + model + coverage), so both stay listed — now tellable apart. Richer variant labelling (e.g. sibling_id) remains the planned /voices manifest work in saypi-api (design doc §5).

Tests (fail-first)

Two new cases in voices-controller.spec.tsx: twin-name catalog renders distinct, non-empty subtitles (failed before — classic Paola's subtitle was empty); a voice with neither description nor language data renders no subtitle span. Full npm test gate green.

Closes #474

🤖 Generated with Claude Code

https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o

…title (#474)

The pi catalog serves two distinct voices both named "Paola" (classic +
eleven_v3); only the v3 variant carries a server description, so the
settings catalog showed two identical bare rows. Rows without a
description now fall back to a language-coverage subtitle ("Speaks N
languages") built from the /voices `languages` field, which is exactly
what separates the twins (33 vs 75 languages) and is useful copy on any
description-less row.

Closes #474

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o
@rosscado rosscado merged commit 950fb5e into main Jul 2, 2026
2 checks passed
@rosscado rosscado deleted the fix/474-paola-disambiguation branch July 2, 2026 21:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Voices settings: "Paola" appears twice in the Pi catalog with nothing to tell the rows apart

1 participant