fix(voices): always render the "More voices" door on voice surfaces (#472)#476
Merged
Conversation
…472) The door was gated on the shortlist actually hiding voices, so Pi (3 voices, cap 5) never showed it anywhere — leaving no path from pi.ai to the extension's voice catalog. The door is a navigation affordance, not an overflow marker: render it unconditionally on capped surfaces (Pi dropdown, Claude menu) and opt Pi's uncapped settings grid in via a new showsMoreVoicesDoor() hook. Closes #472 Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Founder tasting feedback on Patch A (#470): pi.ai shows no "More voices" row in either the in-chat dropdown or Pi's Voice settings grid, so there is no discoverable path from Pi to the extension's voice catalog. The door was gated on
curated.hiddenCount > 0, and Pi's 3-voice catalog fits under the cap of 5 — so the gate never opened.What
The door's meaning has shifted from overflow marker to navigation affordance, so it now renders unconditionally:
VoiceSelector: newshowsMoreVoicesDoor()hook (defaults to "yes on capped surfaces"); both the capped and uncapped populate branches consult it instead ofhiddenCount.PiVoiceSettings(uncapped grid) opts in via the hook — its grid stays uncapped, but ends with the door.ClaudeVoiceMenuappends its door row unconditionally (previously only when the catalog exceeded the cap of 6 — invisible in practice today, since Claude serves 10 voices, but now guaranteed).Idempotency is unchanged:
addMoreVoicesDoorstill reuses an existing door node on repeated populates.Tests (fail-first)
Flipped the two "omits the door when the catalog fits the cap" expectations (Pi dropdown, Claude menu) and added a
PiVoiceSettingsdoor suite (door present in uncapped grid + no duplication on repeated populates). All 4 failed before the fix; fullnpm testgate green after.Closes #472
🤖 Generated with Claude Code
https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o