readio 0.2.2__tar.gz → 0.2.4__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 (238) hide show
  1. {readio-0.2.2 → readio-0.2.4}/.github/workflows/codecov.yml +1 -2
  2. readio-0.2.4/.github/workflows/python-publish.yml +49 -0
  3. {readio-0.2.2 → readio-0.2.4}/.github/workflows/tests.yml +47 -6
  4. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +23 -0
  5. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0001.md +29 -0
  6. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0002.md +27 -0
  7. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0003.md +25 -0
  8. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0004.md +30 -0
  9. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0005.md +31 -0
  10. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0006.md +29 -0
  11. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.3/release.md +27 -0
  12. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.4/audit/commit-audit.yaml +212 -0
  13. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.4/entries/entry-0001.md +46 -0
  14. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.4/entries/entry-0002.md +66 -0
  15. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.4/entries/entry-0003.md +51 -0
  16. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.4/entries/entry-0004.md +47 -0
  17. readio-0.2.4/.ledger/releaseledger/data/ledgers/main/releases/v0.2.4/release.md +27 -0
  18. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/audit-decisions.yaml +65 -0
  19. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/audit.yaml +171 -0
  20. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/entries.yaml +157 -0
  21. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/evidence/18d1765.patch +1713 -0
  22. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/evidence/2c5e221.patch +781 -0
  23. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/evidence/4791e70.patch +828 -0
  24. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/evidence/5840ad5.patch +2691 -0
  25. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/evidence/manifest.json +155 -0
  26. readio-0.2.4/.ledger/releaseledger/work/v0.2.4/range.json +13 -0
  27. {readio-0.2.2/readio.egg-info → readio-0.2.4}/PKG-INFO +55 -8
  28. {readio-0.2.2 → readio-0.2.4}/README.md +52 -5
  29. {readio-0.2.2 → readio-0.2.4}/docs/changelog.md +36 -1
  30. {readio-0.2.2 → readio-0.2.4}/docs/index.md +42 -15
  31. {readio-0.2.2 → readio-0.2.4}/llm-guides/README.md +2 -2
  32. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/audio-drama.md +2 -2
  33. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/debate-pro-con.md +2 -2
  34. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/document-summary.md +2 -2
  35. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/dramatic-story.md +2 -2
  36. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/educational-explainer.md +2 -2
  37. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/funny-story.md +2 -2
  38. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/general-narration.md +2 -2
  39. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/guided-meditation.md +2 -2
  40. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/kids-story.md +2 -2
  41. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/language-learning.md +2 -2
  42. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/news-briefing.md +2 -2
  43. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/podcast-interview.md +2 -2
  44. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/podcast-roundtable.md +2 -2
  45. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/podcast-solo.md +2 -2
  46. {readio-0.2.2 → readio-0.2.4}/llm-guides/ssmd/quiz-trivia.md +2 -2
  47. {readio-0.2.2 → readio-0.2.4}/pyproject.toml +2 -2
  48. {readio-0.2.2 → readio-0.2.4}/readio/audio.py +21 -8
  49. readio-0.2.4/readio/backends/__init__.py +15 -0
  50. readio-0.2.4/readio/backends/base.py +122 -0
  51. readio-0.2.4/readio/backends/pykokoro.py +409 -0
  52. readio-0.2.4/readio/backends/registry.py +39 -0
  53. {readio-0.2.2 → readio-0.2.4}/readio/cli.py +495 -133
  54. {readio-0.2.2 → readio-0.2.4}/readio/config.py +108 -5
  55. {readio-0.2.2 → readio-0.2.4}/readio/formats.py +3 -0
  56. readio-0.2.4/readio/lexicons.py +147 -0
  57. readio-0.2.4/readio/logging_config.py +50 -0
  58. {readio-0.2.2 → readio-0.2.4}/readio/models.py +132 -8
  59. {readio-0.2.2 → readio-0.2.4}/readio/plan.py +289 -120
  60. {readio-0.2.2 → readio-0.2.4}/readio/reader.py +125 -105
  61. {readio-0.2.2 → readio-0.2.4}/readio/spotify.py +5 -0
  62. {readio-0.2.2 → readio-0.2.4}/readio/spotify_cli.py +8 -0
  63. {readio-0.2.2 → readio-0.2.4}/readio/ssmd.py +43 -12
  64. {readio-0.2.2 → readio-0.2.4}/readio/synthesis.py +99 -8
  65. readio-0.2.4/readio/voices.py +351 -0
  66. {readio-0.2.2 → readio-0.2.4/readio.egg-info}/PKG-INFO +55 -8
  67. {readio-0.2.2 → readio-0.2.4}/readio.egg-info/SOURCES.txt +38 -1
  68. {readio-0.2.2 → readio-0.2.4}/readio.egg-info/requires.txt +2 -2
  69. {readio-0.2.2 → readio-0.2.4}/readio.egg-info/scm_file_list.json +38 -1
  70. readio-0.2.4/readio.egg-info/scm_version.json +8 -0
  71. {readio-0.2.2 → readio-0.2.4}/skill/readio/SKILL.md +11 -5
  72. {readio-0.2.2 → readio-0.2.4}/skill/readio/references/cli.md +36 -9
  73. {readio-0.2.2 → readio-0.2.4}/skill/readio/references/ssmd.md +1 -1
  74. {readio-0.2.2 → readio-0.2.4}/skill/readio/references/troubleshooting.md +27 -4
  75. readio-0.2.4/tests/test_backend_config.py +27 -0
  76. readio-0.2.4/tests/test_backend_dispatch.py +76 -0
  77. readio-0.2.4/tests/test_backends.py +24 -0
  78. {readio-0.2.2 → readio-0.2.4}/tests/test_cli.py +6 -0
  79. {readio-0.2.2 → readio-0.2.4}/tests/test_config.py +41 -1
  80. readio-0.2.4/tests/test_lexicon_catalog.py +60 -0
  81. readio-0.2.4/tests/test_lexicons_cli.py +98 -0
  82. {readio-0.2.2 → readio-0.2.4}/tests/test_llm_guides.py +2 -2
  83. readio-0.2.4/tests/test_logging_cli.py +136 -0
  84. {readio-0.2.2 → readio-0.2.4}/tests/test_manifest.py +28 -0
  85. readio-0.2.4/tests/test_packaging_metadata.py +30 -0
  86. {readio-0.2.2 → readio-0.2.4}/tests/test_plan.py +49 -1
  87. {readio-0.2.2 → readio-0.2.4}/tests/test_plan_no_tts_load.py +8 -0
  88. {readio-0.2.2 → readio-0.2.4}/tests/test_pykokoro_09_contract.py +11 -7
  89. {readio-0.2.2 → readio-0.2.4}/tests/test_pykokoro_09_regressions.py +24 -11
  90. readio-0.2.4/tests/test_pykokoro_09_support.py +231 -0
  91. readio-0.2.4/tests/test_reader_synthesis.py +134 -0
  92. {readio-0.2.2 → readio-0.2.4}/tests/test_render_from_plan.py +35 -4
  93. {readio-0.2.2 → readio-0.2.4}/tests/test_synthesis.py +6 -1
  94. readio-0.2.4/tests/test_voice_catalog.py +125 -0
  95. readio-0.2.4/tests/test_voices_cli.py +96 -0
  96. readio-0.2.2/.github/workflows/python-publish.yml +0 -30
  97. readio-0.2.2/CHANGELOG.md +0 -18
  98. readio-0.2.2/readio.egg-info/scm_version.json +0 -8
  99. readio-0.2.2/tests/test_reader_synthesis.py +0 -36
  100. readio-0.2.2/tests/test_voices_cli.py +0 -60
  101. {readio-0.2.2 → readio-0.2.4}/.codecrate.toml +0 -0
  102. {readio-0.2.2 → readio-0.2.4}/.github/workflows/pre-commit.yml +0 -0
  103. {readio-0.2.2 → readio-0.2.4}/.gitignore +0 -0
  104. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/.ledger-project.toml +0 -0
  105. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/config.toml +0 -0
  106. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/.ledger-project.toml +0 -0
  107. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/docs/docs-changelog-md-77f023b9.yaml +0 -0
  108. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/docs/docs-index-md-b4d68dc8.yaml +0 -0
  109. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/docs/readme-md-b3356305.yaml +0 -0
  110. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/scan.yaml +0 -0
  111. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/source-index.json +0 -0
  112. {readio-0.2.2 → readio-0.2.4}/.ledger/documentledger/data/storage.yaml +0 -0
  113. {readio-0.2.2 → readio-0.2.4}/.ledger/ledger.toml +0 -0
  114. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/.ledger-project.toml +0 -0
  115. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/config.toml +0 -0
  116. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
  117. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/audit/commit-audit.yaml +0 -0
  118. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0001.md +0 -0
  119. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0002.md +0 -0
  120. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md +0 -0
  121. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md +0 -0
  122. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md +0 -0
  123. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md +0 -0
  124. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/audit/commit-audit.yaml +0 -0
  125. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/entries/entry-0001.md +0 -0
  126. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/release.md +0 -0
  127. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/audit/commit-audit.yaml +0 -0
  128. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0001.md +0 -0
  129. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0002.md +0 -0
  130. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0003.md +0 -0
  131. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0004.md +0 -0
  132. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/release.md +0 -0
  133. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/audit/commit-audit.yaml +0 -0
  134. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0001.md +0 -0
  135. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0002.md +0 -0
  136. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/release.md +0 -0
  137. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/audit/commit-audit.yaml +0 -0
  138. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0001.md +0 -0
  139. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0002.md +0 -0
  140. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0003.md +0 -0
  141. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0004.md +0 -0
  142. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0005.md +0 -0
  143. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0006.md +0 -0
  144. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/release.md +0 -0
  145. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.1/audit/commit-audit.yaml +0 -0
  146. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.1/entries/entry-0001.md +0 -0
  147. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.1/release.md +0 -0
  148. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/audit/commit-audit.yaml +0 -0
  149. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0001.md +0 -0
  150. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0002.md +0 -0
  151. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0003.md +0 -0
  152. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0004.md +0 -0
  153. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0005.md +0 -0
  154. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0006.md +0 -0
  155. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0007.md +0 -0
  156. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/release.md +0 -0
  157. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/work/v0.2.0/audit-decisions.yaml +0 -0
  158. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/work/v0.2.0/audit.yaml +0 -0
  159. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/work/v0.2.0/entries.yaml +0 -0
  160. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/work/v0.2.0/evidence/4ecf165.patch +0 -0
  161. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/work/v0.2.0/evidence/manifest.json +0 -0
  162. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/work/v0.2.0/range.json +0 -0
  163. {readio-0.2.2 → readio-0.2.4}/.ledger/releaseledger/write.lock +0 -0
  164. {readio-0.2.2 → readio-0.2.4}/.ledger/taskledger/.ledger-project.toml +0 -0
  165. {readio-0.2.2 → readio-0.2.4}/.ledger/taskledger/config.toml +0 -0
  166. {readio-0.2.2 → readio-0.2.4}/.pre-commit-config.yaml +0 -0
  167. {readio-0.2.2 → readio-0.2.4}/LICENSE +0 -0
  168. {readio-0.2.2 → readio-0.2.4}/docs/conf.py +0 -0
  169. {readio-0.2.2 → readio-0.2.4}/docs/make.py +0 -0
  170. {readio-0.2.2 → readio-0.2.4}/docs/requirements.txt +0 -0
  171. {readio-0.2.2 → readio-0.2.4}/examples/README.md +0 -0
  172. {readio-0.2.2 → readio-0.2.4}/examples/readio-podcast.ssmd +0 -0
  173. {readio-0.2.2 → readio-0.2.4}/examples/readio-prosody.ssmd +0 -0
  174. {readio-0.2.2 → readio-0.2.4}/readio/__init__.py +0 -0
  175. {readio-0.2.2 → readio-0.2.4}/readio/__main__.py +0 -0
  176. {readio-0.2.2 → readio-0.2.4}/readio/document.py +0 -0
  177. {readio-0.2.2 → readio-0.2.4}/readio/errors.py +0 -0
  178. {readio-0.2.2 → readio-0.2.4}/readio/ingest.py +0 -0
  179. {readio-0.2.2 → readio-0.2.4}/readio/jsonutil.py +0 -0
  180. {readio-0.2.2 → readio-0.2.4}/readio/manifest.py +0 -0
  181. {readio-0.2.2 → readio-0.2.4}/readio/markdown.py +0 -0
  182. {readio-0.2.2 → readio-0.2.4}/readio/paths.py +0 -0
  183. {readio-0.2.2 → readio-0.2.4}/readio/progress.py +0 -0
  184. {readio-0.2.2 → readio-0.2.4}/readio/resources/__init__.py +0 -0
  185. {readio-0.2.2 → readio-0.2.4}/readio/resources/templates/__init__.py +0 -0
  186. {readio-0.2.2 → readio-0.2.4}/readio/resources/templates/briefing.ssmd +0 -0
  187. {readio-0.2.2 → readio-0.2.4}/readio/resources/templates/dialogue.ssmd +0 -0
  188. {readio-0.2.2 → readio-0.2.4}/readio/resources/templates/podcast.ssmd +0 -0
  189. {readio-0.2.2 → readio-0.2.4}/readio/ssmd_authoring.py +0 -0
  190. {readio-0.2.2 → readio-0.2.4}/readio/templates.py +0 -0
  191. {readio-0.2.2 → readio-0.2.4}/readio/text.py +0 -0
  192. {readio-0.2.2 → readio-0.2.4}/readio/wave.py +0 -0
  193. {readio-0.2.2 → readio-0.2.4}/readio.egg-info/dependency_links.txt +0 -0
  194. {readio-0.2.2 → readio-0.2.4}/readio.egg-info/entry_points.txt +0 -0
  195. {readio-0.2.2 → readio-0.2.4}/readio.egg-info/top_level.txt +0 -0
  196. {readio-0.2.2 → readio-0.2.4}/setup.cfg +0 -0
  197. {readio-0.2.2 → readio-0.2.4}/skill/readio/references/input-formats.md +0 -0
  198. {readio-0.2.2 → readio-0.2.4}/skill/readio/references/spotify.md +0 -0
  199. {readio-0.2.2 → readio-0.2.4}/tests/conftest.py +0 -0
  200. {readio-0.2.2 → readio-0.2.4}/tests/fixtures/architecture-review.ssmd +0 -0
  201. {readio-0.2.2 → readio-0.2.4}/tests/fixtures/markdown/all-elements.md +0 -0
  202. {readio-0.2.2 → readio-0.2.4}/tests/fixtures/markdown/all-elements.txt +0 -0
  203. {readio-0.2.2 → readio-0.2.4}/tests/test_audio.py +0 -0
  204. {readio-0.2.2 → readio-0.2.4}/tests/test_audio_formats.py +0 -0
  205. {readio-0.2.2 → readio-0.2.4}/tests/test_chapters.py +0 -0
  206. {readio-0.2.2 → readio-0.2.4}/tests/test_defaults_cli.py +0 -0
  207. {readio-0.2.2 → readio-0.2.4}/tests/test_doctor.py +0 -0
  208. {readio-0.2.2 → readio-0.2.4}/tests/test_document.py +0 -0
  209. {readio-0.2.2 → readio-0.2.4}/tests/test_examples.py +0 -0
  210. {readio-0.2.2 → readio-0.2.4}/tests/test_ffmpeg_sink.py +0 -0
  211. {readio-0.2.2 → readio-0.2.4}/tests/test_ingest.py +0 -0
  212. {readio-0.2.2 → readio-0.2.4}/tests/test_language_defaults_config.py +0 -0
  213. {readio-0.2.2 → readio-0.2.4}/tests/test_markdown.py +0 -0
  214. {readio-0.2.2 → readio-0.2.4}/tests/test_model_source_preference.py +0 -0
  215. {readio-0.2.2 → readio-0.2.4}/tests/test_models_cli.py +0 -0
  216. {readio-0.2.2 → readio-0.2.4}/tests/test_package_resources.py +0 -0
  217. {readio-0.2.2 → readio-0.2.4}/tests/test_paths.py +0 -0
  218. {readio-0.2.2 → readio-0.2.4}/tests/test_plan_cli.py +0 -0
  219. {readio-0.2.2 → readio-0.2.4}/tests/test_plan_validation.py +0 -0
  220. {readio-0.2.2 → readio-0.2.4}/tests/test_progress.py +0 -0
  221. {readio-0.2.2 → readio-0.2.4}/tests/test_reader_markdown.py +0 -0
  222. {readio-0.2.2 → readio-0.2.4}/tests/test_reader_selection.py +0 -0
  223. {readio-0.2.2 → readio-0.2.4}/tests/test_reader_ssmd.py +0 -0
  224. {readio-0.2.2 → readio-0.2.4}/tests/test_render_manifest_cli.py +0 -0
  225. {readio-0.2.2 → readio-0.2.4}/tests/test_skill_integrity.py +0 -0
  226. {readio-0.2.2 → readio-0.2.4}/tests/test_spotify.py +0 -0
  227. {readio-0.2.2 → readio-0.2.4}/tests/test_spotify_cli.py +0 -0
  228. {readio-0.2.2 → readio-0.2.4}/tests/test_spotify_lifecycle.py +0 -0
  229. {readio-0.2.2 → readio-0.2.4}/tests/test_ssmd_cli.py +0 -0
  230. {readio-0.2.2 → readio-0.2.4}/tests/test_ssmd_integration.py +0 -0
  231. {readio-0.2.2 → readio-0.2.4}/tests/test_ssmd_model_roster.py +0 -0
  232. {readio-0.2.2 → readio-0.2.4}/tests/test_ssmd_preflight.py +0 -0
  233. {readio-0.2.2 → readio-0.2.4}/tests/test_ssmd_single_source.py +0 -0
  234. {readio-0.2.2 → readio-0.2.4}/tests/test_template_validate.py +0 -0
  235. {readio-0.2.2 → readio-0.2.4}/tests/test_templates.py +0 -0
  236. {readio-0.2.2 → readio-0.2.4}/tests/test_text.py +0 -0
  237. {readio-0.2.2 → readio-0.2.4}/tests/test_voice_resolution_workflow.py +0 -0
  238. {readio-0.2.2 → readio-0.2.4}/tests/test_wave.py +0 -0
