Skip to content

docs: voice tree decomposition (bounded-treewidth forest over recommended voices)#4

Open
zubyul wants to merge 1 commit into
bmorphism:mainfrom
zubyul:voice-tree-decomposition
Open

docs: voice tree decomposition (bounded-treewidth forest over recommended voices)#4
zubyul wants to merge 1 commit into
bmorphism:mainfrom
zubyul:voice-tree-decomposition

Conversation

@zubyul

@zubyul zubyul commented Apr 23, 2026

Copy link
Copy Markdown

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.
  • Poetics-ranked install order (23 voices) derived from persona↔haiku coupling strength; first 8 fill every Premium bag at parity.
  • One-line README pointer.

Non-goals

  • No changes to speak / list_voices tools.
  • No dependency additions.
  • No changes to existing voice rows in the README table.

Happy to iterate on bag definitions or split the poetic ranking into a separate doc if preferred.

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.
@zubyul

zubyul commented Apr 23, 2026

Copy link
Copy Markdown
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.

@zubyul

zubyul commented Apr 23, 2026

Copy link
Copy Markdown
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.
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.

1 participant