voicerender 0.2.9__tar.gz → 0.2.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +5 -0
  2. voicerender-0.2.10/.ledger/releaseledger/data/ledgers/main/releases/v0.2.10/audit/commit-audit.yaml +36 -0
  3. voicerender-0.2.10/.ledger/releaseledger/data/ledgers/main/releases/v0.2.10/entries/entry-0001.md +30 -0
  4. voicerender-0.2.10/.ledger/releaseledger/data/ledgers/main/releases/v0.2.10/release.md +27 -0
  5. voicerender-0.2.10/.ledger/releaseledger/work/v0.2.10/audit-decisions.yaml +13 -0
  6. voicerender-0.2.10/.ledger/releaseledger/work/v0.2.10/audit.yaml +30 -0
  7. voicerender-0.2.10/.ledger/releaseledger/work/v0.2.10/entries.yaml +25 -0
  8. voicerender-0.2.10/.ledger/releaseledger/work/v0.2.10/evidence/4828dad.patch +92 -0
  9. voicerender-0.2.10/.ledger/releaseledger/work/v0.2.10/evidence/manifest.json +23 -0
  10. voicerender-0.2.10/.ledger/releaseledger/work/v0.2.10/range.json +13 -0
  11. {voicerender-0.2.9/voicerender.egg-info → voicerender-0.2.10}/PKG-INFO +1 -1
  12. {voicerender-0.2.9 → voicerender-0.2.10}/docs/changelog.md +8 -0
  13. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_voice_descriptors.py +48 -0
  14. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/_version.py +3 -3
  15. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/voices_api.py +2 -5
  16. {voicerender-0.2.9 → voicerender-0.2.10/voicerender.egg-info}/PKG-INFO +1 -1
  17. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender.egg-info/SOURCES.txt +9 -0
  18. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender.egg-info/scm_file_list.json +9 -0
  19. voicerender-0.2.10/voicerender.egg-info/scm_version.json +8 -0
  20. voicerender-0.2.9/voicerender.egg-info/scm_version.json +0 -8
  21. {voicerender-0.2.9 → voicerender-0.2.10}/.codecrate.toml +0 -0
  22. {voicerender-0.2.9 → voicerender-0.2.10}/.github/workflows/codecov.yml +0 -0
  23. {voicerender-0.2.9 → voicerender-0.2.10}/.github/workflows/pre-commit.yml +0 -0
  24. {voicerender-0.2.9 → voicerender-0.2.10}/.github/workflows/python-publish.yml +0 -0
  25. {voicerender-0.2.9 → voicerender-0.2.10}/.github/workflows/tests.yml +0 -0
  26. {voicerender-0.2.9 → voicerender-0.2.10}/.gitignore +0 -0
  27. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/ledger.toml +0 -0
  28. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/.ledger-project.toml +0 -0
  29. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/config.toml +0 -0
  30. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
  31. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/audit/commit-audit.yaml +0 -0
  32. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/entries/entry-0001.md +0 -0
  33. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/release.md +0 -0
  34. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/audit/commit-audit.yaml +0 -0
  35. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0001.md +0 -0
  36. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0002.md +0 -0
  37. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0003.md +0 -0
  38. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0004.md +0 -0
  39. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0005.md +0 -0
  40. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0006.md +0 -0
  41. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0007.md +0 -0
  42. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/release.md +0 -0
  43. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/audit/commit-audit.yaml +0 -0
  44. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0001.md +0 -0
  45. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0002.md +0 -0
  46. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0003.md +0 -0
  47. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0004.md +0 -0
  48. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0005.md +0 -0
  49. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0006.md +0 -0
  50. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0007.md +0 -0
  51. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0008.md +0 -0
  52. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0009.md +0 -0
  53. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0010.md +0 -0
  54. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/release.md +0 -0
  55. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/audit/commit-audit.yaml +0 -0
  56. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0001.md +0 -0
  57. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0002.md +0 -0
  58. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0003.md +0 -0
  59. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0004.md +0 -0
  60. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/release.md +0 -0
  61. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/audit/commit-audit.yaml +0 -0
  62. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/entries/entry-0001.md +0 -0
  63. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/entries/entry-0002.md +0 -0
  64. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/release.md +0 -0
  65. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/audit/commit-audit.yaml +0 -0
  66. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/entries/entry-0001.md +0 -0
  67. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/entries/entry-0002.md +0 -0
  68. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/entries/entry-0003.md +0 -0
  69. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/entries/entry-0004.md +0 -0
  70. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/entries/entry-0005.md +0 -0
  71. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.4/release.md +0 -0
  72. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.5/audit/commit-audit.yaml +0 -0
  73. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.5/entries/entry-0001.md +0 -0
  74. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.5/release.md +0 -0
  75. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/audit/commit-audit.yaml +0 -0
  76. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/entries/entry-0001.md +0 -0
  77. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/entries/entry-0002.md +0 -0
  78. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/entries/entry-0003.md +0 -0
  79. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/entries/entry-0004.md +0 -0
  80. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/entries/entry-0005.md +0 -0
  81. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/entries/entry-0006.md +0 -0
  82. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.6/release.md +0 -0
  83. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.7/audit/commit-audit.yaml +0 -0
  84. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.7/entries/entry-0001.md +0 -0
  85. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.7/entries/entry-0002.md +0 -0
  86. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.7/entries/entry-0003.md +0 -0
  87. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.7/entries/entry-0004.md +0 -0
  88. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/0.2.7/release.md +0 -0
  89. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/audit/commit-audit.yaml +0 -0
  90. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0001.md +0 -0
  91. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0002.md +0 -0
  92. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md +0 -0
  93. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md +0 -0
  94. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md +0 -0
  95. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md +0 -0
  96. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/audit/commit-audit.yaml +0 -0
  97. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0001.md +0 -0
  98. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0002.md +0 -0
  99. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0003.md +0 -0
  100. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0004.md +0 -0
  101. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0005.md +0 -0
  102. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0006.md +0 -0
  103. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0007.md +0 -0
  104. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0008.md +0 -0
  105. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0009.md +0 -0
  106. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0010.md +0 -0
  107. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0011.md +0 -0
  108. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.8/release.md +0 -0
  109. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/audit/commit-audit.yaml +0 -0
  110. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0001.md +0 -0
  111. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0002.md +0 -0
  112. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0003.md +0 -0
  113. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0004.md +0 -0
  114. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0005.md +0 -0
  115. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0006.md +0 -0
  116. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0007.md +0 -0
  117. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0008.md +0 -0
  118. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/entries/entry-0009.md +0 -0
  119. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.9/release.md +0 -0
  120. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.1.1/audit-decisions.yaml +0 -0
  121. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.1.1/entries.yaml +0 -0
  122. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/audit-decisions.yaml +0 -0
  123. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/audit.yaml +0 -0
  124. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/entries.yaml +0 -0
  125. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/19f5b06.patch +0 -0
  126. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/245ca9f.patch +0 -0
  127. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/42a90e3.patch +0 -0
  128. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/480cbea.patch +0 -0
  129. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/4eb3c28.patch +0 -0
  130. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/50f298e.patch +0 -0
  131. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/56ae327.patch +0 -0
  132. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/57f1e24.patch +0 -0
  133. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/6dae2b6.patch +0 -0
  134. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/84f29db.patch +0 -0
  135. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/a390661.patch +0 -0
  136. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/a431dfa.patch +0 -0
  137. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/c2be7b3.patch +0 -0
  138. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/da15247.patch +0 -0
  139. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/ede34ea.patch +0 -0
  140. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/evidence/manifest.json +0 -0
  141. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.0/range.json +0 -0
  142. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/audit-decisions.yaml +0 -0
  143. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/audit.yaml +0 -0
  144. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/entries.yaml +0 -0
  145. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/evidence/3342e15.patch +0 -0
  146. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/evidence/3c82349.patch +0 -0
  147. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/evidence/7f466cc.patch +0 -0
  148. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/evidence/84f629e.patch +0 -0
  149. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/evidence/b7e1917.patch +0 -0
  150. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/evidence/manifest.json +0 -0
  151. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.1/range.json +0 -0
  152. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/audit-decisions.yaml +0 -0
  153. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/audit.yaml +0 -0
  154. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/entries.yaml +0 -0
  155. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/evidence/6510540.patch +0 -0
  156. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/evidence/8861791.patch +0 -0
  157. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/evidence/f093d36.patch +0 -0
  158. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/evidence/fdb106d.patch +0 -0
  159. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/evidence/manifest.json +0 -0
  160. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.2/range.json +0 -0
  161. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/audit-decisions.yaml +0 -0
  162. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/audit.yaml +0 -0
  163. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/entries.yaml +0 -0
  164. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/evidence/67e4d8e.patch +0 -0
  165. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/evidence/b17f1a9.patch +0 -0
  166. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/evidence/manifest.json +0 -0
  167. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.3/range.json +0 -0
  168. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/audit-decisions.yaml +0 -0
  169. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/audit.yaml +0 -0
  170. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/entries.yaml +0 -0
  171. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/evidence/304b84d.patch +0 -0
  172. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/evidence/3d486d5.patch +0 -0
  173. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/evidence/5ffdff4.patch +0 -0
  174. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/evidence/ccd30d2.patch +0 -0
  175. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/evidence/efe4f37.patch +0 -0
  176. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/evidence/manifest.json +0 -0
  177. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.4/range.json +0 -0
  178. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.5/audit-decisions.yaml +0 -0
  179. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.5/audit.yaml +0 -0
  180. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.5/entries.yaml +0 -0
  181. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.5/evidence/0ab4075.patch +0 -0
  182. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.5/evidence/manifest.json +0 -0
  183. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.5/range.json +0 -0
  184. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/audit-decisions.yaml +0 -0
  185. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/audit.yaml +0 -0
  186. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/entries.yaml +0 -0
  187. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/4ab4750.patch +0 -0
  188. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/5d929c9.patch +0 -0
  189. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/9a323b2.patch +0 -0
  190. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/ade44bc.patch +0 -0
  191. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/bc7551a.patch +0 -0
  192. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/fdfe8ca.patch +0 -0
  193. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/evidence/manifest.json +0 -0
  194. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.6/range.json +0 -0
  195. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/audit-decisions.yaml +0 -0
  196. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/audit.yaml +0 -0
  197. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/entries.yaml +0 -0
  198. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/009bc2f.patch +0 -0
  199. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/01ebf18.patch +0 -0
  200. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/1132f5f.patch +0 -0
  201. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/1ba5920.patch +0 -0
  202. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/4b52e71.patch +0 -0
  203. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/636402c.patch +0 -0
  204. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/6a21eef.patch +0 -0
  205. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/7f6f053.patch +0 -0
  206. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/88a2bde.patch +0 -0
  207. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/8f7b701.patch +0 -0
  208. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/9fa235e.patch +0 -0
  209. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/a8df404.patch +0 -0
  210. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/b089c79.patch +0 -0
  211. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/c384d1e.patch +0 -0
  212. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/d124fff.patch +0 -0
  213. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/e5e6839.patch +0 -0
  214. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/ed53140.patch +0 -0
  215. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/f74ce00.patch +0 -0
  216. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/evidence/manifest.json +0 -0
  217. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/0.2.7/range.json +0 -0
  218. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/audit-decisions.yaml +0 -0
  219. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/entries.yaml +0 -0
  220. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/evidence/264eb9b.patch +0 -0
  221. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/evidence/774f6f2.patch +0 -0
  222. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/evidence/9e71e84.patch +0 -0
  223. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/evidence/c4a2872.patch +0 -0
  224. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/evidence/fb7faaf.patch +0 -0
  225. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.1.0/evidence/manifest.json +0 -0
  226. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/audit-decisions.yaml +0 -0
  227. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/audit.yaml +0 -0
  228. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/entries.yaml +0 -0
  229. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/01e1ff8.patch +0 -0
  230. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/05451ee.patch +0 -0
  231. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/0eedac5.patch +0 -0
  232. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/1eac844.patch +0 -0
  233. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/3bad4f0.patch +0 -0
  234. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/4baf17e.patch +0 -0
  235. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/5089184.patch +0 -0
  236. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/58f64e9.patch +0 -0
  237. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/5b4f1f2.patch +0 -0
  238. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/72676e0.patch +0 -0
  239. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/7875994.patch +0 -0
  240. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/a37bba8.patch +0 -0
  241. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/a47820e.patch +0 -0
  242. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/a48ba9b.patch +0 -0
  243. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/a561679.patch +0 -0
  244. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/a61d829.patch +0 -0
  245. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/a929bbd.patch +0 -0
  246. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/db46ed5.patch +0 -0
  247. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/e1011f0.patch +0 -0
  248. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/f41ea26.patch +0 -0
  249. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/f9e1660.patch +0 -0
  250. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/facf152.patch +0 -0
  251. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/fd8b266.patch +0 -0
  252. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/fecfbff.patch +0 -0
  253. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/evidence/manifest.json +0 -0
  254. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.8/range.json +0 -0
  255. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/audit-decisions.yaml +0 -0
  256. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/audit.yaml +0 -0
  257. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/entries.yaml +0 -0
  258. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/0581372.patch +0 -0
  259. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/05e2511.patch +0 -0
  260. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/0b951e4.patch +0 -0
  261. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/16913d4.patch +0 -0
  262. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/3819783.patch +0 -0
  263. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/7c59333.patch +0 -0
  264. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/81f5f51.patch +0 -0
  265. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/d72b779.patch +0 -0
  266. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/f3679d3.patch +0 -0
  267. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/evidence/manifest.json +0 -0
  268. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/work/v0.2.9/range.json +0 -0
  269. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/releaseledger/write.lock +0 -0
  270. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/taskledger/.ledger-project.toml +0 -0
  271. {voicerender-0.2.9 → voicerender-0.2.10}/.ledger/taskledger/config.toml +0 -0
  272. {voicerender-0.2.9 → voicerender-0.2.10}/.pre-commit-config.yaml +0 -0
  273. {voicerender-0.2.9 → voicerender-0.2.10}/LICENSE +0 -0
  274. {voicerender-0.2.9 → voicerender-0.2.10}/MANIFEST.in +0 -0
  275. {voicerender-0.2.9 → voicerender-0.2.10}/README.md +0 -0
  276. {voicerender-0.2.9 → voicerender-0.2.10}/docs/Makefile +0 -0
  277. {voicerender-0.2.9 → voicerender-0.2.10}/docs/conf.py +0 -0
  278. {voicerender-0.2.9 → voicerender-0.2.10}/docs/index.md +0 -0
  279. {voicerender-0.2.9 → voicerender-0.2.10}/docs/make.bat +0 -0
  280. {voicerender-0.2.9 → voicerender-0.2.10}/docs/make.py +0 -0
  281. {voicerender-0.2.9 → voicerender-0.2.10}/docs/renderprofile.md +0 -0
  282. {voicerender-0.2.9 → voicerender-0.2.10}/docs/requirements.txt +0 -0
  283. {voicerender-0.2.9 → voicerender-0.2.10}/examples/README.md +0 -0
  284. {voicerender-0.2.9 → voicerender-0.2.10}/examples/plans/chapter.renderplan.toml +0 -0
  285. {voicerender-0.2.9 → voicerender-0.2.10}/examples/plans/chapter.voiceplan.toml +0 -0
  286. {voicerender-0.2.9 → voicerender-0.2.10}/examples/voices/narration.renderprofile.toml +0 -0
  287. {voicerender-0.2.9 → voicerender-0.2.10}/examples/voices/piper.toml +0 -0
  288. {voicerender-0.2.9 → voicerender-0.2.10}/examples/voices/pocket-reference.toml +0 -0
  289. {voicerender-0.2.9 → voicerender-0.2.10}/pyproject.toml +0 -0
  290. {voicerender-0.2.9 → voicerender-0.2.10}/setup.cfg +0 -0
  291. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_audio_boundaries.py +0 -0
  292. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_backends.py +0 -0
  293. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_bundle_batch_render.py +0 -0
  294. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_bundle_contract.py +0 -0
  295. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_bundle_inspect.py +0 -0
  296. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_bundle_render.py +0 -0
  297. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_bundle_roles.py +0 -0
  298. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_capacity.py +0 -0
  299. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_chatterboxsynth_engine.py +0 -0
  300. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_cli.py +0 -0
  301. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_control_surface_exports.py +0 -0
  302. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_document_contract.py +0 -0
  303. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_engine_contracts.py +0 -0
  304. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_engine_options.py +0 -0
  305. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_engine_registry.py +0 -0
  306. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_error_diagnostics.py +0 -0
  307. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_inflectsynth_engine.py +0 -0
  308. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_jsonutil.py +0 -0
  309. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_kittensynth_engine.py +0 -0
  310. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_kittensynth_pronunciation.py +0 -0
  311. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_kokoro_reference.py +0 -0
  312. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_lexicons_cli.py +0 -0
  313. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_managed_voices.py +0 -0
  314. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_model_management_api.py +0 -0
  315. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_model_management_cli.py +0 -0
  316. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_package_metadata.py +0 -0
  317. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_phononsynth_engine.py +0 -0
  318. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_pocketsynth_managed.py +0 -0
  319. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_preflight.py +0 -0
  320. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_profile_reidentify.py +0 -0
  321. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_profile_roles.py +0 -0
  322. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_profile_roles_cli.py +0 -0
  323. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_progress.py +0 -0
  324. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_qwen3_voice_design.py +0 -0
  325. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_qwen3synth_engine.py +0 -0
  326. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_render_book.py +0 -0
  327. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_render_lock.py +0 -0
  328. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_renderer.py +0 -0
  329. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_renderplan_input.py +0 -0
  330. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_renderplan_render.py +0 -0
  331. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_renderprofile.py +0 -0
  332. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_runtime.py +0 -0
  333. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_runtime_cli.py +0 -0
  334. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_session_pool.py +0 -0
  335. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_sopro_release_compatibility.py +0 -0
  336. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_soprosynth_engine.py +0 -0
  337. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_storage.py +0 -0
  338. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_supertonicsynth_engine.py +0 -0
  339. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_variants.py +0 -0
  340. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_voice_clone.py +0 -0
  341. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_voice_clone_cli.py +0 -0
  342. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_voice_source_cli.py +0 -0
  343. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_voice_source_codec.py +0 -0
  344. {voicerender-0.2.9 → voicerender-0.2.10}/tests/test_voice_sources.py +0 -0
  345. {voicerender-0.2.9 → voicerender-0.2.10}/tests/wheel_smoke.py +0 -0
  346. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/__init__.py +0 -0
  347. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/__main__.py +0 -0
  348. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/audio_boundaries.py +0 -0
  349. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/book.py +0 -0
  350. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/book_contract.py +0 -0
  351. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/book_layout.py +0 -0
  352. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/bundle.py +0 -0
  353. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/bundle_batch.py +0 -0
  354. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/bundle_contract.py +0 -0
  355. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/bundle_inspect.py +0 -0
  356. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/bundle_render_inspect.py +0 -0
  357. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/bundle_roles.py +0 -0
  358. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/capacity.py +0 -0
  359. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/cli.py +0 -0
  360. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/document.py +0 -0
  361. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/document_contract.py +0 -0
  362. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/__init__.py +0 -0
  363. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/api_probe.py +0 -0
  364. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/assets.py +0 -0
  365. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/base.py +0 -0
  366. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/catalog.py +0 -0
  367. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/chatterbox_assets.py +0 -0
  368. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/chatterboxsynth.py +0 -0
  369. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/inflectsynth.py +0 -0
  370. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/kittensynth.py +0 -0
  371. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/kokoro.py +0 -0
  372. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/metadata.py +0 -0
  373. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/options.py +0 -0
  374. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/phononsynth.py +0 -0
  375. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/piper.py +0 -0
  376. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/pipersynth.py +0 -0
  377. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/pocket.py +0 -0
  378. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/pocketsynth.py +0 -0
  379. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/profiles.py +0 -0
  380. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/qwen3synth.py +0 -0
  381. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/registry.py +0 -0
  382. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/selection.py +0 -0
  383. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/soprosynth.py +0 -0
  384. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/engines/supertonicsynth.py +0 -0
  385. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/error_diagnostics.py +0 -0
  386. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/errors.py +0 -0
  387. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/estimates.py +0 -0
  388. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/events.py +0 -0
  389. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/jsonutil.py +0 -0
  390. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/lexicons.py +0 -0
  391. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/managed_voices.py +0 -0
  392. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/models.py +0 -0
  393. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/models_api.py +0 -0
  394. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/preflight.py +0 -0
  395. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/profile_roles.py +0 -0
  396. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/progress.py +0 -0
  397. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/py.typed +0 -0
  398. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/render.py +0 -0
  399. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/render_lock.py +0 -0
  400. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/renderplan_input.py +0 -0
  401. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/renderplan_render.py +0 -0
  402. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/renderprofile.py +0 -0
  403. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/report_contract.py +0 -0
  404. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/role_bindings.py +0 -0
  405. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/runtime.py +0 -0
  406. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/session_pool.py +0 -0
  407. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/storage.py +0 -0
  408. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/variants.py +0 -0
  409. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/voice_clone.py +0 -0
  410. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/voice_design.py +0 -0
  411. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/voice_source_codec.py +0 -0
  412. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender/voice_sources.py +0 -0
  413. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender.egg-info/dependency_links.txt +0 -0
  414. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender.egg-info/entry_points.txt +0 -0
  415. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender.egg-info/requires.txt +0 -0
  416. {voicerender-0.2.9 → voicerender-0.2.10}/voicerender.egg-info/top_level.txt +0 -0
