readio 0.1.0__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 (93) hide show
  1. readio-0.1.0/.codecrate.toml +27 -0
  2. readio-0.1.0/.github/workflows/codecov.yml +31 -0
  3. readio-0.1.0/.github/workflows/pre-commit.yml +19 -0
  4. readio-0.1.0/.github/workflows/python-publish.yml +30 -0
  5. readio-0.1.0/.github/workflows/tests.yml +99 -0
  6. readio-0.1.0/.gitignore +221 -0
  7. readio-0.1.0/.ledger/documentledger/.ledger-project.toml +6 -0
  8. readio-0.1.0/.ledger/documentledger/config.toml +16 -0
  9. readio-0.1.0/.ledger/documentledger/data/.ledger-project.toml +6 -0
  10. readio-0.1.0/.ledger/documentledger/data/docs/docs-changelog-md-77f023b9.yaml +78 -0
  11. readio-0.1.0/.ledger/documentledger/data/docs/docs-index-md-b4d68dc8.yaml +1123 -0
  12. readio-0.1.0/.ledger/documentledger/data/docs/readme-md-b3356305.yaml +365 -0
  13. readio-0.1.0/.ledger/documentledger/data/scan.yaml +60 -0
  14. readio-0.1.0/.ledger/documentledger/data/source-index.json +4748 -0
  15. readio-0.1.0/.ledger/documentledger/data/storage.yaml +13 -0
  16. readio-0.1.0/.ledger/ledger.toml +30 -0
  17. readio-0.1.0/.ledger/releaseledger/.ledger-project.toml +6 -0
  18. readio-0.1.0/.ledger/releaseledger/config.toml +56 -0
  19. readio-0.1.0/.ledger/releaseledger/data/.ledger-project.toml +6 -0
  20. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +6 -0
  21. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/audit/commit-audit.yaml +263 -0
  22. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0001.md +28 -0
  23. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0002.md +36 -0
  24. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md +36 -0
  25. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md +50 -0
  26. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md +37 -0
  27. readio-0.1.0/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md +26 -0
  28. readio-0.1.0/.ledger/taskledger/.ledger-project.toml +6 -0
  29. readio-0.1.0/.ledger/taskledger/config.toml +7 -0
  30. readio-0.1.0/.pre-commit-config.yaml +64 -0
  31. readio-0.1.0/LICENSE +201 -0
  32. readio-0.1.0/PKG-INFO +151 -0
  33. readio-0.1.0/README.md +127 -0
  34. readio-0.1.0/docs/changelog.md +15 -0
  35. readio-0.1.0/docs/conf.py +97 -0
  36. readio-0.1.0/docs/index.md +170 -0
  37. readio-0.1.0/docs/make.py +86 -0
  38. readio-0.1.0/docs/requirements.txt +2 -0
  39. readio-0.1.0/examples/README.md +25 -0
  40. readio-0.1.0/examples/readio-podcast.ssmd +109 -0
  41. readio-0.1.0/pyproject.toml +47 -0
  42. readio-0.1.0/readio/__init__.py +10 -0
  43. readio-0.1.0/readio/__main__.py +3 -0
  44. readio-0.1.0/readio/audio.py +139 -0
  45. readio-0.1.0/readio/cli.py +614 -0
  46. readio-0.1.0/readio/config.py +401 -0
  47. readio-0.1.0/readio/document.py +31 -0
  48. readio-0.1.0/readio/errors.py +39 -0
  49. readio-0.1.0/readio/ingest.py +68 -0
  50. readio-0.1.0/readio/paths.py +87 -0
  51. readio-0.1.0/readio/reader.py +170 -0
  52. readio-0.1.0/readio/resources/__init__.py +0 -0
  53. readio-0.1.0/readio/resources/templates/__init__.py +0 -0
  54. readio-0.1.0/readio/resources/templates/briefing.ssmd +5 -0
  55. readio-0.1.0/readio/resources/templates/dialogue.ssmd +9 -0
  56. readio-0.1.0/readio/resources/templates/podcast.ssmd +13 -0
  57. readio-0.1.0/readio/spotify.py +140 -0
  58. readio-0.1.0/readio/ssmd.py +161 -0
  59. readio-0.1.0/readio/ssmd_authoring.py +127 -0
  60. readio-0.1.0/readio/templates.py +117 -0
  61. readio-0.1.0/readio/text.py +25 -0
  62. readio-0.1.0/readio/wave.py +87 -0
  63. readio-0.1.0/readio.egg-info/PKG-INFO +151 -0
  64. readio-0.1.0/readio.egg-info/SOURCES.txt +91 -0
  65. readio-0.1.0/readio.egg-info/dependency_links.txt +1 -0
  66. readio-0.1.0/readio.egg-info/entry_points.txt +2 -0
  67. readio-0.1.0/readio.egg-info/requires.txt +19 -0
  68. readio-0.1.0/readio.egg-info/scm_file_list.json +87 -0
  69. readio-0.1.0/readio.egg-info/scm_version.json +8 -0
  70. readio-0.1.0/readio.egg-info/top_level.txt +1 -0
  71. readio-0.1.0/setup.cfg +4 -0
  72. readio-0.1.0/skill/readio/SKILL.md +91 -0
  73. readio-0.1.0/tests/conftest.py +33 -0
  74. readio-0.1.0/tests/test_audio.py +142 -0
  75. readio-0.1.0/tests/test_chapters.py +72 -0
  76. readio-0.1.0/tests/test_cli.py +28 -0
  77. readio-0.1.0/tests/test_config.py +64 -0
  78. readio-0.1.0/tests/test_doctor.py +34 -0
  79. readio-0.1.0/tests/test_document.py +23 -0
  80. readio-0.1.0/tests/test_ingest.py +32 -0
  81. readio-0.1.0/tests/test_package_resources.py +12 -0
  82. readio-0.1.0/tests/test_paths.py +51 -0
  83. readio-0.1.0/tests/test_reader_selection.py +28 -0
  84. readio-0.1.0/tests/test_reader_ssmd.py +29 -0
  85. readio-0.1.0/tests/test_spotify.py +109 -0
  86. readio-0.1.0/tests/test_spotify_lifecycle.py +127 -0
  87. readio-0.1.0/tests/test_ssmd_cli.py +25 -0
  88. readio-0.1.0/tests/test_ssmd_integration.py +50 -0
  89. readio-0.1.0/tests/test_ssmd_preflight.py +100 -0
  90. readio-0.1.0/tests/test_template_validate.py +20 -0
  91. readio-0.1.0/tests/test_templates.py +60 -0
  92. readio-0.1.0/tests/test_text.py +10 -0
  93. readio-0.1.0/tests/test_wave.py +57 -0
