utterplan 0.6.2__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.2 → utterplan-0.6.3}/PKG-INFO +36 -1
- {utterplan-0.6.2 → utterplan-0.6.3}/README.md +35 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/changelog.md +8 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/cli.md +70 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_book_api.py +44 -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.2 → utterplan-0.6.3}/utterplan/__init__.py +20 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/_version.py +3 -3
- utterplan-0.6.3/utterplan/book_replan.py +761 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/cli.py +204 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/PKG-INFO +36 -1
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/SOURCES.txt +3 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/scm_file_list.json +5 -0
- utterplan-0.6.3/utterplan.egg-info/scm_version.json +8 -0
- utterplan-0.6.2/utterplan.egg-info/scm_version.json +0 -8
- {utterplan-0.6.2 → utterplan-0.6.3}/.codecrate.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/.github/workflows/codecov.yml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/.github/workflows/pre-commit.yml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/.github/workflows/python-publish.yml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/.github/workflows/tests.yml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/.gitignore +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/.pre-commit-config.yaml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/AGENTS.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/LICENSE +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/MANIFEST.in +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/NOTICE +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/Makefile +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/architecture.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/conf.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/consumer-guide.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/coordinate-spaces.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/debugging.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/format.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/getting-started.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/index.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/make.bat +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/phase-a-completion.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/pykokoro-integration.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/python-api.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/requirements.txt +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/docs/ssmdbook.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/examples/basic.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/examples/chapter.ssmd +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/examples/compile_file.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/examples/inspect_plan.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/examples/multilingual.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/examples/ssmd_example.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/pyproject.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/setup.cfg +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/spec/schemas/v1.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/spec/schemas/v2.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/spec/schemas/v3.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/spec/schemas/v4.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/spec/utterplan.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/compiler_helpers.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/fixtures/canonical_consumer_contract.expected.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/fixtures/canonical_consumer_contract.ssmd +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/fixtures/ssmd_09_comprehensive.ssmd +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/basic_en.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/directives.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/markers.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/multilingual.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/parenthetical.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/spokenform_offsets.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/ssmd_09_comprehensive.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/golden/ssmd_breaks.utterplan.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/cases.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/basic_en.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/directives.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/markers.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/multilingual.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/parenthetical.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/spokenform_offsets.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/ssmd_09_comprehensive.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/fixtures/v4/ssmd_breaks.utterplan.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/goldens/multilingual_preparation.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/goldens/spokenform_numbers.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/goldens/ssmd_break.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/goldens/ssmd_language_detection.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/goldens/ssmd_marker.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/goldens/ssmd_pronunciation.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/test_legacy_json_import.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/migration/test_semantic_migration_regressions.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/README.md +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/basic.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/directives.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/markers.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/multilingual.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/parenthetical.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/spokenform_offsets.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v1/ssmd_breaks.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v2/directives.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v3/multilingual.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v3/ssmd_09_comprehensive.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/schema_history/v5/canonical_consumer_contract.toml +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_atomic_io.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_batch.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_boundaries.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_cli.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_cli_batch.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_cli_render_book.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_cli_ssmdbook.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_compiler.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_consumer_contract.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_consumer_readiness.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_coordinates.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_dependency_architecture.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_directives.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_explain.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_fake_renderer.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_flow_compilation.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_format.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_golden.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_identity_units.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_import_boundaries.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_language.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_linguistics.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_migration_framework.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_migration_v3_to_v4.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_migration_v4_to_v5.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_pauses.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_planner.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_preparation.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_preview.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_progress.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_public_identity.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderability.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderability_repair.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderplan_batch.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderplan_dependency_contract.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderplan_export.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderplan_replan.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_renderplan_v7_contract.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_replacement_provenance.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_schema_history.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_schema_registry.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_schema_strict.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_schema_v6_source.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_schema_v7.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_segment_topology.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_segmentation_adapter.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_segmentation_recovery.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_semantic_boundaries.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_sentence_topology.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_ssmd_09_parser.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_ssmd_substitution_preparation.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_ssmdbook.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_token_topology.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_toml_format.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_ttsready_preparation_adapter.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/tests/test_version.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/__main__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/atomic_io.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/attempt_serialization.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/attempts.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/batch.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/book.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/boundaries.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/codecs/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/codecs/v4_toml.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/codecs/v5_toml.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/codecs/v6_toml.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/codecs/v7_toml.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/compiler.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/config.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/diagnostics.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/directives.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/exceptions.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/explain.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/flow_projection.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/format.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/hashing.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/language.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/linguistics.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migration.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/registry.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/v1_to_v2.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/v2_to_v3.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/v3_to_v4.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/v4_to_v5.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/v5_to_v6.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/migrations/v6_to_v7.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/model.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/parsers.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/pauses.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/planner.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/preparation.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/preview.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/progress.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/py.typed +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/renderability.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/renderplan_batch.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/renderplan_export.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/renderplan_grouping.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/renderplan_projection.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/renderplan_replan.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/schema_registry.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/schemas/v1.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/schemas/v2.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/schemas/v3.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/schemas/v4.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/segmentation.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/serialization.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/spacy_models.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/spans.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/ssmdbook.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/document/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/document/plain.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/document/ssmd.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/preparation/__init__.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/preparation/identity.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/preparation/ssmd.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/preparation/ttsready.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/stages/protocols.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/token_topology.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/toml_codec.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/trace_codec.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/units.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/utterplan.schema.json +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan/versioning.py +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/dependency_links.txt +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/entry_points.txt +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/requires.txt +0 -0
- {utterplan-0.6.2 → utterplan-0.6.3}/utterplan.egg-info/top_level.txt +0 -0
|
@@ -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,14 @@
|
|
|
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
|
+
|
|
7
15
|
## [v0.6.2] - 2026-10-14
|
|
8
16
|
|
|
9
17
|
### 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:
|
|
@@ -16,9 +16,15 @@ from utterplan import (
|
|
|
16
16
|
BookCompileResult,
|
|
17
17
|
BookRenderRequest,
|
|
18
18
|
BookRenderResult,
|
|
19
|
+
BookReplanError,
|
|
20
|
+
BookReplanRequest,
|
|
21
|
+
BookReplanResult,
|
|
22
|
+
BookReplanStart,
|
|
19
23
|
BookServiceError,
|
|
24
|
+
ReplanOutcome,
|
|
20
25
|
compile_book,
|
|
21
26
|
render_book,
|
|
27
|
+
replan_book,
|
|
22
28
|
)
|
|
23
29
|
from utterplan.config import LinguisticsConfig, PlannerConfig
|
|
24
30
|
from utterplan.model import FlowPlan
|
|
@@ -95,9 +101,47 @@ def test_public_request_and_result_models_are_available_at_package_root() -> Non
|
|
|
95
101
|
selected_chapter_ids=(),
|
|
96
102
|
outcomes=(),
|
|
97
103
|
)
|
|
104
|
+
replan_request = BookReplanRequest(Path("book"), variant="narration--abc")
|
|
105
|
+
replan_outcome = ReplanOutcome(
|
|
106
|
+
index=1,
|
|
107
|
+
id="chapter-0005",
|
|
108
|
+
source_number=5,
|
|
109
|
+
status="failed",
|
|
110
|
+
utterplan=None,
|
|
111
|
+
previous_renderplan=None,
|
|
112
|
+
previous_render_plan_id=None,
|
|
113
|
+
preflight=None,
|
|
114
|
+
)
|
|
115
|
+
replan_result = BookReplanResult(
|
|
116
|
+
workspace=Path("book"),
|
|
117
|
+
variant="narration--abc",
|
|
118
|
+
variant_dir=Path("book/renderplan/narration--abc"),
|
|
119
|
+
set_path=Path("book/renderplan/narration--abc/renderplan-set.toml"),
|
|
120
|
+
profile_path=Path("book/renderplan/narration--abc/renderprofile.toml"),
|
|
121
|
+
report_path=Path("book/renderplan/narration--abc/replan-report.toml"),
|
|
122
|
+
selected_chapter_ids=("chapter-0005",),
|
|
123
|
+
dry_run=False,
|
|
124
|
+
outcomes=(replan_outcome,),
|
|
125
|
+
)
|
|
126
|
+
replan_start = BookReplanStart(
|
|
127
|
+
workspace=Path("book"),
|
|
128
|
+
chapter_selector="5",
|
|
129
|
+
selected_chapter_ids=("chapter-0005",),
|
|
130
|
+
variant="narration--abc",
|
|
131
|
+
variant_dir=replan_result.variant_dir,
|
|
132
|
+
set_path=replan_result.set_path,
|
|
133
|
+
profile_path=replan_result.profile_path,
|
|
134
|
+
voicerender_dir=Path("book/voicerender/narration--abc"),
|
|
135
|
+
report_path=replan_result.report_path,
|
|
136
|
+
)
|
|
98
137
|
assert compile_request.book == Path("book")
|
|
99
138
|
assert render_request.profile == Path("profile.renderprofile.toml")
|
|
100
139
|
assert compile_result.exit_code == render_result.exit_code == 0
|
|
140
|
+
assert replan_request.book == Path("book")
|
|
141
|
+
assert replan_result.exit_code == 1 and replan_result.failed == 1
|
|
142
|
+
assert replan_start.variant == replan_request.variant
|
|
143
|
+
assert callable(replan_book)
|
|
144
|
+
assert issubclass(BookReplanError, BookServiceError)
|
|
101
145
|
assert compile_result.failed == render_result.failed == 0
|
|
102
146
|
|
|
103
147
|
|