utterplan 0.6.1__tar.gz → 0.6.3__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.
- utterplan-0.6.3/AGENTS.md +29 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/PKG-INFO +36 -1
- {utterplan-0.6.1 → utterplan-0.6.3}/README.md +35 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/changelog.md +24 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/cli.md +70 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/python-api.md +22 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/ssmdbook.md +30 -0
- utterplan-0.6.3/tests/test_book_api.py +483 -0
- utterplan-0.6.3/tests/test_book_replan.py +471 -0
- utterplan-0.6.3/tests/test_cli_replan_book.py +261 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderplan_dependency_contract.py +10 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/__init__.py +46 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/_version.py +3 -3
- utterplan-0.6.3/utterplan/book.py +598 -0
- utterplan-0.6.3/utterplan/book_replan.py +761 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/cli.py +324 -318
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/PKG-INFO +36 -1
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/SOURCES.txt +5 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/scm_file_list.json +45 -0
- utterplan-0.6.3/utterplan.egg-info/scm_version.json +8 -0
- utterplan-0.6.1/AGENTS.md +0 -20
- utterplan-0.6.1/utterplan.egg-info/scm_version.json +0 -8
- {utterplan-0.6.1 → utterplan-0.6.3}/.codecrate.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/.github/workflows/codecov.yml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/.github/workflows/pre-commit.yml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/.github/workflows/python-publish.yml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/.github/workflows/tests.yml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/.gitignore +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/.pre-commit-config.yaml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/LICENSE +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/MANIFEST.in +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/NOTICE +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/Makefile +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/architecture.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/conf.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/consumer-guide.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/coordinate-spaces.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/debugging.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/format.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/getting-started.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/index.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/make.bat +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/phase-a-completion.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/pykokoro-integration.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/docs/requirements.txt +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/examples/basic.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/examples/chapter.ssmd +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/examples/compile_file.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/examples/inspect_plan.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/examples/multilingual.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/examples/ssmd_example.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/pyproject.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/setup.cfg +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/spec/schemas/v1.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/spec/schemas/v2.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/spec/schemas/v3.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/spec/schemas/v4.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/spec/utterplan.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/compiler_helpers.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/fixtures/canonical_consumer_contract.expected.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/fixtures/canonical_consumer_contract.ssmd +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/fixtures/ssmd_09_comprehensive.ssmd +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/basic_en.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/directives.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/markers.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/multilingual.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/parenthetical.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/spokenform_offsets.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/ssmd_09_comprehensive.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/golden/ssmd_breaks.utterplan.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/cases.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/basic_en.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/directives.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/markers.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/multilingual.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/parenthetical.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/spokenform_offsets.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/ssmd_09_comprehensive.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/fixtures/v4/ssmd_breaks.utterplan.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/goldens/multilingual_preparation.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/goldens/spokenform_numbers.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/goldens/ssmd_break.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/goldens/ssmd_language_detection.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/goldens/ssmd_marker.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/goldens/ssmd_pronunciation.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/test_legacy_json_import.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/migration/test_semantic_migration_regressions.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/README.md +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/basic.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/directives.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/markers.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/multilingual.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/parenthetical.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/spokenform_offsets.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v1/ssmd_breaks.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v2/directives.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v3/multilingual.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v3/ssmd_09_comprehensive.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/schema_history/v5/canonical_consumer_contract.toml +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_atomic_io.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_batch.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_boundaries.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_cli.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_cli_batch.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_cli_render_book.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_cli_ssmdbook.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_compiler.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_consumer_contract.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_consumer_readiness.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_coordinates.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_dependency_architecture.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_directives.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_explain.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_fake_renderer.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_flow_compilation.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_format.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_golden.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_identity_units.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_import_boundaries.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_language.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_linguistics.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_migration_framework.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_migration_v3_to_v4.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_migration_v4_to_v5.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_pauses.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_planner.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_preparation.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_preview.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_progress.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_public_identity.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderability.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderability_repair.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderplan_batch.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderplan_export.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderplan_replan.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_renderplan_v7_contract.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_replacement_provenance.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_schema_history.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_schema_registry.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_schema_strict.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_schema_v6_source.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_schema_v7.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_segment_topology.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_segmentation_adapter.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_segmentation_recovery.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_semantic_boundaries.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_sentence_topology.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_ssmd_09_parser.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_ssmd_substitution_preparation.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_ssmdbook.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_token_topology.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_toml_format.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_ttsready_preparation_adapter.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/tests/test_version.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/__main__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/atomic_io.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/attempt_serialization.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/attempts.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/batch.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/boundaries.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/codecs/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/codecs/v4_toml.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/codecs/v5_toml.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/codecs/v6_toml.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/codecs/v7_toml.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/compiler.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/config.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/diagnostics.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/directives.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/exceptions.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/explain.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/flow_projection.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/format.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/hashing.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/language.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/linguistics.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migration.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/registry.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/v1_to_v2.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/v2_to_v3.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/v3_to_v4.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/v4_to_v5.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/v5_to_v6.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/migrations/v6_to_v7.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/model.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/parsers.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/pauses.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/planner.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/preparation.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/preview.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/progress.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/py.typed +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/renderability.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/renderplan_batch.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/renderplan_export.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/renderplan_grouping.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/renderplan_projection.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/renderplan_replan.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/schema_registry.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/schemas/v1.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/schemas/v2.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/schemas/v3.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/schemas/v4.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/segmentation.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/serialization.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/spacy_models.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/spans.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/ssmdbook.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/document/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/document/plain.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/document/ssmd.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/preparation/__init__.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/preparation/identity.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/preparation/ssmd.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/preparation/ttsready.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/stages/protocols.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/token_topology.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/toml_codec.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/trace_codec.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/units.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/utterplan.schema.json +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan/versioning.py +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/dependency_links.txt +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/entry_points.txt +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/requires.txt +0 -0
- {utterplan-0.6.1 → utterplan-0.6.3}/utterplan.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
<!-- Generated by memoryledger. Do not edit directly. -->
|
|
4
|
+
<!-- Source: memoryledger records; regenerate with `memoryledger render` and `memoryledger export`. -->
|
|
5
|
+
|
|
6
|
+
## Project memory policy
|
|
7
|
+
|
|
8
|
+
This file contains reviewed long-term project memory.
|
|
9
|
+
|
|
10
|
+
## Rules
|
|
11
|
+
|
|
12
|
+
- UtterPlan is engine-independent. Core code must not import PyKokoro, PiperSynth, kokorog2p, piperg2p, ONNX Runtime, audio packages, or any consumer package.
|
|
13
|
+
- UtterPlan ends before G2P. Engine/model selection, synthesis, and audio composition happen downstream.
|
|
14
|
+
- `.utterplan.toml` schema v7 is the current inter-package contract; schema-v5/v6 TOML and historical JSON schemas v1–v4 remain sequential migration inputs only, and only the current schema version is natively supported.
|
|
15
|
+
- Python objects may not contain semantic state that cannot survive file roundtrip.
|
|
16
|
+
- Public FlowPlan objects contain no phonemes, model token IDs, models, sessions, or audio; completed plans must not retain spaCy or provider documents.
|
|
17
|
+
- Every offset has a documented coordinate space.
|
|
18
|
+
- Default planning is deterministic; the same source and configuration always produce the same executable plan and `plan_id`.
|
|
19
|
+
- Schema changes require explicit compatibility review, frozen historical fixture coverage, deterministic migration tests, and package artifact checks.
|
|
20
|
+
- Released schema files are immutable and retained under versioned paths; schemas v5, v6, and v7 have no JSON Schema resources.
|
|
21
|
+
- Every supported older schema must retain a sequential migration path to current (v1 through v6 feed v7).
|
|
22
|
+
- Migrations operate on serialized plain data and may not call parser, planner, G2P, renderer, or audio stages.
|
|
23
|
+
- Package version and schema version remain independent. Migration preserves a compiled plan; replanning is a separate operation.
|
|
24
|
+
- Optional compiler traces are sidecars; they must never alter executable plan content or identity.
|
|
25
|
+
- UtterPlan parses SSMD 0.9 only; it does not parse SSMD 0.8 or migrate source documents (`ssmd migrate` owns that).
|
|
26
|
+
- Book commands (`compile-book`, `render-book`) read the SSMDBook manifest only for chapter discovery, never modify the manifest or source chapters, write derived plans to separate directories, and never build book-level combined plans.
|
|
27
|
+
- RenderPlan projection is optional: VoiceRender creates and validates engine-backed RenderProfiles, while UtterPlan projects stored schema-v7 FlowPlans into profile-specific RenderPlans (with `renderplan-set.toml` and reports) and performs deterministic replan refinement only.
|
|
28
|
+
- UtterPlan depends directly on SSMD, PhraseSplit, TTSReady, and the renderplan contract package only; production code does not import Spokenform, and spaCy stays optional best-effort enrichment.
|
|
29
|
+
- Repository tests must be self-contained and must not require sibling consumer checkouts; consumer-specific compatibility testing belongs in the consumer repository.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: utterplan
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Summary: Engine-independent text-to-speech planning compiler and interchange format
|
|
5
5
|
Author-email: Holger Nahrstaedt <nahrstaedt@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -353,6 +353,41 @@ creates or refreshes engine-backed profiles, then preflights and renders the
|
|
|
353
353
|
resulting RenderPlans. The single-file `utterplan render-plan` command remains the
|
|
354
354
|
low-level projection and deterministic replan primitive.
|
|
355
355
|
|
|
356
|
+
When VoiceRender reports `preflight.replan`, use the new `replan-book` command to
|
|
357
|
+
refine the exact active chapter plan. The operation reads the RenderProfile snapshot
|
|
358
|
+
from the selected variant, writes a fingerprinted child RenderPlan, and updates only
|
|
359
|
+
that chapter's active set entry. It does not replace the parent plan or rerun initial
|
|
360
|
+
projection:
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# VoiceRender measures the active plans; suppose chapter 5 returns preflight.replan.
|
|
364
|
+
voicerender render-book . \
|
|
365
|
+
--variant narration4--28f616b6fe3b \
|
|
366
|
+
--chapters 5 \
|
|
367
|
+
--emphasis-policy defer-to-compose
|
|
368
|
+
|
|
369
|
+
utterplan replan-book . \
|
|
370
|
+
--variant narration4--28f616b6fe3b \
|
|
371
|
+
--chapters 5
|
|
372
|
+
|
|
373
|
+
# Measure/render the newly active child. Repeat these last two commands if it
|
|
374
|
+
# still reports preflight.replan; each cycle must use feedback for the active plan.
|
|
375
|
+
voicerender render-book . \
|
|
376
|
+
--variant narration4--28f616b6fe3b \
|
|
377
|
+
--chapters 5 \
|
|
378
|
+
--emphasis-policy defer-to-compose
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Use the exact variant directory name (including its profile fingerprint). `replan-book`
|
|
382
|
+
searches `preflight-recheck.toml` before `preflight.toml` and refuses stale feedback,
|
|
383
|
+
so a report for a parent can never be applied to its child. The single-file
|
|
384
|
+
`render-plan --previous ... --preflight ...` operation remains available for
|
|
385
|
+
low-level replanning.
|
|
386
|
+
|
|
387
|
+
This orchestration does not add a splitter, renderer-specific capacity estimate, or
|
|
388
|
+
engine dependency. VoiceRender supplies preflight measurements and remains responsible
|
|
389
|
+
for synthesis and audio composition.
|
|
390
|
+
|
|
356
391
|
Related packages: [RenderPlan](https://pypi.org/project/renderplan/) defines the
|
|
357
392
|
shared profile and plan contracts; [VoiceRender](https://pypi.org/project/voicerender/)
|
|
358
393
|
creates engine-backed profiles and performs preflight and synthesis.
|
|
@@ -109,6 +109,41 @@ creates or refreshes engine-backed profiles, then preflights and renders the
|
|
|
109
109
|
resulting RenderPlans. The single-file `utterplan render-plan` command remains the
|
|
110
110
|
low-level projection and deterministic replan primitive.
|
|
111
111
|
|
|
112
|
+
When VoiceRender reports `preflight.replan`, use the new `replan-book` command to
|
|
113
|
+
refine the exact active chapter plan. The operation reads the RenderProfile snapshot
|
|
114
|
+
from the selected variant, writes a fingerprinted child RenderPlan, and updates only
|
|
115
|
+
that chapter's active set entry. It does not replace the parent plan or rerun initial
|
|
116
|
+
projection:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# VoiceRender measures the active plans; suppose chapter 5 returns preflight.replan.
|
|
120
|
+
voicerender render-book . \
|
|
121
|
+
--variant narration4--28f616b6fe3b \
|
|
122
|
+
--chapters 5 \
|
|
123
|
+
--emphasis-policy defer-to-compose
|
|
124
|
+
|
|
125
|
+
utterplan replan-book . \
|
|
126
|
+
--variant narration4--28f616b6fe3b \
|
|
127
|
+
--chapters 5
|
|
128
|
+
|
|
129
|
+
# Measure/render the newly active child. Repeat these last two commands if it
|
|
130
|
+
# still reports preflight.replan; each cycle must use feedback for the active plan.
|
|
131
|
+
voicerender render-book . \
|
|
132
|
+
--variant narration4--28f616b6fe3b \
|
|
133
|
+
--chapters 5 \
|
|
134
|
+
--emphasis-policy defer-to-compose
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Use the exact variant directory name (including its profile fingerprint). `replan-book`
|
|
138
|
+
searches `preflight-recheck.toml` before `preflight.toml` and refuses stale feedback,
|
|
139
|
+
so a report for a parent can never be applied to its child. The single-file
|
|
140
|
+
`render-plan --previous ... --preflight ...` operation remains available for
|
|
141
|
+
low-level replanning.
|
|
142
|
+
|
|
143
|
+
This orchestration does not add a splitter, renderer-specific capacity estimate, or
|
|
144
|
+
engine dependency. VoiceRender supplies preflight measurements and remains responsible
|
|
145
|
+
for synthesis and audio composition.
|
|
146
|
+
|
|
112
147
|
Related packages: [RenderPlan](https://pypi.org/project/renderplan/) defines the
|
|
113
148
|
shared profile and plan contracts; [VoiceRender](https://pypi.org/project/voicerender/)
|
|
114
149
|
creates engine-backed profiles and performs preflight and synthesis.
|
|
@@ -4,6 +4,30 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [v0.6.3] - Unreleased
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added replan-book to refine active book RenderPlans from matching VoiceRender preflight feedback
|
|
12
|
+
|
|
13
|
+
<!-- generated by releaseledger -->
|
|
14
|
+
|
|
15
|
+
## [v0.6.2] - 2026-10-14
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Added public book compilation and RenderPlan projection services with safe chapter selection and per-chapter reporting
|
|
20
|
+
|
|
21
|
+
<!-- generated by releaseledger -->
|
|
22
|
+
|
|
23
|
+
## [0.6.1] - 2026-10-13
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
|
|
27
|
+
- Documented the arc42 system architecture, structure, and boundaries
|
|
28
|
+
|
|
29
|
+
<!-- generated by releaseledger -->
|
|
30
|
+
|
|
7
31
|
## [v0.6.0] - 2026-10-13
|
|
8
32
|
|
|
9
33
|
### Added
|
|
@@ -205,6 +205,76 @@ are rejected before chapter processing. Exit status is 0 when all selected
|
|
|
205
205
|
chapters succeed, 1 when any chapter fails, and 2 for usage or shared-configuration
|
|
206
206
|
errors. See the [SSMDBook workflow guide](ssmdbook.md) for end-to-end and multi-voice examples.
|
|
207
207
|
|
|
208
|
+
## Replan active RenderPlans for selected chapters
|
|
209
|
+
|
|
210
|
+
`replan-book` is the book/variant orchestration for VoiceRender's capacity feedback.
|
|
211
|
+
It loads the profile snapshot owned by the existing RenderPlanSet; callers must select
|
|
212
|
+
the exact variant directory, not supply another profile:
|
|
213
|
+
|
|
214
|
+
VoiceRender supplies capacity feedback: UtterPlan does not add renderer-specific
|
|
215
|
+
metrics, a splitter, engine selection, synthesis, or audio composition.
|
|
216
|
+
|
|
217
|
+
```text
|
|
218
|
+
utterplan replan-book INPUT --variant VARIANT [--chapters SELECTOR]
|
|
219
|
+
[--renderplan-root PATH] [--voicerender-root PATH] [--report PATH]
|
|
220
|
+
[--dry-run] [--fail-fast] [--explain] [--json]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Example repeatable lifecycle:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Initial projection and exact renderer preflight/render
|
|
227
|
+
utterplan render-book . --profile narration4.renderprofile.toml --variant narration4 --chapters 5
|
|
228
|
+
voicerender render-book . --variant narration4--28f616b6fe3b --chapters 5 \
|
|
229
|
+
--emphasis-policy defer-to-compose
|
|
230
|
+
|
|
231
|
+
# If VoiceRender returns preflight.replan, refine only the active chapter plan
|
|
232
|
+
utterplan replan-book . --variant narration4--28f616b6fe3b --chapters 5
|
|
233
|
+
|
|
234
|
+
# Preflight/render the new active plan; repeat replan-book and this command if needed
|
|
235
|
+
voicerender render-book . --variant narration4--28f616b6fe3b --chapters 5 \
|
|
236
|
+
--emphasis-policy defer-to-compose
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
`INPUT` is an SSMDBook root or its canonical `chapters/` directory. Chapter selectors
|
|
240
|
+
use manifest source numbers and retain manifest order. The default RenderPlan root is
|
|
241
|
+
`<book-root>/renderplan`; the default VoiceRender root is `<book-root>/voicerender`.
|
|
242
|
+
The command reads `<variant>/renderprofile.toml` and the selected active plan paths
|
|
243
|
+
from `renderplan-set.toml`. It discovers reports under
|
|
244
|
+
`<voicerender-root>/<variant>/<chapter-id>/`, preferring `preflight-recheck.toml`
|
|
245
|
+
over `preflight.toml` when both fully validate against the exact active RenderPlan.
|
|
246
|
+
|
|
247
|
+
Only a matching `status="replan"` report is accepted. Missing reports, stale parent
|
|
248
|
+
reports, mismatched profile/plan identities, and `ok`/`reject` statuses fail that
|
|
249
|
+
chapter; the command never falls back to an initial RenderPlan projection. A successful
|
|
250
|
+
replan writes a deterministic immutable child plan first, then atomically changes only
|
|
251
|
+
the selected chapter's active set entry. Parent plans, source UtterPlans, profile
|
|
252
|
+
identity, and unselected set entries remain unchanged. Run VoiceRender again after
|
|
253
|
+
each replan; repeat the two feedback steps until preflight is `ok`.
|
|
254
|
+
|
|
255
|
+
Defaults and behavior:
|
|
256
|
+
|
|
257
|
+
- `--variant` is required and must name the existing full variant directory, including
|
|
258
|
+
its profile fingerprint. The profile snapshot is loaded from that collection.
|
|
259
|
+
- `--chapters`: `all`, one source number, an inclusive range, or comma-separated
|
|
260
|
+
selections; default is `all`.
|
|
261
|
+
- `--renderplan-root` and `--voicerender-root` override the collection/data roots,
|
|
262
|
+
not the selected variant or chapter paths recorded by the contracts.
|
|
263
|
+
- `--report`: defaults to `<variant-dir>/replan-report.toml`; progress is persisted
|
|
264
|
+
after each chapter and the final report is marked complete.
|
|
265
|
+
- `--dry-run`: validates and plans children without writing child RenderPlans or
|
|
266
|
+
changing the set index. It writes the operational report and reports successful
|
|
267
|
+
items as `planned`.
|
|
268
|
+
- `--fail-fast`: later chapters are recorded as skipped after the first failure;
|
|
269
|
+
without it, later selected chapters continue.
|
|
270
|
+
- `--explain` uses the existing per-request RenderPlan explanation; `--json` emits
|
|
271
|
+
structured outcome paths, identities, replacement counts, errors, and optional
|
|
272
|
+
explanations.
|
|
273
|
+
|
|
274
|
+
Re-running with a stale report after activating a child fails with
|
|
275
|
+
`renderplan.replan.book.preflight_stale`. VoiceRender must first measure the active
|
|
276
|
+
child to produce its own matching feedback report.
|
|
277
|
+
|
|
208
278
|
## Explain a plan
|
|
209
279
|
|
|
210
280
|
Explain an existing compiled plan as a human-readable speech narrative:
|
|
@@ -187,6 +187,28 @@ from utterplan.renderplan_batch import RenderRequest, new_renderplan_set, render
|
|
|
187
187
|
|
|
188
188
|
`render_to_files()` projects schema-v7 `FlowPlan` inputs; grouping, source mapping, export, and replan logic remain UtterPlan-owned.
|
|
189
189
|
|
|
190
|
+
## Public SSMDBook services
|
|
191
|
+
|
|
192
|
+
`compile_book()` and `render_book()` are the public Python counterparts of the `compile-book` and `render-book` commands. They take paths and keyword options directly; callers do not construct `argparse.Namespace`, spawn a subprocess, or reproduce chapter selection, path safety, variant naming, snapshot/set initialization, or report logic. The CLI delegates to these same services.
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
from utterplan import compile_book, render_book
|
|
196
|
+
|
|
197
|
+
compiled = compile_book(".", chapters="5-17")
|
|
198
|
+
projected = render_book(
|
|
199
|
+
".",
|
|
200
|
+
profile="narration.renderprofile.toml",
|
|
201
|
+
chapters="5-17",
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
assert compiled.exit_code == projected.exit_code == 0
|
|
205
|
+
print(projected.variant) # resolved <label>--<profile fingerprint>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`BookCompileRequest` / `BookRenderRequest` are immutable option records. Their corresponding result records expose the workspace, selector, selected chapter IDs, artifact and report paths, per-chapter outcomes, `failed`, and `exit_code`; the render result also includes `profile_id`, `variant`, `variant_dir`, snapshot, and set paths. `variant` is authoritative: do not duplicate the label normalization or profile fingerprint algorithm downstream.
|
|
209
|
+
|
|
210
|
+
Optional `on_progress` callbacks receive the existing `CompileOutcome` or `RenderOutcome` for each chapter. Optional `on_start` callbacks receive a resolved book-start record before batch processing. Services do not print. They preserve schema-v7 output and CLI filesystem/report behavior; workspace/path safety errors raise `BookServiceError`, and chapter-level failures are returned as outcomes. Pass `language=` to provide the fallback/required-language override, or supply a `PlannerConfig` with `planner_config=`. See the [SSMDBook guide](ssmdbook) for layouts, safety rules, and CLI/Python examples.
|
|
211
|
+
|
|
190
212
|
## Planner progress callbacks
|
|
191
213
|
|
|
192
214
|
`UtterancePlanner.plan`, `UtterancePlanner.compile`, and `compile_document` accept an optional keyword-only `on_progress` callback. It receives typed `PlannerProgressEvent` objects synchronously in the planner thread. Progress is operational only: it is not added to `PlannerConfig` or the plan, and enabling a callback does not change plan identity or serialization.
|
|
@@ -137,3 +137,33 @@ the collection's snapshot remains available for inspection and reproducible
|
|
|
137
137
|
replanning. See the [CLI reference](cli.md#produce-renderplans-for-selected-ssmdbook-chapters),
|
|
138
138
|
[RenderPlan](https://pypi.org/project/renderplan/), and
|
|
139
139
|
[VoiceRender](https://pypi.org/project/voicerender/).
|
|
140
|
+
|
|
141
|
+
## Python API for SSMDBook workspaces
|
|
142
|
+
|
|
143
|
+
The Python API and CLI share the same book orchestration and artifact layout. The public services read the manifest for chapter discovery, select by original `source_number`, validate safe workspace paths, and write the same reports and per-chapter plans as the commands above. They do not print to the console or retain CLI argument objects.
|
|
144
|
+
|
|
145
|
+
CLI:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
utterplan compile-book . --chapters 5-17
|
|
149
|
+
utterplan render-book . --profile narration.renderprofile.toml --chapters 5-17
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Equivalent Python:
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from utterplan import compile_book, render_book
|
|
156
|
+
|
|
157
|
+
compiled = compile_book(".", chapters="5-17")
|
|
158
|
+
projected = render_book(
|
|
159
|
+
".",
|
|
160
|
+
profile="narration.renderprofile.toml",
|
|
161
|
+
chapters="5-17",
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
print(projected.variant) # exact profile-specific RenderPlan directory name
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
`BookCompileResult` and `BookRenderResult` expose the resolved workspace, selector, selected chapter IDs, artifact/report paths, per-chapter outcomes, `failed`, and `exit_code`. `BookRenderResult.variant` is the final sanitized label plus profile fingerprint; consumers should use it rather than reproduce the naming algorithm. Optional `on_progress` callbacks receive each compile or projection outcome, and `on_start` callbacks receive resolved selection and output metadata. A chapter must declare its language unless `language=` is explicitly supplied to `compile_book()`; compiler behavior can otherwise be configured with `planner_config=`. Invalid workspaces and unsafe paths raise `BookServiceError`, while ordinary per-chapter failures are represented in outcomes.
|
|
168
|
+
|
|
169
|
+
The public request models `BookCompileRequest` and `BookRenderRequest` capture the corresponding service options. These APIs remain engine-independent: they neither inspect TTS engines nor synthesize or compose audio.
|