@@ -16,8 +16,7 @@ jobs:
16
16
  cache: pip
17
17
  - name: Install Readio runtime dependencies
18
18
  run: |
19
- python -m pip install "ssmd @ git+https://github.com/buchwandler/ssmd.git@631aa5a03ba2b2fcb364272843f88a8738d36484"
20
- python -m pip install "pykokoro[playback] @ git+https://github.com/buchwandler/pykokoro.git@07fdd07f4cccff7ab58bbe1f5c801bebe8b41a85"
19
+ python -m pip install "pykokoro[playback]==0.9.9"
21
20
  - name: Install project and coverage tools
22
21
  run: |
23
22
  python -m pip install --upgrade pip
@@ -0,0 +1,49 @@
1
+ # Build and publish Readio when a GitHub Release is published.
2
+
3
+ name: Upload Python Package
4
+
5
+ on:
6
+ release:
7
+ types: [published]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ deploy:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Check out release
17
+ uses: actions/checkout@v4
18
+ - name: Set up Python
19
+ uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.13"
22
+ - name: Install build tooling
23
+ run: python -m pip install --upgrade pip build twine
24
+ - name: Build package
25
+ run: python -m build
26
+ - name: Validate artifact metadata
27
+ run: python -m twine check dist/*
28
+ - name: Validate release version
29
+ env:
30
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
31
+ run: |
32
+ python - <<'PY'
33
+ import os
34
+ from pathlib import Path
35
+ from packaging.utils import parse_wheel_filename
36
+
37
+ expected = os.environ["RELEASE_TAG"].removeprefix("v")
38
+ wheels = list(Path("dist").glob("*.whl"))
39
+ assert len(wheels) == 1, f"expected one wheel, found {len(wheels)}"
40
+ _, version, _, _ = parse_wheel_filename(wheels[0].name)
41
+ assert str(version) == expected, (
42
+ f"wheel version {version} does not match release tag {expected}"
43
+ )
44
+ PY
45
+ - name: Publish package to PyPI
46
+ uses: pypa/gh-action-pypi-publish@v1.14.1
47
+ with:
48
+ password: ${{ secrets.PYPI_API_TOKEN }}
49
+ attestations: false
@@ -25,8 +25,7 @@ jobs:
25
25
  cache: pip
26
26
  - name: Install Readio runtime dependencies
27
27
  run: |
28
- python -m pip install "ssmd @ git+https://github.com/buchwandler/ssmd.git@631aa5a03ba2b2fcb364272843f88a8738d36484"
29
- python -m pip install "pykokoro[playback] @ git+https://github.com/buchwandler/pykokoro.git@07fdd07f4cccff7ab58bbe1f5c801bebe8b41a85"
28
+ python -m pip install "pykokoro[playback]==0.9.9"
30
29
  - name: Install project and test tools
31
30
  run: |
32
31
  python -m pip install --upgrade pip
@@ -34,6 +33,49 @@ jobs:
34
33
  - name: Run test suite
35
34
  run: python -m pytest -q
36
35
 
36
+
37
+ minimum-compatibility:
38
+ name: Minimum PyKokoro compatibility (Ubuntu, Python 3.10)
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ - name: Install PortAudio
43
+ run: sudo apt-get update && sudo apt-get install --yes portaudio19-dev
44
+ - name: Set up Python
45
+ uses: actions/setup-python@v5
46
+ with:
47
+ python-version: "3.10"
48
+ cache: pip
49
+ - name: Install minimum PyKokoro runtime
50
+ run: python -m pip install "pykokoro[playback]==0.9.9"
51
+ - name: Install project and test tools
52
+ run: |
53
+ python -m pip install --upgrade pip
54
+ python -m pip install -e ".[dev]"
55
+ - name: Run minimum-version test suite
56
+ run: python -m pytest -q
57
+ current-compatibility:
58
+ name: Current PyKokoro compatibility (Ubuntu, Python 3.13)
59
+ runs-on: ubuntu-latest
60
+ steps:
61
+ - uses: actions/checkout@v4
62
+ - name: Install PortAudio
63
+ run: sudo apt-get update && sudo apt-get install --yes portaudio19-dev
64
+ - name: Set up Python
65
+ uses: actions/setup-python@v5
66
+ with:
67
+ python-version: "3.13"
68
+ cache: pip
69
+ - name: Install current supported PyKokoro range
70
+ run: python -m pip install "pykokoro[playback]>=0.9.9,<0.10"
71
+ - name: Show installed PyKokoro version
72
+ run: python -c "import importlib.metadata; print('PyKokoro', importlib.metadata.version('pykokoro'))"
73
+ - name: Install project and test tools
74
+ run: |
75
+ python -m pip install --upgrade pip
76
+ python -m pip install -e ".[dev]"
77
+ - name: Run current-range test suite
78
+ run: python -m pytest -q
37
79
  quality:
38
80
  name: Static quality checks
39
81
  runs-on: ubuntu-latest
@@ -48,8 +90,7 @@ jobs:
48
90
  cache: pip
49
91
  - name: Install Readio runtime dependencies
50
92
  run: |
51
- python -m pip install "ssmd @ git+https://github.com/buchwandler/ssmd.git@631aa5a03ba2b2fcb364272843f88a8738d36484"
52
- python -m pip install "pykokoro[playback] @ git+https://github.com/buchwandler/pykokoro.git@07fdd07f4cccff7ab58bbe1f5c801bebe8b41a85"
93
+ python -m pip install "pykokoro[playback]==0.9.9"
53
94
  - name: Install development tools
54
95
  run: python -m pip install -e ".[dev]"
55
96
  - name: Ruff lint
@@ -81,9 +122,9 @@ jobs:
81
122
  shell: bash
82
123
  run: |
83
124
  python -m venv "${RUNNER_TEMP}/readio-wheel-smoke"
84
- "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" -m pip install "ssmd @ git+https://github.com/buchwandler/ssmd.git@631aa5a03ba2b2fcb364272843f88a8738d36484"
85
- "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" -m pip install "pykokoro[playback] @ git+https://github.com/buchwandler/pykokoro.git@07fdd07f4cccff7ab58bbe1f5c801bebe8b41a85"
125
+ "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" -m pip install "pykokoro[playback]==0.9.9"
86
126
  "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" -m pip install dist/*.whl
127
+ "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" -m pip check
87
128
  cd "${RUNNER_TEMP}"
88
129
  "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" - <<'PY'
89
130
  import importlib.metadata
@@ -55,3 +55,26 @@
55
55
  {"data":{"kind":"quality","status":"accepted"},"entry_id":"entry-0005","event":"entry.added","event_id":"event-0055","record_revisions":{"entry:v0.2.2/entry-0005":1,"release:v0.2.2":9},"release_version":"v0.2.2","schema_version":2}
56
56
  {"data":{"kind":"quality","status":"accepted"},"entry_id":"entry-0006","event":"entry.added","event_id":"event-0056","record_revisions":{"entry:v0.2.2/entry-0006":1,"release:v0.2.2":10},"release_version":"v0.2.2","schema_version":2}
57
57
  {"data":{"kind":"internal","status":"accepted"},"entry_id":"entry-0007","event":"entry.added","event_id":"event-0057","record_revisions":{"entry:v0.2.2/entry-0007":1,"release:v0.2.2":11},"release_version":"v0.2.2","schema_version":2}
58
+ {"data":{"status":"planned"},"event":"release.created","event_id":"event-0058","record_revisions":{"release:v0.2.3":1},"release_version":"v0.2.3","schema_version":2}
59
+ {"data":{"kind":"changed","status":"accepted"},"entry_id":"entry-0001","event":"entry.added","event_id":"event-0059","record_revisions":{"entry:v0.2.3/entry-0001":1,"release:v0.2.3":2},"release_version":"v0.2.3","schema_version":2}
60
+ {"data":{"kind":"quality","status":"accepted"},"entry_id":"entry-0002","event":"entry.added","event_id":"event-0060","record_revisions":{"entry:v0.2.3/entry-0002":1,"release:v0.2.3":3},"release_version":"v0.2.3","schema_version":2}
61
+ {"data":{"kind":"changed","status":"accepted"},"entry_id":"entry-0003","event":"entry.added","event_id":"event-0061","record_revisions":{"entry:v0.2.3/entry-0003":1,"release:v0.2.3":4},"release_version":"v0.2.3","schema_version":2}
62
+ {"data":{"kind":"docs","status":"accepted"},"entry_id":"entry-0004","event":"entry.added","event_id":"event-0062","record_revisions":{"entry:v0.2.3/entry-0004":1,"release:v0.2.3":5},"release_version":"v0.2.3","schema_version":2}
63
+ {"data":{"kind":"changed","status":"accepted"},"entry_id":"entry-0005","event":"entry.added","event_id":"event-0063","record_revisions":{"entry:v0.2.3/entry-0005":1,"release:v0.2.3":6},"release_version":"v0.2.3","schema_version":2}
64
+ {"data":{"added_source_refs":[],"fields":["summary"],"removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0005","event":"entry.updated","event_id":"event-0064","record_revisions":{"entry:v0.2.3/entry-0005":2},"release_version":"v0.2.3","schema_version":2}
65
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Correct stale tested PyKokoro version to the supported 0.9.5 floor.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0001","event":"entry.updated","event_id":"event-0065","record_revisions":{"entry:v0.2.3/entry-0001":2},"release_version":"v0.2.3","schema_version":2}
66
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Correct stale tested PyKokoro version to the supported 0.9.5 floor.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0004","event":"entry.updated","event_id":"event-0066","record_revisions":{"entry:v0.2.3/entry-0004":2},"release_version":"v0.2.3","schema_version":2}
67
+ {"data":{"kind":"changed","status":"accepted"},"entry_id":"entry-0006","event":"entry.added","event_id":"event-0067","record_revisions":{"entry:v0.2.3/entry-0006":1,"release:v0.2.3":7},"release_version":"v0.2.3","schema_version":2}
68
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Align the changed entry wording with its kind and supported dependency floor.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0001","event":"entry.updated","event_id":"event-0068","record_revisions":{"entry:v0.2.3/entry-0001":3},"release_version":"v0.2.3","schema_version":2}
69
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Align the quality entry wording with its kind.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0002","event":"entry.updated","event_id":"event-0069","record_revisions":{"entry:v0.2.3/entry-0002":2},"release_version":"v0.2.3","schema_version":2}
70
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Align the changed entry wording with its kind.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0003","event":"entry.updated","event_id":"event-0070","record_revisions":{"entry:v0.2.3/entry-0003":2},"release_version":"v0.2.3","schema_version":2}
71
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Align the changed entry wording with its kind and recommended summary length.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0005","event":"entry.updated","event_id":"event-0071","record_revisions":{"entry:v0.2.3/entry-0005":3},"release_version":"v0.2.3","schema_version":2}
72
+ {"data":{"added_source_refs":[],"fields":["summary"],"reason":"Shorten the new user-facing entry while retaining its behavior.","removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0006","event":"entry.updated","event_id":"event-0072","record_revisions":{"entry:v0.2.3/entry-0006":2},"release_version":"v0.2.3","schema_version":2}
73
+ {"data":{"released_at":"2026-09-11"},"event":"release.finalized","event_id":"event-0073","record_revisions":{"release:v0.2.3":8},"release_version":"v0.2.3","schema_version":2}
74
+ {"data":{"status":"planned"},"event":"release.created","event_id":"event-0074","record_revisions":{"release:v0.2.4":1},"release_version":"v0.2.4","schema_version":2}
75
+ {"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-0075","record_revisions":{"release:v0.2.4":2},"release_version":"v0.2.4","schema_version":2}
76
+ {"data":{"row_count":4},"event":"audit.created","event_id":"event-0076","record_revisions":{"commit_audit_sheet":1},"release_version":"v0.2.4","schema_version":2}
77
+ {"data":{"updated_rows":4},"event":"audit.updated","event_id":"event-0077","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.2.4","schema_version":2}
78
+ {"data":{"entry_ids":["entry-0001","entry-0002","entry-0003","entry-0004"],"synced_audit_rows":4},"event":"entry.batch_added","event_id":"event-0078","record_revisions":{"commit_audit_sheet":3,"entry:v0.2.4/entry-0001":1,"entry:v0.2.4/entry-0002":1,"entry:v0.2.4/entry-0003":1,"entry:v0.2.4/entry-0004":1,"release:v0.2.4":3},"release_version":"v0.2.4","schema_version":2}
79
+ {"data":{"released_at":"2026-09-14"},"event":"release.finalized","event_id":"event-0079","record_revisions":{"release:v0.2.4":4},"release_version":"v0.2.4","schema_version":2}
80
+ {"data":{"fields":["released_at"]},"event":"release.updated","event_id":"event-0080","record_revisions":{"release:v0.2.4":5},"release_version":"v0.2.4","schema_version":2}
@@ -0,0 +1,29 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 3
7
+ entry_id: entry-0001
8
+ release_version: v0.2.3
9
+ kind: changed
10
+ summary:
11
+ Changed Readio dependency metadata and CI to use PyKokoro 0.9.5 and SSMD
12
+ 0.8.7+
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - tl:task-0019
18
+ paths:
19
+ - pyproject.toml
20
+ - .github/workflows/tests.yml
21
+ - .github/workflows/codecov.yml
22
+ issues: []
23
+ prs: []
24
+ sources: []
25
+ contributors: []
26
+ breaking: false
27
+ internal: false
28
+ order: 1
29
+ ---
@@ -0,0 +1,27 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 2
7
+ entry_id: entry-0002
8
+ release_version: v0.2.3
9
+ kind: quality
10
+ summary: Improved PyKokoro compatibility and package metadata regression coverage
11
+ status: accepted
12
+ audience: null
13
+ scopes: []
14
+ source_refs: []
15
+ paths:
16
+ - tests/test_pykokoro_09_contract.py
17
+ - tests/test_pykokoro_09_support.py
18
+ - tests/test_packaging_metadata.py
19
+ issues: []
20
+ prs: []
21
+ sources:
22
+ - tl:task-0019
23
+ contributors: []
24
+ breaking: false
25
+ internal: false
26
+ order: 2
27
+ ---
@@ -0,0 +1,25 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 2
7
+ entry_id: entry-0003
8
+ release_version: v0.2.3
9
+ kind: changed
10
+ summary: Changed package publishing with artifact checks and release-tag version validation
11
+ status: accepted
12
+ audience: null
13
+ scopes: []
14
+ source_refs: []
15
+ paths:
16
+ - .github/workflows/python-publish.yml
17
+ issues: []
18
+ prs: []
19
+ sources:
20
+ - tl:task-0019
21
+ contributors: []
22
+ breaking: false
23
+ internal: false
24
+ order: 3
25
+ ---
@@ -0,0 +1,30 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 2
7
+ entry_id: entry-0004
8
+ release_version: v0.2.3
9
+ kind: docs
10
+ summary:
11
+ Documented the PyKokoro support floor, 0.9.5 tested target, and supported
12
+ SSMD API
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs: []
17
+ paths:
18
+ - README.md
19
+ - docs/index.md
20
+ - skill/readio/SKILL.md
21
+ - llm-guides
22
+ issues: []
23
+ prs: []
24
+ sources:
25
+ - tl:task-0019
26
+ contributors: []
27
+ breaking: false
28
+ internal: false
29
+ order: 4
30
+ ---
@@ -0,0 +1,31 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 3
7
+ entry_id: entry-0005
8
+ release_version: v0.2.3
9
+ kind: changed
10
+ summary:
11
+ Changed spaCy model-size and short-sentence synthesis controls, including
12
+ reader configuration migration
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - tl:task-0021
18
+ paths:
19
+ - readio/config.py
20
+ - readio/cli.py
21
+ - readio/plan.py
22
+ - readio/reader.py
23
+ - readio/synthesis.py
24
+ issues: []
25
+ prs: []
26
+ sources: []
27
+ contributors: []
28
+ breaking: false
29
+ internal: false
30
+ order: 5
31
+ ---
@@ -0,0 +1,29 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 2
7
+ entry_id: entry-0006
8
+ release_version: v0.2.3
9
+ kind: changed
10
+ summary:
11
+ Changed Readio's speak/render pause default from tts to auto while preserving
12
+ config and CLI overrides
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - tl:task-0025
18
+ paths:
19
+ - readio/config.py
20
+ - readio/plan.py
21
+ - readio/synthesis.py
22
+ issues: []
23
+ prs: []
24
+ sources: []
25
+ contributors: []
26
+ breaking: false
27
+ internal: false
28
+ order: 6
29
+ ---
@@ -0,0 +1,27 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 8
7
+ version: v0.2.3
8
+ status: released
9
+ history_state: curated
10
+ title: Readio v0.2.3
11
+ released_at: "2026-09-11"
12
+ previous_version: v0.2.2
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: 6
20
+ artifact_count: 0
21
+ git_base_ref: null
22
+ git_base_sha: null
23
+ git_head_ref: null
24
+ git_head_sha: null
25
+ git_range: null
26
+ git_commit_count: null
27
+ ---
@@ -0,0 +1,212 @@
1
+ schema_version: 1
2
+ object_type: commit_audit_sheet
3
+ versioning:
4
+ schema_version: 1
5
+ revision: 3
6
+ release_version: v0.2.4
7
+ git_base_ref: v0.2.3
8
+ git_base_sha: 9b264c5a7b09096c299b90d2f8fe6fb30a2a96d0
9
+ git_head_ref: HEAD
10
+ git_head_sha: 2c5e221eab0f4047a8157dcacb85e5d31c956d3a
11
+ git_range: 9b264c5a7b09096c299b90d2f8fe6fb30a2a96d0..2c5e221eab0f4047a8157dcacb85e5d31c956d3a
12
+ commit_count: 4
13
+ rows:
14
+ - sha: 4791e709a5f940404c7e40f04333f0996931453d
15
+ source_ref: git:4791e709a5f940404c7e40f04333f0996931453d
16
+ short_sha: 4791e70
17
+ changed_paths:
18
+ - .ledger/releaseledger/data/ledgers/main/events/events.jsonl
19
+ - .ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0005.md
20
+ - .ledger/releaseledger/data/ledgers/main/releases/v0.2.3/release.md
21
+ - README.md
22
+ - docs/changelog.md
23
+ - docs/index.md
24
+ - readio/cli.py
25
+ - readio/config.py
26
+ - readio/plan.py
27
+ - readio/reader.py
28
+ - readio/synthesis.py
29
+ - skill/readio/references/cli.md
30
+ - skill/readio/references/troubleshooting.md
31
+ - tests/test_config.py
32
+ - tests/test_plan.py
33
+ - tests/test_plan_no_tts_load.py
34
+ - tests/test_reader_synthesis.py
35
+ - tests/test_render_from_plan.py
36
+ stats:
37
+ files_changed: 0
38
+ insertions: 369
39
+ deletions: 26
40
+ inspected: true
41
+ inspected_paths:
42
+ - readio/config.py
43
+ - readio/plan.py
44
+ - readio/reader.py
45
+ - readio/synthesis.py
46
+ - tests/test_config.py
47
+ - tests/test_plan.py
48
+ - tests/test_reader_synthesis.py
49
+ observed_behavior:
50
+ Reader synthesis planning now supports explicit spaCy tiers and
51
+ configurable short-sentence handling, with legacy required values normalized to
52
+ sm.
53
+ public_impact: public
54
+ decision: accepted
55
+ stale: false
56
+ evidence_subject: "feat: add spacy policy and parameter for short sentences"
57
+ target_entry_id: entry-0001
58
+ notes: ""
59
+ - sha: 18d17658338164cf7a62f805eece4802de217394
60
+ source_ref: git:18d17658338164cf7a62f805eece4802de217394
61
+ short_sha: 18d1765
62
+ changed_paths:
63
+ - .github/workflows/codecov.yml
64
+ - .github/workflows/tests.yml
65
+ - README.md
66
+ - docs/index.md
67
+ - llm-guides/README.md
68
+ - llm-guides/ssmd/audio-drama.md
69
+ - llm-guides/ssmd/debate-pro-con.md
70
+ - llm-guides/ssmd/document-summary.md
71
+ - llm-guides/ssmd/dramatic-story.md
72
+ - llm-guides/ssmd/educational-explainer.md
73
+ - llm-guides/ssmd/funny-story.md
74
+ - llm-guides/ssmd/general-narration.md
75
+ - llm-guides/ssmd/guided-meditation.md
76
+ - llm-guides/ssmd/kids-story.md
77
+ - llm-guides/ssmd/language-learning.md
78
+ - llm-guides/ssmd/news-briefing.md
79
+ - llm-guides/ssmd/podcast-interview.md
80
+ - llm-guides/ssmd/podcast-roundtable.md
81
+ - llm-guides/ssmd/podcast-solo.md
82
+ - llm-guides/ssmd/quiz-trivia.md
83
+ - pyproject.toml
84
+ - readio/cli.py
85
+ - readio/config.py
86
+ - readio/models.py
87
+ - readio/plan.py
88
+ - readio/ssmd.py
89
+ - readio/synthesis.py
90
+ - readio/voices.py
91
+ - skill/readio/SKILL.md
92
+ - skill/readio/references/cli.md
93
+ - skill/readio/references/ssmd.md
94
+ - skill/readio/references/troubleshooting.md
95
+ - tests/test_llm_guides.py
96
+ - tests/test_packaging_metadata.py
97
+ - tests/test_pykokoro_09_contract.py
98
+ - tests/test_pykokoro_09_regressions.py
99
+ - tests/test_voice_catalog.py
100
+ - tests/test_voices_cli.py
101
+ stats:
102
+ files_changed: 0
103
+ insertions: 817
104
+ deletions: 200
105
+ inspected: true
106
+ inspected_paths:
107
+ - readio/voices.py
108
+ - readio/cli.py
109
+ - readio/models.py
110
+ - tests/test_voice_catalog.py
111
+ - tests/test_voices_cli.py
112
+ observed_behavior:
113
+ Voice discovery now exposes stable locale-number selectors, metadata
114
+ filtering, selector inspection, and selector-aware role/default resolution.
115
+ public_impact: public
116
+ decision: accepted
117
+ stale: false
118
+ evidence_subject: "feat: short form for voice selection and new voices command"
119
+ target_entry_id: entry-0002
120
+ notes: ""
121
+ - sha: 5840ad53704ab4efd000346c048638c9b2271eb7
122
+ source_ref: git:5840ad53704ab4efd000346c048638c9b2271eb7
123
+ short_sha: 5840ad5
124
+ changed_paths:
125
+ - README.md
126
+ - docs/index.md
127
+ - readio/audio.py
128
+ - readio/backends/__init__.py
129
+ - readio/backends/base.py
130
+ - readio/backends/pykokoro.py
131
+ - readio/backends/registry.py
132
+ - readio/cli.py
133
+ - readio/config.py
134
+ - readio/lexicons.py
135
+ - readio/models.py
136
+ - readio/plan.py
137
+ - readio/reader.py
138
+ - readio/ssmd.py
139
+ - readio/synthesis.py
140
+ - readio/voices.py
141
+ - skill/readio/SKILL.md
142
+ - skill/readio/references/cli.md
143
+ - tests/test_backend_config.py
144
+ - tests/test_backend_dispatch.py
145
+ - tests/test_backends.py
146
+ - tests/test_lexicon_catalog.py
147
+ - tests/test_lexicons_cli.py
148
+ stats:
149
+ files_changed: 0
150
+ insertions: 1508
151
+ deletions: 366
152
+ inspected: true
153
+ inspected_paths:
154
+ - readio/backends/base.py
155
+ - readio/backends/pykokoro.py
156
+ - readio/lexicons.py
157
+ - readio/cli.py
158
+ - tests/test_lexicon_catalog.py
159
+ - tests/test_lexicons_cli.py
160
+ observed_behavior:
161
+ Synthesis backend contracts and the PyKokoro adapter now expose
162
+ backend-neutral lexicon discovery, filtering, inspection, and runtime option plumbing.
163
+ public_impact: public
164
+ decision: accepted
165
+ stale: false
166
+ evidence_subject: "feat: lexicon command to view lexicons"
167
+ target_entry_id: entry-0003
168
+ notes: ""
169
+ - sha: 2c5e221eab0f4047a8157dcacb85e5d31c956d3a
170
+ source_ref: git:2c5e221eab0f4047a8157dcacb85e5d31c956d3a
171
+ short_sha: 2c5e221
172
+ changed_paths:
173
+ - README.md
174
+ - docs/index.md
175
+ - readio/audio.py
176
+ - readio/backends/base.py
177
+ - readio/backends/pykokoro.py
178
+ - readio/cli.py
179
+ - readio/lexicons.py
180
+ - readio/models.py
181
+ - readio/plan.py
182
+ - readio/reader.py
183
+ - readio/ssmd.py
184
+ - readio/synthesis.py
185
+ - readio/voices.py
186
+ - skill/readio/SKILL.md
187
+ - skill/readio/references/cli.md
188
+ - tests/test_backend_dispatch.py
189
+ - tests/test_lexicons_cli.py
190
+ - tests/test_voice_catalog.py
191
+ - tests/test_voices_cli.py
192
+ stats:
193
+ files_changed: 0
194
+ insertions: 128
195
+ deletions: 88
196
+ inspected: true
197
+ inspected_paths:
198
+ - readio/lexicons.py
199
+ - readio/voices.py
200
+ - readio/cli.py
201
+ - tests/test_lexicons_cli.py
202
+ - tests/test_voice_catalog.py
203
+ - tests/test_voices_cli.py
204
+ observed_behavior:
205
+ Lexicon listing remains usable without a language filter and
206
+ backend-aware voice and lexicon selection is formatted and validated consistently.
207
+ public_impact: public
208
+ decision: accepted
209
+ stale: false
210
+ evidence_subject: "fix: lexicons list"
211
+ target_entry_id: entry-0004
212
+ notes: ""
@@ -0,0 +1,46 @@
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.4
9
+ kind: added
10
+ summary:
11
+ Added explicit spaCy model tiers and configurable short-sentence synthesis
12
+ policies
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - git:4791e709a5f940404c7e40f04333f0996931453d
18
+ paths:
19
+ - .ledger/releaseledger/data/ledgers/main/events/events.jsonl
20
+ - .ledger/releaseledger/data/ledgers/main/releases/v0.2.3/entries/entry-0005.md
21
+ - .ledger/releaseledger/data/ledgers/main/releases/v0.2.3/release.md
22
+ - README.md
23
+ - docs/changelog.md
24
+ - docs/index.md
25
+ - readio/cli.py
26
+ - readio/config.py
27
+ - readio/plan.py
28
+ - readio/reader.py
29
+ - readio/synthesis.py
30
+ - skill/readio/references/cli.md
31
+ - skill/readio/references/troubleshooting.md
32
+ - tests/test_config.py
33
+ - tests/test_plan.py
34
+ - tests/test_plan_no_tts_load.py
35
+ - tests/test_reader_synthesis.py
36
+ - tests/test_render_from_plan.py
37
+ issues: []
38
+ prs: []
39
+ sources:
40
+ - git:4791e709a5f940404c7e40f04333f0996931453d
41
+ contributors:
42
+ - "@holgern"
43
+ breaking: false
44
+ internal: false
45
+ order: 1
46
+ ---