@@ -74,3 +74,8 @@
74
74
  {"data":{"updated_rows":9},"event":"audit.updated","event_id":"event-0074","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.2.9","schema_version":2}
75
75
  {"data":{"entry_ids":["entry-0001","entry-0002","entry-0003","entry-0004","entry-0005","entry-0006","entry-0007","entry-0008","entry-0009"],"synced_audit_rows":9},"event":"entry.batch_added","event_id":"event-0075","record_revisions":{"commit_audit_sheet":3,"entry:v0.2.9/entry-0001":1,"entry:v0.2.9/entry-0002":1,"entry:v0.2.9/entry-0003":1,"entry:v0.2.9/entry-0004":1,"entry:v0.2.9/entry-0005":1,"entry:v0.2.9/entry-0006":1,"entry:v0.2.9/entry-0007":1,"entry:v0.2.9/entry-0008":1,"entry:v0.2.9/entry-0009":1,"release:v0.2.9":3},"release_version":"v0.2.9","schema_version":2}
76
76
  {"data":{"released_at":"2026-11-06"},"event":"release.finalized","event_id":"event-0076","record_revisions":{"release:v0.2.9":4},"release_version":"v0.2.9","schema_version":2}
77
+ {"data":{"status":"planned"},"event":"release.created","event_id":"event-0077","record_revisions":{"release:v0.2.10":1},"release_version":"v0.2.10","schema_version":2}
78
+ {"data":{"fields":["git_base_ref","git_base_sha","git_commit_count","git_head_ref","git_head_sha","git_range"]},"event":"release.updated","event_id":"event-0078","record_revisions":{"release:v0.2.10":2},"release_version":"v0.2.10","schema_version":2}
79
+ {"data":{"row_count":1},"event":"audit.created","event_id":"event-0079","record_revisions":{"commit_audit_sheet":1},"release_version":"v0.2.10","schema_version":2}
80
+ {"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0080","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.2.10","schema_version":2}
81
+ {"data":{"entry_ids":["entry-0001"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0081","record_revisions":{"commit_audit_sheet":3,"entry:v0.2.10/entry-0001":1,"release:v0.2.10":3},"release_version":"v0.2.10","schema_version":2}
@@ -0,0 +1,36 @@
1
+ schema_version: 1
2
+ object_type: commit_audit_sheet
3
+ versioning:
4
+ schema_version: 1
5
+ revision: 3
6
+ release_version: v0.2.10
7
+ git_base_ref: v0.2.9
8
+ git_base_sha: e9d4d179d03c7cdb048a80682c1acb82b9282b1b
9
+ git_head_ref: HEAD
10
+ git_head_sha: 4828dadb8361678818718635c4765d64eb185a27
11
+ git_range: e9d4d179d03c7cdb048a80682c1acb82b9282b1b..4828dadb8361678818718635c4765d64eb185a27
12
+ commit_count: 1
13
+ rows:
14
+ - sha: 4828dadb8361678818718635c4765d64eb185a27
15
+ source_ref: git:4828dadb8361678818718635c4765d64eb185a27
16
+ short_sha: 4828dad
17
+ changed_paths:
18
+ - tests/test_voice_descriptors.py
19
+ - voicerender/voices_api.py
20
+ stats:
21
+ files_changed: 2
22
+ insertions: 50
23
+ deletions: 3
24
+ inspected: true
25
+ inspected_paths:
26
+ - tests/test_voice_descriptors.py
27
+ - voicerender/voices_api.py
28
+ observed_behavior:
29
+ Voice discovery now matches regional requests to compatible base-language
30
+ voice metadata while retaining language scoping.
31
+ public_impact: public
32
+ decision: accepted
33
+ stale: false
34
+ evidence_subject: Fix regional voice language filtering
35
+ target_entry_id: entry-0001
36
+ notes: ""
@@ -0,0 +1,30 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 1
7
+ entry_id: entry-0001
8
+ release_version: v0.2.10
9
+ kind: fixed
10
+ summary:
11
+ Fixed regional voice discovery to include voices with compatible base-language
12
+ metadata
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - git:4828dadb8361678818718635c4765d64eb185a27
18
+ paths:
19
+ - tests/test_voice_descriptors.py
20
+ - voicerender/voices_api.py
21
+ issues: []
22
+ prs: []
23
+ sources:
24
+ - git:4828dadb8361678818718635c4765d64eb185a27
25
+ contributors:
26
+ - "@holgern"
27
+ breaking: false
28
+ internal: false
29
+ order: 1
30
+ ---
@@ -0,0 +1,27 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 3
7
+ version: v0.2.10
8
+ status: planned
9
+ history_state: curated
10
+ title: null
11
+ released_at: null
12
+ previous_version: v0.2.9
13
+ cancel_reason: null
14
+ superseded_by: null
15
+ changelog_file: null
16
+ boundary_ref: null
17
+ source_refs: []
18
+ source_count: null
19
+ entry_count: 1
20
+ artifact_count: 0
21
+ git_base_ref: v0.2.9
22
+ git_base_sha: e9d4d179d03c7cdb048a80682c1acb82b9282b1b
23
+ git_head_ref: HEAD
24
+ git_head_sha: 4828dadb8361678818718635c4765d64eb185a27
25
+ git_range: e9d4d179d03c7cdb048a80682c1acb82b9282b1b..4828dadb8361678818718635c4765d64eb185a27
26
+ git_commit_count: 1
27
+ ---
@@ -0,0 +1,13 @@
1
+ rows:
2
+ - sha: 4828dadb8361678818718635c4765d64eb185a27
3
+ inspected: true
4
+ inspected_paths:
5
+ - tests/test_voice_descriptors.py
6
+ - voicerender/voices_api.py
7
+ observed_behavior: "Voice discovery now matches regional requests to compatible base-language voice metadata while retaining language scoping."
8
+ public_impact: public
9
+ decision: accepted
10
+ target_entry_key: null
11
+ target_entry_id: null
12
+ notes: ""
13
+ stale: false
@@ -0,0 +1,30 @@
1
+ schema_version: 1
2
+ object_type: commit_audit_sheet
3
+ versioning:
4
+ schema_version: 1
5
+ revision: 1
6
+ release_version: v0.2.10
7
+ git_base_ref: v0.2.9
8
+ git_base_sha: e9d4d179d03c7cdb048a80682c1acb82b9282b1b
9
+ git_head_ref: HEAD
10
+ git_head_sha: 4828dadb8361678818718635c4765d64eb185a27
11
+ git_range: e9d4d179d03c7cdb048a80682c1acb82b9282b1b..4828dadb8361678818718635c4765d64eb185a27
12
+ commit_count: 1
13
+ rows:
14
+ - sha: 4828dadb8361678818718635c4765d64eb185a27
15
+ source_ref: git:4828dadb8361678818718635c4765d64eb185a27
16
+ short_sha: 4828dad
17
+ changed_paths:
18
+ - tests/test_voice_descriptors.py
19
+ - voicerender/voices_api.py
20
+ stats:
21
+ files_changed: 2
22
+ insertions: 50
23
+ deletions: 3
24
+ inspected: false
25
+ inspected_paths: []
26
+ observed_behavior: ""
27
+ public_impact: unknown
28
+ decision: needs_review
29
+ stale: false
30
+ evidence_subject: Fix regional voice language filtering
@@ -0,0 +1,25 @@
1
+ schema: releaseledger.entry-batch.v1
2
+ operation: create
3
+ schema_version: 1
4
+ object_type: release_entry_batch
5
+ release_version: v0.2.10
6
+ git_base_ref: e9d4d179d03c7cdb048a80682c1acb82b9282b1b
7
+ git_base_sha: e9d4d179d03c7cdb048a80682c1acb82b9282b1b
8
+ git_head_ref: 4828dadb8361678818718635c4765d64eb185a27
9
+ git_head_sha: 4828dadb8361678818718635c4765d64eb185a27
10
+ include_merges: nontrivial
11
+ entries:
12
+ - kind: fixed
13
+ summary: "Fixed regional voice discovery to include voices with compatible base-language metadata"
14
+ status: accepted
15
+ source_refs:
16
+ - git:4828dadb8361678818718635c4765d64eb185a27
17
+ paths:
18
+ - tests/test_voice_descriptors.py
19
+ - voicerender/voices_api.py
20
+ sources:
21
+ - git:4828dadb8361678818718635c4765d64eb185a27
22
+ prs: []
23
+ issues: []
24
+ contributors:
25
+ - "@holgern"
@@ -0,0 +1,92 @@
1
+ tests/test_voice_descriptors.py | 48 +++++++++++++++++++++++++++++++++++++++++
2
+ voicerender/voices_api.py | 5 ++---
3
+ 2 files changed, 50 insertions(+), 3 deletions(-)
4
+
5
+ diff --git a/tests/test_voice_descriptors.py b/tests/test_voice_descriptors.py
6
+ index 83101e0..f80346b 100644
7
+ --- a/tests/test_voice_descriptors.py
8
+ +++ b/tests/test_voice_descriptors.py
9
+ @@ -87,6 +87,31 @@ def _multilingual_target() -> SynthesisTarget:
10
+ )
11
+
12
+
13
+ +def _base_language_target() -> SynthesisTarget:
14
+ + return SynthesisTarget(
15
+ + engine="kokoro",
16
+ + id="base-lang-target",
17
+ + display_name="Base language target",
18
+ + languages=("en", "de"),
19
+ + runtime_available=True,
20
+ + voices=("voice-en", "voice-de"),
21
+ + voice_details=(
22
+ + TargetVoice(
23
+ + id="voice-en",
24
+ + language="en",
25
+ + locale="en",
26
+ + languages=("en",),
27
+ + ),
28
+ + TargetVoice(
29
+ + id="voice-de",
30
+ + language="de",
31
+ + locale="de",
32
+ + languages=("de",),
33
+ + ),
34
+ + ),
35
+ + )
36
+ +
37
+ +
38
+ def test_multilingual_voice_filtering_is_language_scoped_and_normalized(
39
+ monkeypatch,
40
+ ) -> None:
41
+ @@ -108,6 +133,29 @@ def test_multilingual_voice_filtering_is_language_scoped_and_normalized(
42
+ assert all(item.languages == ("de", "de-de", "de-at", "de-ch") for item in german)
43
+
44
+
45
+ +def test_base_language_voice_filtering_matches_regional_requests(
46
+ + monkeypatch,
47
+ +) -> None:
48
+ + target = _base_language_target()
49
+ + monkeypatch.setattr(
50
+ + "voicerender.voices_api.discover_targets", lambda *a, **k: (target,)
51
+ + )
52
+ +
53
+ + english = list_voices(engine="kokoro", target_id=target.id, language="en-US")
54
+ + german = list_voices(engine="kokoro", target_id=target.id, language="de-DE")
55
+ + german_underscore = list_voices(
56
+ + engine="kokoro", target_id=target.id, language="de_AT"
57
+ + )
58
+ + unrelated = list_voices(engine="kokoro", target_id=target.id, language="fr-FR")
59
+ +
60
+ + assert {item.voice for item in english} == {"voice-en"}
61
+ + assert {item.voice for item in german} == {"voice-de"}
62
+ + assert {item.voice for item in german_underscore} == {"voice-de"}
63
+ + assert unrelated == ()
64
+ + assert {item.languages for item in english} == {("en",)}
65
+ + assert {item.languages for item in german} == {("de",)}
66
+ +
67
+ +
68
+ def test_voice_selectors_list_inspect_and_round_trip(monkeypatch) -> None:
69
+ target = _target()
70
+ monkeypatch.setattr(
71
+ diff --git a/voicerender/voices_api.py b/voicerender/voices_api.py
72
+ index 795fe1e..e1fa53b 100644
73
+ --- a/voicerender/voices_api.py
74
+ +++ b/voicerender/voices_api.py
75
+ @@ -6,7 +6,7 @@ from collections.abc import Mapping
76
+ from dataclasses import dataclass, field
77
+ from typing import Any, Literal
78
+
79
+ -from .engines.metadata import normalize_language_key
80
+ +from .engines.metadata import language_tags_match
81
+ from .engines.registry import discover_targets, list_engines, normalize_engine_id
82
+ from .errors import ProfileError
83
+ from .jsonutil import json_value
84
+ @@ -131,9 +131,8 @@ def _descriptor(
85
+ def _language_matches(descriptor: VoiceDescriptor, language: str | None) -> bool:
86
+ if language is None:
87
+ return True
88
+ - expected = normalize_language_key(language)
89
+ return any(
90
+ - normalize_language_key(item) == expected for item in descriptor.languages
91
+ + language_tags_match(language, item) for item in descriptor.languages
92
+ )
@@ -0,0 +1,23 @@
1
+ {
2
+ "candidate_count": 1,
3
+ "candidates": [
4
+ {
5
+ "additions": 50,
6
+ "deletions": 3,
7
+ "patch_file": "4828dad.patch",
8
+ "patch_sha256": "bb488349b5aa8bb1b65fd0f0c917103bcd636ae9b77608ecb527c1f6313d92e3",
9
+ "paths": ["tests/test_voice_descriptors.py", "voicerender/voices_api.py"],
10
+ "sha": "4828dadb8361678818718635c4765d64eb185a27",
11
+ "short_sha": "4828dad",
12
+ "source_ref": "git:4828dadb8361678818718635c4765d64eb185a27"
13
+ }
14
+ ],
15
+ "git_base_ref": "e9d4d179d03c7cdb048a80682c1acb82b9282b1b",
16
+ "git_base_sha": "e9d4d179d03c7cdb048a80682c1acb82b9282b1b",
17
+ "git_head_ref": "4828dadb8361678818718635c4765d64eb185a27",
18
+ "git_head_sha": "4828dadb8361678818718635c4765d64eb185a27",
19
+ "include_merges": "nontrivial",
20
+ "object_type": "git_evidence_manifest",
21
+ "release_version": "v0.2.10",
22
+ "schema_version": 1
23
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "base_ref": "e9d4d179d03c7cdb048a80682c1acb82b9282b1b",
3
+ "base_sha": "e9d4d179d03c7cdb048a80682c1acb82b9282b1b",
4
+ "candidate_count": 1,
5
+ "commit_count": 1,
6
+ "head_ref": "4828dadb8361678818718635c4765d64eb185a27",
7
+ "head_sha": "4828dadb8361678818718635c4765d64eb185a27",
8
+ "include_merges": "nontrivial",
9
+ "kind": "git_range_summary",
10
+ "merge_commit_count": 0,
11
+ "merge_commits_skipped": 0,
12
+ "range": "e9d4d179d03c7cdb048a80682c1acb82b9282b1b..4828dadb8361678818718635c4765d64eb185a27"
13
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voicerender
3
- Version: 0.2.9
3
+ Version: 0.2.10
4
4
  Summary: Shared RenderPlan preflight and resumable multi-engine speech synthesis
5
5
  Author: buchwandler
6
6
  License-Expression: Apache-2.0
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.2.10] - Unreleased
4
+
5
+ ### Fixed
6
+
7
+ - Fixed regional voice discovery to include voices with compatible base-language metadata
8
+
9
+ <!-- generated by releaseledger -->
10
+
3
11
  ## [v0.2.9] - 2026-11-06
4
12
 
5
13
  ### Added
@@ -87,6 +87,31 @@ def _multilingual_target() -> SynthesisTarget:
87
87
  )
88
88
 
89
89
 
90
+ def _base_language_target() -> SynthesisTarget:
91
+ return SynthesisTarget(
92
+ engine="kokoro",
93
+ id="base-lang-target",
94
+ display_name="Base language target",
95
+ languages=("en", "de"),
96
+ runtime_available=True,
97
+ voices=("voice-en", "voice-de"),
98
+ voice_details=(
99
+ TargetVoice(
100
+ id="voice-en",
101
+ language="en",
102
+ locale="en",
103
+ languages=("en",),
104
+ ),
105
+ TargetVoice(
106
+ id="voice-de",
107
+ language="de",
108
+ locale="de",
109
+ languages=("de",),
110
+ ),
111
+ ),
112
+ )
113
+
114
+
90
115
  def test_multilingual_voice_filtering_is_language_scoped_and_normalized(
91
116
  monkeypatch,
92
117
  ) -> None:
@@ -108,6 +133,29 @@ def test_multilingual_voice_filtering_is_language_scoped_and_normalized(
108
133
  assert all(item.languages == ("de", "de-de", "de-at", "de-ch") for item in german)
109
134
 
110
135
 
136
+ def test_base_language_voice_filtering_matches_regional_requests(
137
+ monkeypatch,
138
+ ) -> None:
139
+ target = _base_language_target()
140
+ monkeypatch.setattr(
141
+ "voicerender.voices_api.discover_targets", lambda *a, **k: (target,)
142
+ )
143
+
144
+ english = list_voices(engine="kokoro", target_id=target.id, language="en-US")
145
+ german = list_voices(engine="kokoro", target_id=target.id, language="de-DE")
146
+ german_underscore = list_voices(
147
+ engine="kokoro", target_id=target.id, language="de_AT"
148
+ )
149
+ unrelated = list_voices(engine="kokoro", target_id=target.id, language="fr-FR")
150
+
151
+ assert {item.voice for item in english} == {"voice-en"}
152
+ assert {item.voice for item in german} == {"voice-de"}
153
+ assert {item.voice for item in german_underscore} == {"voice-de"}
154
+ assert unrelated == ()
155
+ assert {item.languages for item in english} == {("en",)}
156
+ assert {item.languages for item in german} == {("de",)}
157
+
158
+
111
159
  def test_voice_selectors_list_inspect_and_round_trip(monkeypatch) -> None:
112
160
  target = _target()
113
161
  monkeypatch.setattr(
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.9'
22
- __version_tuple__ = version_tuple = (0, 2, 9)
21
+ __version__ = version = '0.2.10'
22
+ __version_tuple__ = version_tuple = (0, 2, 10)
23
23
 
24
- __commit_id__ = commit_id = 'ge9d4d179d'
24
+ __commit_id__ = commit_id = 'gbfbcf0cd7'
@@ -6,7 +6,7 @@ from collections.abc import Mapping
6
6
  from dataclasses import dataclass, field
7
7
  from typing import Any, Literal
8
8
 
9
- from .engines.metadata import normalize_language_key
9
+ from .engines.metadata import language_tags_match
10
10
  from .engines.registry import discover_targets, list_engines, normalize_engine_id
11
11
  from .errors import ProfileError
12
12
  from .jsonutil import json_value
@@ -131,10 +131,7 @@ def _descriptor(
131
131
  def _language_matches(descriptor: VoiceDescriptor, language: str | None) -> bool:
132
132
  if language is None:
133
133
  return True
134
- expected = normalize_language_key(language)
135
- return any(
136
- normalize_language_key(item) == expected for item in descriptor.languages
137
- )
134
+ return any(language_tags_match(language, item) for item in descriptor.languages)
138
135
 
139
136
 
140
137
  def _target_descriptors(target: Any) -> list[VoiceDescriptor]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voicerender
3
- Version: 0.2.9
3
+ Version: 0.2.10
4
4
  Summary: Shared RenderPlan preflight and resumable multi-engine speech synthesis
5
5
  Author: buchwandler
6
6
  License-Expression: Apache-2.0
@@ -80,6 +80,9 @@ pyproject.toml
80
80
  .ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md
81
81
  .ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md
82
82
  .ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md
83
+ .ledger/releaseledger/data/ledgers/main/releases/v0.2.10/release.md
84
+ .ledger/releaseledger/data/ledgers/main/releases/v0.2.10/audit/commit-audit.yaml
85
+ .ledger/releaseledger/data/ledgers/main/releases/v0.2.10/entries/entry-0001.md
83
86
  .ledger/releaseledger/data/ledgers/main/releases/v0.2.8/release.md
84
87
  .ledger/releaseledger/data/ledgers/main/releases/v0.2.8/audit/commit-audit.yaml
85
88
  .ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0001.md
@@ -210,6 +213,12 @@ pyproject.toml
210
213
  .ledger/releaseledger/work/v0.1.0/evidence/c4a2872.patch
211
214
  .ledger/releaseledger/work/v0.1.0/evidence/fb7faaf.patch
212
215
  .ledger/releaseledger/work/v0.1.0/evidence/manifest.json
216
+ .ledger/releaseledger/work/v0.2.10/audit-decisions.yaml
217
+ .ledger/releaseledger/work/v0.2.10/audit.yaml
218
+ .ledger/releaseledger/work/v0.2.10/entries.yaml
219
+ .ledger/releaseledger/work/v0.2.10/range.json
220
+ .ledger/releaseledger/work/v0.2.10/evidence/4828dad.patch
221
+ .ledger/releaseledger/work/v0.2.10/evidence/manifest.json
213
222
  .ledger/releaseledger/work/v0.2.8/audit-decisions.yaml
214
223
  .ledger/releaseledger/work/v0.2.8/audit.yaml
215
224
  .ledger/releaseledger/work/v0.2.8/entries.yaml
@@ -76,6 +76,9 @@
76
76
  ".ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md",
77
77
  ".ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md",
78
78
  ".ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md",
79
+ ".ledger/releaseledger/data/ledgers/main/releases/v0.2.10/audit/commit-audit.yaml",
80
+ ".ledger/releaseledger/data/ledgers/main/releases/v0.2.10/entries/entry-0001.md",
81
+ ".ledger/releaseledger/data/ledgers/main/releases/v0.2.10/release.md",
79
82
  ".ledger/releaseledger/data/ledgers/main/releases/v0.2.8/audit/commit-audit.yaml",
80
83
  ".ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0001.md",
81
84
  ".ledger/releaseledger/data/ledgers/main/releases/v0.2.8/entries/entry-0002.md",
@@ -206,6 +209,12 @@
206
209
  ".ledger/releaseledger/work/v0.1.0/evidence/c4a2872.patch",
207
210
  ".ledger/releaseledger/work/v0.1.0/evidence/fb7faaf.patch",
208
211
  ".ledger/releaseledger/work/v0.1.0/evidence/manifest.json",
212
+ ".ledger/releaseledger/work/v0.2.10/audit-decisions.yaml",
213
+ ".ledger/releaseledger/work/v0.2.10/audit.yaml",
214
+ ".ledger/releaseledger/work/v0.2.10/entries.yaml",
215
+ ".ledger/releaseledger/work/v0.2.10/evidence/4828dad.patch",
216
+ ".ledger/releaseledger/work/v0.2.10/evidence/manifest.json",
217
+ ".ledger/releaseledger/work/v0.2.10/range.json",
209
218
  ".ledger/releaseledger/work/v0.2.8/audit-decisions.yaml",
210
219
  ".ledger/releaseledger/work/v0.2.8/audit.yaml",
211
220
  ".ledger/releaseledger/work/v0.2.8/entries.yaml",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.2.10",
3
+ "distance": 0,
4
+ "node": "gbfbcf0cd7f0e6e1d514ed87bf5745fa7a2ef9b48",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-11"
8
+ }
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.2.9",
3
- "distance": 0,
4
- "node": "ge9d4d179d03c7cdb048a80682c1acb82b9282b1b",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-11-06"
8
- }
File without changes