docs: voice tree decomposition (bounded-treewidth forest over recommended voices)#4
Open
zubyul wants to merge 1 commit into
Open
docs: voice tree decomposition (bounded-treewidth forest over recommended voices)#4zubyul wants to merge 1 commit into
zubyul wants to merge 1 commit into
Conversation
Bounded-treewidth (width 2) forest grouping of recommended voices by auditory-phonetic neighborhood. Two rooted subtrees (Fiona-Scottish / Kyoko-Japanese) joined at an Indic bridge bag, plus extended bags for Slavic, Semitic-Persian, Indo-Iranian, Maritime SE Asian, and Sinitic enrichment clusters. Includes a poetics-ranked install order derived from the persona and haiku pairings in the README, and a machine-readable adjacency JSON for downstream voice-selection tooling.
Author
|
Companion runtime tool for this PR: zubyul/voice-observatory — a stdlib-only macOS curses TUI that observes the voice-download invariant across the five install pathways (Settings / URL / AppleScript / VoiceOver Utility / MDM). Kept in a separate repo so this PR stays Node-only and doc-scoped. |
Author
|
Empirical follow-up: I tried a 6th pathway via private MobileAsset.framework. Binary compiles, class + selector surface is correct, but every asset type returns rc=2 / rc=5 from an unsigned binary. Apple gates these calls behind com.apple.private.mobileasset.allowed_asset_types, held only by signed system components. Writeup at https://github.com/zubyul/voice-observatory — confirms UI-mediated P1-P5 are the only paths for userspace. |
zubyul
pushed a commit
to zubyul/voice-observatory
that referenced
this pull request
Apr 23, 2026
Consumes voice-neighbors.json (from bmorphism/say-mcp-server#4) to display live bag coverage in a new pane: how many bags are full / partial / empty given the currently-installed voice set, plus the poetics-ranked next-install target. Closes the loop between spec (PR #4), observer (this TUI), and the user actual voice state.
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.
Adds docs/voice-tree-decomposition.md and docs/voice-neighbors.json.
What
A bounded-treewidth (width 2) forest grouping of the README recommended voices by auditory-phonetic neighborhood. Every bag has size 3; adjacency edges reflect language-family proximity, prosodic timing class, and colonial-diaspora bridges.
Why
The README persona × haiku table is a great per-voice resource but does not encode how voices relate. With the forest, downstream tools can pick voice subsets by coverage of a locale band, compute fallback chains (nearest-neighbor at same quality tier), schedule multi-speaker narration so adjacent speakers sound adjacent, and pre-compute shortest paths between any two voices (Fiona ↔ Kyoko = 3 bag transitions via the Indic bridge).
Contents
docs/voice-tree-decomposition.md- prose spec: adjacency relation, Tree_Fiona (Europe + Commonwealth), Tree_Kyoko (East Asia), cross-tree bridge X, extended bags D0 (Slavic) / E (Slavic↔Semitic↔Persian) / F (Indo-Iranian) / G (Maritime SE Asia) / C1' (Sinitic enrichment).docs/voice-neighbors.json- machine-readable adjacency.Non-goals
speak/list_voicestools.Happy to iterate on bag definitions or split the poetic ranking into a separate doc if preferred.