@@ -0,0 +1,27 @@
1
+ [codecrate]
2
+ output = "context_readio.md"
3
+ keep_docstrings = true
4
+ dedupe = true
5
+ respect_gitignore = true
6
+ exclude = ["*/.venv/*", "context_readio.*"]
7
+ include = [
8
+ "**/*.py",
9
+ "**/*.toml",
10
+ "**/*.rst",
11
+ "**/*.md",
12
+ "**/*.json",
13
+ "**/*.jsonl",
14
+ "**/*.ipynb",
15
+ "**/*.txt",
16
+ "**/*.yaml",
17
+ "**/*.yml",
18
+ "**/py.typed",
19
+ ".gitignore",
20
+ "LICENSE*",
21
+ "MANIFEST.in",
22
+ "NOTICE*",
23
+ ]
24
+ split_max_chars = 2500000
25
+ layout = "full"
26
+ profile = "portable-agent"
27
+ emit_standalone_unpacker = true
@@ -0,0 +1,31 @@
1
+ name: Codecov
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ coverage:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - name: Set up Python
13
+ uses: actions/setup-python@v5
14
+ with:
15
+ python-version: "3.13"
16
+ cache: pip
17
+ - name: Install Readio runtime dependencies
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"
21
+ - name: Install project and coverage tools
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ python -m pip install -e ".[dev]" pytest-cov
25
+ - name: Generate coverage report
26
+ run: python -m pytest --cov=readio --cov-branch --cov-report=xml
27
+ - name: Upload coverage report
28
+ uses: codecov/codecov-action@v5
29
+ with:
30
+ token: ${{ secrets.CODECOV_TOKEN }}
31
+ slug: buchwandler/readio
@@ -0,0 +1,19 @@
1
+ name: pre-commit
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+
7
+ jobs:
8
+ pre-commit:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: actions/setup-python@v5
13
+ with:
14
+ python-version: "3.13"
15
+ - name: Install Python tools
16
+ run: |
17
+ python -m pip install --upgrade pip
18
+ python -m pip install "ruff>=0.6"
19
+ - uses: pre-commit/action@v3.0.1
@@ -0,0 +1,30 @@
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
24
+ - name: Build package
25
+ run: python -m build
26
+ - name: Publish package to PyPI
27
+ uses: pypa/gh-action-pypi-publish@v1.14.1
28
+ with:
29
+ password: ${{ secrets.PYPI_API_TOKEN }}
30
+ attestations: false
@@ -0,0 +1,99 @@
1
+ name: Test Readio
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ tests:
9
+ name: Tests (${{ matrix.os }}, Python ${{ matrix.python-version }})
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, windows-latest, macos-latest]
15
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - name: Install PortAudio (Linux)
19
+ if: runner.os == 'Linux'
20
+ run: sudo apt-get update && sudo apt-get install --yes portaudio19-dev
21
+ - name: Set up Python
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+ cache: pip
26
+ - name: Install Readio runtime dependencies
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"
30
+ - name: Install project and test tools
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ python -m pip install -e ".[dev]"
34
+ - name: Run test suite
35
+ run: python -m pytest -q
36
+
37
+ quality:
38
+ name: Static quality checks
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.13"
48
+ cache: pip
49
+ - name: Install Readio runtime dependencies
50
+ 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"
53
+ - name: Install development tools
54
+ run: python -m pip install -e ".[dev]"
55
+ - name: Ruff lint
56
+ run: ruff check .
57
+ - name: Ruff format check
58
+ run: ruff format --check .
59
+ - name: Compile sources
60
+ run: python -m compileall -q readio
61
+
62
+ package:
63
+ name: Package and installed-wheel smoke
64
+ runs-on: ubuntu-latest
65
+ steps:
66
+ - uses: actions/checkout@v4
67
+ - name: Install PortAudio
68
+ run: sudo apt-get update && sudo apt-get install --yes portaudio19-dev
69
+ - name: Set up Python
70
+ uses: actions/setup-python@v5
71
+ with:
72
+ python-version: "3.13"
73
+ cache: pip
74
+ - name: Install build tools
75
+ run: python -m pip install --upgrade build twine
76
+ - name: Build artifacts
77
+ run: python -m build
78
+ - name: Validate artifact metadata
79
+ run: python -m twine check dist/*
80
+ - name: Installed-wheel smoke
81
+ shell: bash
82
+ run: |
83
+ 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"
86
+ "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" -m pip install dist/*.whl
87
+ cd "${RUNNER_TEMP}"
88
+ "${RUNNER_TEMP}/readio-wheel-smoke/bin/python" - <<'PY'
89
+ import importlib.metadata
90
+ import importlib.resources
91
+ import readio
92
+
93
+ distribution_version = importlib.metadata.version("readio")
94
+ assert readio.__version__ == distribution_version
95
+ assert importlib.resources.files("readio.resources.templates").joinpath(
96
+ "podcast.ssmd"
97
+ ).is_file()
98
+ PY
99
+ "${RUNNER_TEMP}/readio-wheel-smoke/bin/readio" --version
@@ -0,0 +1,221 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ # poetry.lock
109
+ # poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ # pdm.lock
116
+ # pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ # pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # Redis
135
+ *.rdb
136
+ *.aof
137
+ *.pid
138
+
139
+ # RabbitMQ
140
+ mnesia/
141
+ rabbitmq/
142
+ rabbitmq-data/
143
+
144
+ # ActiveMQ
145
+ activemq-data/
146
+
147
+ # SageMath parsed files
148
+ *.sage.py
149
+
150
+ # Environments
151
+ .env
152
+ .envrc
153
+ .venv
154
+ env/
155
+ venv/
156
+ ENV/
157
+ env.bak/
158
+ venv.bak/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ # .vscode/
203
+ # Temporary file for partial code execution
204
+ tempCodeRunnerFile.py
205
+
206
+ # Ruff stuff:
207
+ .ruff_cache/
208
+
209
+ # PyPI configuration file
210
+ .pypirc
211
+
212
+ # Marimo
213
+ marimo/_static/
214
+ marimo/_lsp/
215
+ __marimo__/
216
+
217
+ # Streamlit
218
+ .streamlit/secrets.toml
219
+ context_readio*.*
220
+ run.html
221
+ *.wav
@@ -0,0 +1,6 @@
1
+ schema_version = 1
2
+ layout_version = 3
3
+ project_uuid = "ef81b740-6e31-44bd-8b30-74be81bd1f48"
4
+ tool = "documentledger"
5
+ mount = "config"
6
+ storage = "project"
@@ -0,0 +1,16 @@
1
+ config_version = 2
2
+
3
+ [ledger]
4
+ code = "dl"
5
+
6
+ [scan]
7
+ source_roots = ["readio", "tests"]
8
+ doc_roots = ["docs", "README.md"]
9
+ source_extensions = [".py"]
10
+ doc_extensions = [".md"]
11
+
12
+ [validation]
13
+ commands = []
14
+
15
+ [policy]
16
+ require_doc_frontmatter = false
@@ -0,0 +1,6 @@
1
+ schema_version = 1
2
+ layout_version = 3
3
+ project_uuid = "ef81b740-6e31-44bd-8b30-74be81bd1f48"
4
+ tool = "documentledger"
5
+ mount = "data"
6
+ storage = "project"
@@ -0,0 +1,78 @@
1
+ schema: documentledger.doc_record.v4
2
+ doc_path: docs/changelog.md
3
+ linked_sources: []
4
+ sections:
5
+ - section_id: md:section:docs/changelog.md::changelog
6
+ doc_path: docs/changelog.md
7
+ heading_path:
8
+ - Changelog
9
+ heading_slug: changelog
10
+ line_span:
11
+ - 1
12
+ - 2
13
+ section_hash: 4bf8b81ff9c0302132a0717589744f30d0127cc1ebe9a32aa08a4c0fa624737a
14
+ summary: Changelog
15
+ text: "# Changelog"
16
+ links: []
17
+ - section_id: md:section:docs/changelog.md::v0-1-0-2026-08-24
18
+ doc_path: docs/changelog.md
19
+ heading_path:
20
+ - Changelog
21
+ - "[v0.1.0] - 2026-08-24"
22
+ heading_slug: v0-1-0-2026-08-24
23
+ line_span:
24
+ - 3
25
+ - 3
26
+ section_hash: 5abd14bf174683126e7cb67e4ea8ad8651f0107a59d4033ba7ca7760bb2e0894
27
+ summary: "[v0.1.0] - 2026-08-24"
28
+ text: "## [v0.1.0] - 2026-08-24"
29
+ links: []
30
+ - section_id: md:section:docs/changelog.md::added
31
+ doc_path: docs/changelog.md
32
+ heading_path:
33
+ - Changelog
34
+ - "[v0.1.0] - 2026-08-24"
35
+ - Added
36
+ heading_slug: added
37
+ line_span:
38
+ - 4
39
+ - 8
40
+ section_hash: ab0a7f89ae271579404ddc4c0ec22a7021a0b3ebc82f841615cca0ecfa6cd57f
41
+ summary: Added
42
+ text: "### Added
43
+
44
+ - Added local text playback from literals, files, standard input, and live paragraph
45
+ streams
46
+
47
+ - Added bounded-memory WAV rendering and explicit Spotify publishing with readiness
48
+ and chapter support
49
+
50
+ - Added ingest artifacts, templates, SSMD voice preflight, configuration validation,
51
+ and actionable diagnostics"
52
+ links: []
53
+ - section_id: md:section:docs/changelog.md::quality
54
+ doc_path: docs/changelog.md
55
+ heading_path:
56
+ - Changelog
57
+ - "[v0.1.0] - 2026-08-24"
58
+ - Quality
59
+ heading_slug: quality
60
+ line_span:
61
+ - 9
62
+ - 12
63
+ section_hash: f3ff725e3abacc34a023313dfee38e136efc9cb1e962a079e8b370ee8b23138a
64
+ summary: Quality
65
+ text: "### Quality
66
+
67
+ - Added cross-platform CI, pre-commit, coverage, package publishing checks, and
68
+ a podcast example
69
+
70
+
71
+ <!-- generated by releaseledger -->"
72
+ links: []
73
+ last_fresh_scan_version: 2
74
+ last_fresh_hash: 879dcc2f21038ef461270c36b3921136aa8592615f0e9fba253046f74c85838a
75
+ notes:
76
+ Documentation baseline created in docs/index.md; generated changelog retained
77
+ and remaining source units are intentionally unlinked. (intentionally unlinked)
78
+ version: 5