readio 0.2.1__tar.gz → 0.2.2__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.
- {readio-0.2.1 → readio-0.2.2}/.codecrate.toml +1 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +14 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/audit/commit-audit.yaml +213 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0001.md +27 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0002.md +27 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0003.md +25 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0004.md +25 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0005.md +26 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0006.md +25 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0007.md +24 -0
- readio-0.2.2/.ledger/releaseledger/data/ledgers/main/releases/v0.2.2/release.md +27 -0
- readio-0.2.2/CHANGELOG.md +18 -0
- {readio-0.2.1/readio.egg-info → readio-0.2.2}/PKG-INFO +85 -2
- {readio-0.2.1 → readio-0.2.2}/README.md +83 -0
- {readio-0.2.1 → readio-0.2.2}/docs/changelog.md +17 -0
- {readio-0.2.1 → readio-0.2.2}/docs/index.md +31 -0
- readio-0.2.2/llm-guides/README.md +106 -0
- readio-0.2.2/llm-guides/ssmd/audio-drama.md +323 -0
- readio-0.2.2/llm-guides/ssmd/debate-pro-con.md +325 -0
- readio-0.2.2/llm-guides/ssmd/document-summary.md +305 -0
- readio-0.2.2/llm-guides/ssmd/dramatic-story.md +321 -0
- readio-0.2.2/llm-guides/ssmd/educational-explainer.md +311 -0
- readio-0.2.2/llm-guides/ssmd/funny-story.md +332 -0
- readio-0.2.2/llm-guides/ssmd/general-narration.md +301 -0
- readio-0.2.2/llm-guides/ssmd/guided-meditation.md +305 -0
- readio-0.2.2/llm-guides/ssmd/kids-story.md +324 -0
- readio-0.2.2/llm-guides/ssmd/language-learning.md +328 -0
- readio-0.2.2/llm-guides/ssmd/news-briefing.md +308 -0
- readio-0.2.2/llm-guides/ssmd/podcast-interview.md +330 -0
- readio-0.2.2/llm-guides/ssmd/podcast-roundtable.md +326 -0
- readio-0.2.2/llm-guides/ssmd/podcast-solo.md +311 -0
- readio-0.2.2/llm-guides/ssmd/quiz-trivia.md +310 -0
- {readio-0.2.1 → readio-0.2.2}/pyproject.toml +1 -1
- {readio-0.2.1 → readio-0.2.2}/readio/cli.py +242 -19
- {readio-0.2.1 → readio-0.2.2}/readio/errors.py +15 -0
- readio-0.2.2/readio/jsonutil.py +37 -0
- readio-0.2.2/readio/manifest.py +128 -0
- {readio-0.2.1 → readio-0.2.2}/readio/models.py +1 -1
- readio-0.2.2/readio/plan.py +1715 -0
- {readio-0.2.1 → readio-0.2.2}/readio/reader.py +106 -3
- {readio-0.2.1 → readio-0.2.2}/readio/ssmd.py +208 -49
- {readio-0.2.1 → readio-0.2.2/readio.egg-info}/PKG-INFO +85 -2
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/SOURCES.txt +38 -0
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/requires.txt +1 -1
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/scm_file_list.json +38 -0
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/scm_version.json +2 -2
- {readio-0.2.1 → readio-0.2.2}/skill/readio/SKILL.md +22 -1
- {readio-0.2.1 → readio-0.2.2}/skill/readio/references/cli.md +35 -1
- {readio-0.2.1 → readio-0.2.2}/skill/readio/references/ssmd.md +8 -0
- {readio-0.2.1 → readio-0.2.2}/skill/readio/references/troubleshooting.md +22 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_cli.py +47 -52
- readio-0.2.2/tests/test_llm_guides.py +123 -0
- readio-0.2.2/tests/test_manifest.py +138 -0
- readio-0.2.2/tests/test_plan.py +373 -0
- readio-0.2.2/tests/test_plan_cli.py +232 -0
- readio-0.2.2/tests/test_plan_no_tts_load.py +213 -0
- readio-0.2.2/tests/test_plan_validation.py +339 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_pykokoro_09_contract.py +7 -0
- readio-0.2.2/tests/test_render_from_plan.py +292 -0
- readio-0.2.2/tests/test_render_manifest_cli.py +282 -0
- readio-0.2.2/tests/test_ssmd_single_source.py +152 -0
- {readio-0.2.1 → readio-0.2.2}/.github/workflows/codecov.yml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.github/workflows/pre-commit.yml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.github/workflows/python-publish.yml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.github/workflows/tests.yml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.gitignore +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/.ledger-project.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/config.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/.ledger-project.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/docs/docs-changelog-md-77f023b9.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/docs/docs-index-md-b4d68dc8.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/docs/readme-md-b3356305.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/scan.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/source-index.json +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/documentledger/data/storage.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/ledger.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/.ledger-project.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/config.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/audit/commit-audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0001.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0002.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/audit/commit-audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/entries/entry-0001.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.1/release.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/audit/commit-audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0001.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0002.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0003.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/entries/entry-0004.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.2/release.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/audit/commit-audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0001.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/entries/entry-0002.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.3/release.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/audit/commit-audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0001.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0002.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0003.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0004.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0005.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/entries/entry-0006.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.0/release.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.1/audit/commit-audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.1/entries/entry-0001.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/data/ledgers/main/releases/v0.2.1/release.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/work/v0.2.0/audit-decisions.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/work/v0.2.0/audit.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/work/v0.2.0/entries.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/work/v0.2.0/evidence/4ecf165.patch +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/work/v0.2.0/evidence/manifest.json +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/work/v0.2.0/range.json +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/releaseledger/write.lock +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/taskledger/.ledger-project.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.ledger/taskledger/config.toml +0 -0
- {readio-0.2.1 → readio-0.2.2}/.pre-commit-config.yaml +0 -0
- {readio-0.2.1 → readio-0.2.2}/LICENSE +0 -0
- {readio-0.2.1 → readio-0.2.2}/docs/conf.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/docs/make.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/docs/requirements.txt +0 -0
- {readio-0.2.1 → readio-0.2.2}/examples/README.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/examples/readio-podcast.ssmd +0 -0
- {readio-0.2.1 → readio-0.2.2}/examples/readio-prosody.ssmd +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/__init__.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/__main__.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/audio.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/config.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/document.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/formats.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/ingest.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/markdown.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/paths.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/progress.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/resources/__init__.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/resources/templates/__init__.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/resources/templates/briefing.ssmd +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/resources/templates/dialogue.ssmd +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/resources/templates/podcast.ssmd +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/spotify.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/spotify_cli.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/ssmd_authoring.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/synthesis.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/templates.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/text.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio/wave.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/dependency_links.txt +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/entry_points.txt +0 -0
- {readio-0.2.1 → readio-0.2.2}/readio.egg-info/top_level.txt +0 -0
- {readio-0.2.1 → readio-0.2.2}/setup.cfg +0 -0
- {readio-0.2.1 → readio-0.2.2}/skill/readio/references/input-formats.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/skill/readio/references/spotify.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/conftest.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/fixtures/architecture-review.ssmd +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/fixtures/markdown/all-elements.md +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/fixtures/markdown/all-elements.txt +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_audio.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_audio_formats.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_chapters.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_config.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_defaults_cli.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_doctor.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_document.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_examples.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_ffmpeg_sink.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_ingest.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_language_defaults_config.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_markdown.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_model_source_preference.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_models_cli.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_package_resources.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_paths.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_progress.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_pykokoro_09_regressions.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_reader_markdown.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_reader_selection.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_reader_ssmd.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_reader_synthesis.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_skill_integrity.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_spotify.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_spotify_cli.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_spotify_lifecycle.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_ssmd_cli.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_ssmd_integration.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_ssmd_model_roster.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_ssmd_preflight.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_synthesis.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_template_validate.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_templates.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_text.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_voice_resolution_workflow.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_voices_cli.py +0 -0
- {readio-0.2.1 → readio-0.2.2}/tests/test_wave.py +0 -0
|
@@ -41,3 +41,17 @@
|
|
|
41
41
|
{"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0041","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.2.1","schema_version":2}
|
|
42
42
|
{"data":{"entry_ids":["entry-0001"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0042","record_revisions":{"commit_audit_sheet":3,"entry:v0.2.1/entry-0001":1,"release:v0.2.1":3},"release_version":"v0.2.1","schema_version":2}
|
|
43
43
|
{"data":{"released_at":"2026-09-05"},"event":"release.finalized","event_id":"event-0043","record_revisions":{"release:v0.2.1":4},"release_version":"v0.2.1","schema_version":2}
|
|
44
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0044","record_revisions":{"release:v0.2.2":1},"release_version":"v0.2.2","schema_version":2}
|
|
45
|
+
{"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-0045","record_revisions":{"release:v0.2.2":2},"release_version":"v0.2.2","schema_version":2}
|
|
46
|
+
{"data":{"row_count":4},"event":"audit.created","event_id":"event-0046","record_revisions":{"commit_audit_sheet":1},"release_version":"v0.2.2","schema_version":2}
|
|
47
|
+
{"data":{"kind":"added","status":"accepted"},"entry_id":"entry-0001","event":"entry.added","event_id":"event-0047","record_revisions":{"entry:v0.2.2/entry-0001":1,"release:v0.2.2":3},"release_version":"v0.2.2","schema_version":2}
|
|
48
|
+
{"data":{"kind":"docs","status":"accepted"},"entry_id":"entry-0002","event":"entry.added","event_id":"event-0048","record_revisions":{"entry:v0.2.2/entry-0002":1,"release:v0.2.2":4},"release_version":"v0.2.2","schema_version":2}
|
|
49
|
+
{"data":{"kind":"added","status":"accepted"},"entry_id":"entry-0003","event":"entry.added","event_id":"event-0049","record_revisions":{"entry:v0.2.2/entry-0003":1,"release:v0.2.2":5},"release_version":"v0.2.2","schema_version":2}
|
|
50
|
+
{"data":{"kind":"changed","status":"accepted"},"entry_id":"entry-0004","event":"entry.added","event_id":"event-0050","record_revisions":{"entry:v0.2.2/entry-0004":1,"release:v0.2.2":6},"release_version":"v0.2.2","schema_version":2}
|
|
51
|
+
{"data":{"released_at":"2026-09-05"},"event":"release.finalized","event_id":"event-0051","record_revisions":{"release:v0.2.2":7},"release_version":"v0.2.2","schema_version":2}
|
|
52
|
+
{"data":{"updated_rows":4},"event":"audit.updated","event_id":"event-0052","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.2.2","schema_version":2}
|
|
53
|
+
{"data":{"fields":["git_commit_count","git_head_sha","git_range"]},"event":"release.updated","event_id":"event-0053","record_revisions":{"release:v0.2.2":8},"release_version":"v0.2.2","schema_version":2}
|
|
54
|
+
{"data":{"new_rows":3,"preserved_reviewed_rows":4,"removed_rows":0},"event":"audit.updated","event_id":"event-0054","record_revisions":{"commit_audit_sheet":3},"release_version":"v0.2.2","schema_version":2}
|
|
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
|
+
{"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
|
+
{"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}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 3
|
|
6
|
+
release_version: v0.2.2
|
|
7
|
+
git_base_ref: v0.2.1
|
|
8
|
+
git_base_sha: 52c6084a8dfc3fbf46ac5fca8ff670cb1e97bf35
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: 0302f797298f78a7f56bf85fdccd2fa977110870
|
|
11
|
+
git_range: 52c6084a8dfc3fbf46ac5fca8ff670cb1e97bf35..0302f797298f78a7f56bf85fdccd2fa977110870
|
|
12
|
+
commit_count: 7
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 5827dda1b6efda39c08b3cc38da8c6ebd867e24d
|
|
15
|
+
source_ref: git:5827dda1b6efda39c08b3cc38da8c6ebd867e24d
|
|
16
|
+
short_sha: 5827dda
|
|
17
|
+
changed_paths:
|
|
18
|
+
- .codecrate.toml
|
|
19
|
+
- README.md
|
|
20
|
+
- llm-guides/README.md
|
|
21
|
+
- llm-guides/ssmd/audio-drama.md
|
|
22
|
+
- llm-guides/ssmd/debate-pro-con.md
|
|
23
|
+
- llm-guides/ssmd/document-summary.md
|
|
24
|
+
- llm-guides/ssmd/dramatic-story.md
|
|
25
|
+
- llm-guides/ssmd/educational-explainer.md
|
|
26
|
+
- llm-guides/ssmd/funny-story.md
|
|
27
|
+
- llm-guides/ssmd/general-narration.md
|
|
28
|
+
- llm-guides/ssmd/guided-meditation.md
|
|
29
|
+
- llm-guides/ssmd/kids-story.md
|
|
30
|
+
- llm-guides/ssmd/language-learning.md
|
|
31
|
+
- llm-guides/ssmd/news-briefing.md
|
|
32
|
+
- llm-guides/ssmd/podcast-interview.md
|
|
33
|
+
- llm-guides/ssmd/podcast-roundtable.md
|
|
34
|
+
- llm-guides/ssmd/podcast-solo.md
|
|
35
|
+
- llm-guides/ssmd/quiz-trivia.md
|
|
36
|
+
- tests/test_llm_guides.py
|
|
37
|
+
stats:
|
|
38
|
+
files_changed: 0
|
|
39
|
+
insertions: 4998
|
|
40
|
+
deletions: 0
|
|
41
|
+
inspected: true
|
|
42
|
+
inspected_paths:
|
|
43
|
+
- llm-guides/README.md
|
|
44
|
+
- llm-guides/ssmd/
|
|
45
|
+
observed_behavior:
|
|
46
|
+
Added comprehensive LLM guides for SSMD audio content creation
|
|
47
|
+
covering podcasts, stories, educational content, meditation, news, and more
|
|
48
|
+
public_impact: public
|
|
49
|
+
decision: accepted
|
|
50
|
+
stale: false
|
|
51
|
+
evidence_subject: "feat: llm guides added"
|
|
52
|
+
target_entry_key: entry-0002
|
|
53
|
+
target_entry_id: entry-0002
|
|
54
|
+
notes: ""
|
|
55
|
+
- sha: 1ef0e91959f5986fed3bc6fdffcc32982649f5f5
|
|
56
|
+
source_ref: git:1ef0e91959f5986fed3bc6fdffcc32982649f5f5
|
|
57
|
+
short_sha: 1ef0e91
|
|
58
|
+
changed_paths:
|
|
59
|
+
- pyproject.toml
|
|
60
|
+
- readio/cli.py
|
|
61
|
+
- readio/models.py
|
|
62
|
+
- readio/plan.py
|
|
63
|
+
- readio/reader.py
|
|
64
|
+
- readio/ssmd.py
|
|
65
|
+
- skill/readio/SKILL.md
|
|
66
|
+
- tests/test_plan.py
|
|
67
|
+
- tests/test_plan_cli.py
|
|
68
|
+
- tests/test_plan_no_tts_load.py
|
|
69
|
+
- tests/test_pykokoro_09_contract.py
|
|
70
|
+
stats:
|
|
71
|
+
files_changed: 0
|
|
72
|
+
insertions: 2804
|
|
73
|
+
deletions: 3
|
|
74
|
+
inspected: true
|
|
75
|
+
inspected_paths:
|
|
76
|
+
- readio/plan.py
|
|
77
|
+
- tests/test_plan.py
|
|
78
|
+
observed_behavior:
|
|
79
|
+
New synthesis plan resolution system with explicit plan domain,
|
|
80
|
+
resolution pipeline, validation, and comprehensive test coverage
|
|
81
|
+
public_impact: public
|
|
82
|
+
decision: accepted
|
|
83
|
+
stale: false
|
|
84
|
+
evidence_subject: "feat: new plan feature"
|
|
85
|
+
target_entry_key: entry-0001
|
|
86
|
+
target_entry_id: entry-0001
|
|
87
|
+
notes: ""
|
|
88
|
+
- sha: 6449c24426d1f4e4d318b553b4ce2fa46b0f3c1e
|
|
89
|
+
source_ref: git:6449c24426d1f4e4d318b553b4ce2fa46b0f3c1e
|
|
90
|
+
short_sha: 6449c24
|
|
91
|
+
changed_paths:
|
|
92
|
+
- README.md
|
|
93
|
+
- docs/index.md
|
|
94
|
+
- readio/cli.py
|
|
95
|
+
- readio/plan.py
|
|
96
|
+
- readio/reader.py
|
|
97
|
+
- readio/ssmd.py
|
|
98
|
+
- skill/readio/references/cli.md
|
|
99
|
+
- skill/readio/references/ssmd.md
|
|
100
|
+
- skill/readio/references/troubleshooting.md
|
|
101
|
+
- tests/test_cli.py
|
|
102
|
+
- tests/test_plan.py
|
|
103
|
+
- tests/test_plan_cli.py
|
|
104
|
+
- tests/test_plan_no_tts_load.py
|
|
105
|
+
- tests/test_plan_validation.py
|
|
106
|
+
- tests/test_render_from_plan.py
|
|
107
|
+
- tests/test_ssmd_single_source.py
|
|
108
|
+
stats:
|
|
109
|
+
files_changed: 0
|
|
110
|
+
insertions: 1428
|
|
111
|
+
deletions: 335
|
|
112
|
+
inspected: true
|
|
113
|
+
inspected_paths:
|
|
114
|
+
- readio/cli.py
|
|
115
|
+
- readio/plan.py
|
|
116
|
+
observed_behavior: Improved plan feature with enhanced CLI commands and validation
|
|
117
|
+
public_impact: public
|
|
118
|
+
decision: accepted
|
|
119
|
+
stale: false
|
|
120
|
+
evidence_subject: "feat: improve plan feature"
|
|
121
|
+
target_entry_key: entry-0004
|
|
122
|
+
target_entry_id: entry-0004
|
|
123
|
+
notes: ""
|
|
124
|
+
- sha: 33b44019d3d4899a551a6e621e8a78189bf52b60
|
|
125
|
+
source_ref: git:33b44019d3d4899a551a6e621e8a78189bf52b60
|
|
126
|
+
short_sha: 33b4401
|
|
127
|
+
changed_paths:
|
|
128
|
+
- README.md
|
|
129
|
+
- docs/index.md
|
|
130
|
+
- readio/cli.py
|
|
131
|
+
- readio/errors.py
|
|
132
|
+
- readio/jsonutil.py
|
|
133
|
+
- readio/manifest.py
|
|
134
|
+
- readio/plan.py
|
|
135
|
+
- skill/readio/SKILL.md
|
|
136
|
+
- skill/readio/references/cli.md
|
|
137
|
+
- skill/readio/references/troubleshooting.md
|
|
138
|
+
- tests/test_manifest.py
|
|
139
|
+
- tests/test_render_manifest_cli.py
|
|
140
|
+
stats:
|
|
141
|
+
files_changed: 0
|
|
142
|
+
insertions: 719
|
|
143
|
+
deletions: 22
|
|
144
|
+
inspected: true
|
|
145
|
+
inspected_paths:
|
|
146
|
+
- readio/manifest.py
|
|
147
|
+
- tests/test_manifest.py
|
|
148
|
+
observed_behavior:
|
|
149
|
+
Added manifest module for project metadata and package information
|
|
150
|
+
management
|
|
151
|
+
public_impact: public
|
|
152
|
+
decision: accepted
|
|
153
|
+
stale: false
|
|
154
|
+
evidence_subject: "feat: add manifest"
|
|
155
|
+
target_entry_key: entry-0003
|
|
156
|
+
target_entry_id: entry-0003
|
|
157
|
+
notes: ""
|
|
158
|
+
- sha: 9ec43c0c70d5badaf282547142af78fe9e986ca4
|
|
159
|
+
source_ref: git:9ec43c0c70d5badaf282547142af78fe9e986ca4
|
|
160
|
+
short_sha: 9ec43c0
|
|
161
|
+
changed_paths:
|
|
162
|
+
- .ledger/releaseledger/data/ledgers/main/events/events.jsonl
|
|
163
|
+
- .ledger/releaseledger/data/ledgers/main/releases/v0.2.2/audit/commit-audit.yaml
|
|
164
|
+
- .ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0001.md
|
|
165
|
+
- .ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0002.md
|
|
166
|
+
- .ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0003.md
|
|
167
|
+
- .ledger/releaseledger/data/ledgers/main/releases/v0.2.2/entries/entry-0004.md
|
|
168
|
+
- .ledger/releaseledger/data/ledgers/main/releases/v0.2.2/release.md
|
|
169
|
+
- CHANGELOG.md
|
|
170
|
+
stats:
|
|
171
|
+
files_changed: 0
|
|
172
|
+
insertions: 315
|
|
173
|
+
deletions: 0
|
|
174
|
+
inspected: false
|
|
175
|
+
inspected_paths: []
|
|
176
|
+
observed_behavior: ""
|
|
177
|
+
public_impact: unknown
|
|
178
|
+
decision: needs_review
|
|
179
|
+
stale: false
|
|
180
|
+
evidence_subject: "doc: changelog"
|
|
181
|
+
- sha: 6656cdd980d30a65d403961909d5e911e3e81dbc
|
|
182
|
+
source_ref: git:6656cdd980d30a65d403961909d5e911e3e81dbc
|
|
183
|
+
short_sha: 6656cdd
|
|
184
|
+
changed_paths:
|
|
185
|
+
- tests/test_plan_no_tts_load.py
|
|
186
|
+
stats:
|
|
187
|
+
files_changed: 0
|
|
188
|
+
insertions: 2
|
|
189
|
+
deletions: 0
|
|
190
|
+
inspected: false
|
|
191
|
+
inspected_paths: []
|
|
192
|
+
observed_behavior: ""
|
|
193
|
+
public_impact: unknown
|
|
194
|
+
decision: needs_review
|
|
195
|
+
stale: false
|
|
196
|
+
evidence_subject: "fix: pytest"
|
|
197
|
+
- sha: 0302f797298f78a7f56bf85fdccd2fa977110870
|
|
198
|
+
source_ref: git:0302f797298f78a7f56bf85fdccd2fa977110870
|
|
199
|
+
short_sha: 0302f79
|
|
200
|
+
changed_paths:
|
|
201
|
+
- readio/jsonutil.py
|
|
202
|
+
- tests/test_plan_no_tts_load.py
|
|
203
|
+
stats:
|
|
204
|
+
files_changed: 0
|
|
205
|
+
insertions: 3
|
|
206
|
+
deletions: 2
|
|
207
|
+
inspected: false
|
|
208
|
+
inspected_paths: []
|
|
209
|
+
observed_behavior: ""
|
|
210
|
+
public_impact: unknown
|
|
211
|
+
decision: needs_review
|
|
212
|
+
stale: false
|
|
213
|
+
evidence_subject: "chore: pytest and pre-commit fix"
|
|
@@ -0,0 +1,27 @@
|
|
|
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.2
|
|
9
|
+
kind: added
|
|
10
|
+
summary:
|
|
11
|
+
Added synthesis plan resolution system with explicit plan domain, resolution
|
|
12
|
+
pipeline, and validation
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:1ef0e91959f5986fed3bc6fdffcc32982649f5f5
|
|
18
|
+
paths:
|
|
19
|
+
- readio/plan.py
|
|
20
|
+
issues: []
|
|
21
|
+
prs: []
|
|
22
|
+
sources: []
|
|
23
|
+
contributors: []
|
|
24
|
+
breaking: false
|
|
25
|
+
internal: false
|
|
26
|
+
order: 1
|
|
27
|
+
---
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0002
|
|
8
|
+
release_version: v0.2.2
|
|
9
|
+
kind: docs
|
|
10
|
+
summary:
|
|
11
|
+
Added comprehensive LLM guides for SSMD audio content creation including
|
|
12
|
+
podcasts, stories, educational content, and more
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:5827dda1b6efda39c08b3cc38da8c6ebd867e24d
|
|
18
|
+
paths:
|
|
19
|
+
- llm-guides/README.md
|
|
20
|
+
issues: []
|
|
21
|
+
prs: []
|
|
22
|
+
sources: []
|
|
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: 1
|
|
7
|
+
entry_id: entry-0003
|
|
8
|
+
release_version: v0.2.2
|
|
9
|
+
kind: added
|
|
10
|
+
summary: Added manifest module for project metadata and package information management
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:33b44019d3d4899a551a6e621e8a78189bf52b60
|
|
16
|
+
paths:
|
|
17
|
+
- readio/manifest.py
|
|
18
|
+
issues: []
|
|
19
|
+
prs: []
|
|
20
|
+
sources: []
|
|
21
|
+
contributors: []
|
|
22
|
+
breaking: false
|
|
23
|
+
internal: false
|
|
24
|
+
order: 3
|
|
25
|
+
---
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0004
|
|
8
|
+
release_version: v0.2.2
|
|
9
|
+
kind: changed
|
|
10
|
+
summary: Improved plan feature with enhanced CLI commands and validation
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:6449c24426d1f4e4d318b553b4ce2fa46b0f3c1e
|
|
16
|
+
paths:
|
|
17
|
+
- readio/cli.py
|
|
18
|
+
issues: []
|
|
19
|
+
prs: []
|
|
20
|
+
sources: []
|
|
21
|
+
contributors: []
|
|
22
|
+
breaking: false
|
|
23
|
+
internal: false
|
|
24
|
+
order: 4
|
|
25
|
+
---
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0005
|
|
8
|
+
release_version: v0.2.2
|
|
9
|
+
kind: quality
|
|
10
|
+
summary: Fixed pytest and pre-commit configuration for plan feature tests
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:0302f797298f78a7f56bf85fdccd2fa977110870
|
|
16
|
+
paths:
|
|
17
|
+
- readio/jsonutil.py
|
|
18
|
+
- tests/test_plan_no_tts_load.py
|
|
19
|
+
issues: []
|
|
20
|
+
prs: []
|
|
21
|
+
sources: []
|
|
22
|
+
contributors: []
|
|
23
|
+
breaking: false
|
|
24
|
+
internal: true
|
|
25
|
+
order: 5
|
|
26
|
+
---
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0006
|
|
8
|
+
release_version: v0.2.2
|
|
9
|
+
kind: quality
|
|
10
|
+
summary: Fixed pytest test setup for plan feature without TTS dependency
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:6656cdd980d30a65d403961909d5e911e3e81dbc
|
|
16
|
+
paths:
|
|
17
|
+
- tests/test_plan_no_tts_load.py
|
|
18
|
+
issues: []
|
|
19
|
+
prs: []
|
|
20
|
+
sources: []
|
|
21
|
+
contributors: []
|
|
22
|
+
breaking: false
|
|
23
|
+
internal: true
|
|
24
|
+
order: 6
|
|
25
|
+
---
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0007
|
|
8
|
+
release_version: v0.2.2
|
|
9
|
+
kind: internal
|
|
10
|
+
summary: Initialized releaseledger state and changelog for v0.2.2
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:9ec43c0c70d5badaf282547142af78fe9e986ca4
|
|
16
|
+
paths: []
|
|
17
|
+
issues: []
|
|
18
|
+
prs: []
|
|
19
|
+
sources: []
|
|
20
|
+
contributors: []
|
|
21
|
+
breaking: false
|
|
22
|
+
internal: true
|
|
23
|
+
order: 7
|
|
24
|
+
---
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 11
|
|
7
|
+
version: v0.2.2
|
|
8
|
+
status: released
|
|
9
|
+
history_state: curated
|
|
10
|
+
title: Readio v0.2.2
|
|
11
|
+
released_at: "2026-09-05"
|
|
12
|
+
previous_version: v0.2.1
|
|
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: 7
|
|
20
|
+
artifact_count: 0
|
|
21
|
+
git_base_ref: v0.2.1
|
|
22
|
+
git_base_sha: 52c6084a8dfc3fbf46ac5fca8ff670cb1e97bf35
|
|
23
|
+
git_head_ref: HEAD
|
|
24
|
+
git_head_sha: 0302f797298f78a7f56bf85fdccd2fa977110870
|
|
25
|
+
git_range: 52c6084a8dfc3fbf46ac5fca8ff670cb1e97bf35..0302f797298f78a7f56bf85fdccd2fa977110870
|
|
26
|
+
git_commit_count: 7
|
|
27
|
+
---
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [v0.2.2] - 2026-09-05
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Added synthesis plan resolution system with explicit plan domain, resolution pipeline, and validation
|
|
8
|
+
- Added manifest module for project metadata and package information management
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Improved plan feature with enhanced CLI commands and validation
|
|
13
|
+
|
|
14
|
+
### Documentation
|
|
15
|
+
|
|
16
|
+
- Added comprehensive LLM guides for SSMD audio content creation including podcasts, stories, educational content, and more
|
|
17
|
+
|
|
18
|
+
<!-- generated by releaseledger -->
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: readio
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Read text aloud in the terminal with streaming TTS and an Agent Skill for LLM invocation
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
License-File: LICENSE
|
|
9
|
-
Requires-Dist: pykokoro[playback]<0.10,>=0.9.
|
|
9
|
+
Requires-Dist: pykokoro[playback]<0.10,>=0.9.1
|
|
10
10
|
Requires-Dist: platformdirs>=4.0
|
|
11
11
|
Requires-Dist: soundfile>=0.12
|
|
12
12
|
Requires-Dist: tomli>=2.0; python_version < "3.11"
|
|
@@ -143,6 +143,14 @@ draft="$(readio template use podcast)"
|
|
|
143
143
|
|
|
144
144
|
The returned path is under the configured ingest directory. A caller can request a filename with `readio template use podcast --name weekly-review.ssmd`.
|
|
145
145
|
|
|
146
|
+
## Standalone LLM authoring guides
|
|
147
|
+
|
|
148
|
+
`llm-guides/ssmd/` contains standalone Markdown instructions for generic LLMs. These guides are distinct from the runtime `.ssmd` templates managed by `readio template`.
|
|
149
|
+
|
|
150
|
+
No Readio or Python installation is needed on the authoring system: choose one guide and attach it with the task and source material. When the harness supports artifacts, ask it to create and return one downloadable `.ssmd` file; otherwise save the raw SSMD response as a file. Rendering and final validation happen later on a system where Readio is installed.
|
|
151
|
+
|
|
152
|
+
See [`llm-guides/README.md`](llm-guides/README.md) for the catalog and the authoring-to-rendering workflow.
|
|
153
|
+
|
|
146
154
|
## Ingest directory
|
|
147
155
|
|
|
148
156
|
The ingest directory stores text, Markdown, and SSMD files created for later processing.
|
|
@@ -157,6 +165,81 @@ readio ingest list
|
|
|
157
165
|
|
|
158
166
|
Automatic names contain a UTC artifact ID such as `20260824T111423Z-5f8ab31c`. Explicit names are relative to the ingest directory and path traversal is rejected.
|
|
159
167
|
|
|
168
|
+
## Planning before rendering
|
|
169
|
+
|
|
170
|
+
Every non-live render resolves one explicit synthesis plan before any TTS work. `readio plan` and `readio render --dry-run` display that plan without loading a model, and a normal `render` executes exactly the plan it resolved — the plan is the execution contract, not a prediction:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
readio plan --file episode.ssmd --format mp3 --json
|
|
174
|
+
readio render --file episode.ssmd --dry-run # same plan, human output
|
|
175
|
+
readio render --file episode.ssmd # resolves the same plan, then executes it
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Planning, discovery, defaults, and render results are distinct layers:
|
|
179
|
+
|
|
180
|
+
- **`readio models` / `readio voices` (discovery)** list what the installed PyKokoro runtime _could_ provide — model IDs, languages, voices, qualities, lexicons, status.
|
|
181
|
+
- **`readio defaults` (defaults)** persist validated per-language policy that resolution _prefers_.
|
|
182
|
+
- **`readio plan` (planning)** resolves one concrete request against config, defaults, CLI options, and PyKokoro's automatic selection: a concrete model, source, quality, voice, SSMD cast, and output allocation, with provenance for every effective value. No TTS model is loaded.
|
|
183
|
+
- **`readio render` (render result)** executes the plan; the plan JSON's synthesis, SSMD bindings, and output path are the values actually used. A render that fails planning exits 1 with the plan and its diagnostics instead of loading TTS.
|
|
184
|
+
|
|
185
|
+
`readio.plan.v1` JSON exposes `schema`, `ok`, `input`, `synthesis` (with `model` capability metadata), `ssmd` bindings, `output` (format, encoder backend, path, path origin, `force`), `environment` (including `ffmpeg_available`), `decisions` (winning source per field), and `diagnostics`:
|
|
186
|
+
|
|
187
|
+
```json
|
|
188
|
+
{
|
|
189
|
+
"schema": "readio.plan.v1",
|
|
190
|
+
"ok": true,
|
|
191
|
+
"operation": "render",
|
|
192
|
+
"synthesis": {
|
|
193
|
+
"engine": "pykokoro",
|
|
194
|
+
"language": "de",
|
|
195
|
+
"model": {
|
|
196
|
+
"id": "de-thorsten",
|
|
197
|
+
"source": "github",
|
|
198
|
+
"quality": "fp32",
|
|
199
|
+
"voice": "thorsten",
|
|
200
|
+
"status": "ready",
|
|
201
|
+
"runtime_available": true,
|
|
202
|
+
"languages": ["de"],
|
|
203
|
+
"experimental": false
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"ssmd": { "enabled": false, "bindings": [], "unresolved": [] },
|
|
207
|
+
"output": {
|
|
208
|
+
"mode": "file",
|
|
209
|
+
"format": "mp3",
|
|
210
|
+
"encoder_backend": "soundfile",
|
|
211
|
+
"path": ".../episode.mp3",
|
|
212
|
+
"path_origin": "explicit",
|
|
213
|
+
"force": false
|
|
214
|
+
},
|
|
215
|
+
"decisions": [
|
|
216
|
+
{
|
|
217
|
+
"field": "synthesis.model",
|
|
218
|
+
"value": "de-thorsten",
|
|
219
|
+
"origin": "cli",
|
|
220
|
+
"locator": "request.model"
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"diagnostics": []
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Plans are deterministic and non-interactive: `--resolve-voices` is rejected by `plan` and `--dry-run`; use repeatable `--voice-bind ROLE=VOICE_ID` options or persisted role configuration instead. `plan` accepts `--force` so it can represent every render output request, and an invalid plan (incompatible model/language, unavailable runtime, unresolved SSMD cast, unavailable encoder, non-concrete synthesis) fails before model loading.
|
|
228
|
+
|
|
229
|
+
## Durable render manifests
|
|
230
|
+
|
|
231
|
+
For bounded renders that will be reused, published, compared, or handed to another agent, request an opt-in post-render manifest:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
readio plan --file episode.ssmd --format mp3 --json
|
|
235
|
+
readio render --file episode.ssmd --format mp3 --manifest
|
|
236
|
+
readio render --file episode.ssmd --format mp3 --manifest --json
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
A successful render writes the audio and a colocated `<audio>.readio.json` sidecar. The sidecar uses schema `readio.render-manifest.v1` and records the exact executed `readio.plan.v1`, its canonical SHA-256, the final encoded audio hash and byte count, render summary facts, document metadata, and final marker offsets. The plan is pre-execution intent; the manifest is post-execution evidence.
|
|
240
|
+
|
|
241
|
+
Human stdout remains only the audio path. JSON render output remains one object and adds `manifest` with the sidecar schema and path, or `null` when the flag is absent. `--manifest` is available only for bounded rendering, not `--live`, `speak`, planning, dry runs, or publishing. If sidecar writing fails, Readio preserves the committed audio and returns `render.manifest_error`.
|
|
242
|
+
|
|
160
243
|
## Multi-format audio output
|
|
161
244
|
|
|
162
245
|
The output path is optional and WAV remains the default:
|