utterplan 0.2.0__tar.gz → 0.3.1__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.2.0 → utterplan-0.3.1}/.github/workflows/python-publish.yml +19 -9
- utterplan-0.3.1/.github/workflows/tests.yml +177 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +12 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/audit/commit-audit.yaml +148 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0001.md +85 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0002.md +29 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0003.md +32 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0004.md +28 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0005.md +30 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0006.md +29 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/release.md +27 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.1/audit/commit-audit.yaml +57 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.1/entries/entry-0001.md +42 -0
- utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.1/release.md +27 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.0/audit-decisions.yaml +72 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.0/audit.yaml +85 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.0/entries.yaml +160 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.0/evidence/49023f0.patch +6377 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.0/evidence/manifest.json +81 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.0/range.json +13 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.1/audit-decisions.yaml +23 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.1/audit.yaml +40 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.1/entries.yaml +37 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.1/evidence/70adac0.patch +916 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.1/evidence/manifest.json +36 -0
- utterplan-0.3.1/.ledger/releaseledger/work/0.3.1/range.json +13 -0
- utterplan-0.3.1/01_todo.md +1796 -0
- {utterplan-0.2.0/utterplan.egg-info → utterplan-0.3.1}/PKG-INFO +34 -8
- {utterplan-0.2.0 → utterplan-0.3.1}/README.md +31 -6
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/architecture.md +8 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/changelog.md +30 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/cli.md +21 -6
- utterplan-0.3.1/docs/consumer-guide.md +130 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/coordinate-spaces.md +2 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/debugging.md +3 -1
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/format.md +8 -9
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/getting-started.md +7 -3
- utterplan-0.3.1/docs/python-api.md +187 -0
- utterplan-0.3.1/examples/chapter.ssmd +7 -0
- utterplan-0.3.1/plan.md +111 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/pyproject.toml +2 -1
- utterplan-0.3.1/spec/schemas/v3.schema.json +407 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/spec/utterplan.schema.json +104 -8
- utterplan-0.3.1/tests/fixtures/ssmd_09_comprehensive.ssmd +45 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/golden/basic_en.utterplan.json +3 -5
- utterplan-0.3.1/tests/golden/directives.utterplan.json +176 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/golden/markers.utterplan.json +3 -5
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/golden/multilingual.utterplan.json +3 -5
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/golden/parenthetical.utterplan.json +3 -5
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/golden/spokenform_offsets.utterplan.json +3 -5
- utterplan-0.3.1/tests/golden/ssmd_09_comprehensive.utterplan.json +1669 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/golden/ssmd_breaks.utterplan.json +3 -5
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/migration/cases.py +23 -7
- utterplan-0.3.1/tests/migration/goldens/multilingual_preparation.json +132 -0
- utterplan-0.3.1/tests/migration/goldens/spokenform_numbers.json +86 -0
- utterplan-0.3.1/tests/migration/goldens/ssmd_break.json +96 -0
- utterplan-0.3.1/tests/migration/goldens/ssmd_language_detection.json +77 -0
- utterplan-0.3.1/tests/migration/goldens/ssmd_marker.json +102 -0
- utterplan-0.3.1/tests/migration/goldens/ssmd_pronunciation.json +103 -0
- utterplan-0.3.1/tests/schema_history/README.md +9 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_boundaries.py +6 -2
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_cli.py +13 -6
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_consumer_contract.py +45 -11
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_consumer_readiness.py +119 -35
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_coordinates.py +6 -4
- utterplan-0.3.1/tests/test_directives.py +189 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_explain.py +34 -3
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_fake_renderer.py +30 -2
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_format.py +19 -1
- utterplan-0.3.1/tests/test_golden.py +59 -0
- utterplan-0.3.1/tests/test_identity_units.py +42 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_linguistics.py +116 -28
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_migration_framework.py +35 -4
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_pauses.py +31 -5
- utterplan-0.3.1/tests/test_planner.py +268 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_preparation.py +28 -7
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_public_identity.py +3 -1
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_schema_history.py +30 -3
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_schema_registry.py +11 -6
- utterplan-0.3.1/tests/test_ssmd_09_parser.py +261 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/__init__.py +6 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/_version.py +3 -3
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/cli.py +22 -5
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/config.py +11 -16
- utterplan-0.3.1/utterplan/directives.py +206 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/explain.py +112 -16
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/language.py +25 -11
- utterplan-0.3.1/utterplan/migrations/__init__.py +12 -0
- utterplan-0.3.1/utterplan/migrations/v2_to_v3.py +35 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/model.py +132 -21
- utterplan-0.3.1/utterplan/parsers.py +412 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/pauses.py +11 -1
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/planner.py +378 -50
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/preparation.py +5 -2
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/schema_registry.py +1 -0
- utterplan-0.3.1/utterplan/schemas/v3.schema.json +407 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/utterplan.schema.json +104 -8
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/versioning.py +2 -2
- {utterplan-0.2.0 → utterplan-0.3.1/utterplan.egg-info}/PKG-INFO +34 -8
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan.egg-info/SOURCES.txt +33 -3
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan.egg-info/requires.txt +1 -1
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan.egg-info/scm_file_list.json +32 -2
- utterplan-0.3.1/utterplan.egg-info/scm_version.json +8 -0
- utterplan-0.2.0/.github/workflows/tests.yml +0 -97
- utterplan-0.2.0/docs/consumer-guide.md +0 -85
- utterplan-0.2.0/docs/python-api.md +0 -88
- utterplan-0.2.0/examples/chapter.ssmd +0 -1
- utterplan-0.2.0/tests/migration/goldens/multilingual_preparation.json +0 -29
- utterplan-0.2.0/tests/migration/goldens/spokenform_numbers.json +0 -6
- utterplan-0.2.0/tests/migration/goldens/ssmd_break.json +0 -47
- utterplan-0.2.0/tests/migration/goldens/ssmd_language_detection.json +0 -4
- utterplan-0.2.0/tests/migration/goldens/ssmd_marker.json +0 -15
- utterplan-0.2.0/tests/migration/goldens/ssmd_pronunciation.json +0 -35
- utterplan-0.2.0/tests/schema_history/README.md +0 -10
- utterplan-0.2.0/tests/test_directives.py +0 -97
- utterplan-0.2.0/tests/test_golden.py +0 -16
- utterplan-0.2.0/tests/test_identity_units.py +0 -16
- utterplan-0.2.0/tests/test_planner.py +0 -50
- utterplan-0.2.0/utterplan/directives.py +0 -95
- utterplan-0.2.0/utterplan/migrations/__init__.py +0 -6
- utterplan-0.2.0/utterplan/parsers.py +0 -309
- utterplan-0.2.0/utterplan/stages/segmentation/__init__.py +0 -0
- utterplan-0.2.0/utterplan/stages/segmentation/phrasplit.py +0 -35
- utterplan-0.2.0/utterplan.egg-info/scm_version.json +0 -8
- {utterplan-0.2.0 → utterplan-0.3.1}/.codecrate.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.github/workflows/codecov.yml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.github/workflows/pre-commit.yml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.gitignore +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/ledger.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/.ledger-project.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/config.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0001.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0002.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0003.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0004.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/release.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/entries/entry-0001.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/release.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/audit/commit-audit.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0001.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0002.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0003.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0004.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0005.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0006.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/release.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/audit/commit-audit.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0001.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0002.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0003.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0004.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/release.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/audit-decisions.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/audit.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/entries.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/evidence/2c64e29.patch +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/evidence/4022753.patch +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/evidence/66a88b6.patch +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/evidence/manifest.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.1.2/range.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/audit-decisions.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/audit.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/entries.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/evidence/9637182.patch +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/evidence/c52aa68.patch +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/evidence/e49a6dd.patch +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/evidence/manifest.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/work/0.2.0/range.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/write.lock +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/taskledger/.ledger-project.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.ledger/taskledger/config.toml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/.pre-commit-config.yaml +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/AGENTS.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/LICENSE +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/NOTICE +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/Makefile +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/conf.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/index.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/make.bat +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/phase-a-completion.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/pykokoro-integration.md +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/docs/requirements.txt +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/examples/basic.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/examples/compile_file.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/examples/inspect_plan.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/examples/multilingual.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/examples/ssmd_example.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/setup.cfg +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/spec/schemas/v1.schema.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/spec/schemas/v2.schema.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/__init__.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/migration/__init__.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/migration/test_semantic_migration_regressions.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/basic.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/directives.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/markers.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/multilingual.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/parenthetical.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/spokenform_offsets.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/schema_history/v1/ssmd_breaks.json +0 -0
- /utterplan-0.2.0/tests/golden/directives.utterplan.json → /utterplan-0.3.1/tests/schema_history/v2/directives.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_import_boundaries.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_language.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_schema_strict.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/tests/test_version.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/__main__.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/diagnostics.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/exceptions.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/format.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/hashing.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/linguistics.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/migration.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/migrations/registry.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/migrations/v1_to_v2.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/py.typed +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/schemas/v1.schema.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/schemas/v2.schema.json +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/serialization.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/spacy_models.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/spans.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/__init__.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/document/__init__.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/document/plain.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/document/ssmd.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/preparation/__init__.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/preparation/identity.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/preparation/spokenform.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/stages/protocols.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan/units.py +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan.egg-info/dependency_links.txt +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan.egg-info/entry_points.txt +0 -0
- {utterplan-0.2.0 → utterplan-0.3.1}/utterplan.egg-info/top_level.txt +0 -0
|
@@ -45,18 +45,21 @@ jobs:
|
|
|
45
45
|
from packaging.requirements import Requirement
|
|
46
46
|
from packaging.version import Version
|
|
47
47
|
|
|
48
|
-
def
|
|
48
|
+
def has_range(requirements, name, minimum, maximum):
|
|
49
49
|
minimum_version = Version(minimum)
|
|
50
|
+
maximum_version = Version(maximum)
|
|
50
51
|
return any(
|
|
51
52
|
requirement.name == name
|
|
52
53
|
and any(
|
|
53
|
-
spec.operator
|
|
54
|
-
|
|
54
|
+
spec.operator == ">=" and Version(spec.version) == minimum_version
|
|
55
|
+
for spec in requirement.specifier
|
|
56
|
+
)
|
|
57
|
+
and any(
|
|
58
|
+
spec.operator == "<" and Version(spec.version) == maximum_version
|
|
55
59
|
for spec in requirement.specifier
|
|
56
60
|
)
|
|
57
61
|
for requirement in requirements
|
|
58
62
|
)
|
|
59
|
-
|
|
60
63
|
tag_version = os.environ["RELEASE_TAG"].removeprefix("v")
|
|
61
64
|
artifacts = list(Path("dist").iterdir())
|
|
62
65
|
wheels = [path for path in artifacts if path.suffix == ".whl"]
|
|
@@ -76,11 +79,18 @@ jobs:
|
|
|
76
79
|
requirements = [
|
|
77
80
|
Requirement(value) for value in metadata.get_all("Requires-Dist", [])
|
|
78
81
|
]
|
|
79
|
-
assert
|
|
80
|
-
assert
|
|
81
|
-
assert
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
assert has_range(requirements, "phrasplit", "0.3.9", "0.4")
|
|
83
|
+
assert has_range(requirements, "ssmd", "0.9.0", "0.10")
|
|
84
|
+
assert has_range(requirements, "spokenform", "0.4.3", "0.5")
|
|
85
|
+
names = set(archive.namelist())
|
|
86
|
+
expected = {
|
|
87
|
+
"utterplan/py.typed",
|
|
88
|
+
"utterplan/utterplan.schema.json",
|
|
89
|
+
"utterplan/schemas/v1.schema.json",
|
|
90
|
+
"utterplan/schemas/v2.schema.json",
|
|
91
|
+
"utterplan/schemas/v3.schema.json",
|
|
92
|
+
}
|
|
93
|
+
assert expected <= names
|
|
84
94
|
PY
|
|
85
95
|
|
|
86
96
|
- name: Publish package to PyPI
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
name: Run tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
workflow_call:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
14
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: ${{ matrix.python-version }}
|
|
21
|
+
- name: Install package
|
|
22
|
+
run: |
|
|
23
|
+
python -m pip install --upgrade pip
|
|
24
|
+
python -m pip install -e ".[dev]"
|
|
25
|
+
python -m compileall -q utterplan tests
|
|
26
|
+
- name: Type-check package
|
|
27
|
+
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.13'
|
|
28
|
+
run: python -m mypy utterplan
|
|
29
|
+
- name: Lint package
|
|
30
|
+
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.13'
|
|
31
|
+
run: python -m ruff check .
|
|
32
|
+
- name: Run tests
|
|
33
|
+
run: python -m pytest -q
|
|
34
|
+
|
|
35
|
+
lower-bounds:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
- name: Set up Python
|
|
40
|
+
uses: actions/setup-python@v5
|
|
41
|
+
with:
|
|
42
|
+
python-version: "3.10"
|
|
43
|
+
- name: Install lower-bound dependencies
|
|
44
|
+
run: |
|
|
45
|
+
python -m pip install --upgrade pip
|
|
46
|
+
python -m pip install pytest jsonschema
|
|
47
|
+
python -m pip install \
|
|
48
|
+
"phrasplit==0.3.9" \
|
|
49
|
+
"ssmd==0.9.0" \
|
|
50
|
+
"spokenform==0.4.3" \
|
|
51
|
+
"typing_extensions>=4.0"
|
|
52
|
+
python -m pip install --no-deps -e .
|
|
53
|
+
- name: Run lower-bound tests
|
|
54
|
+
run: python -m pytest -q
|
|
55
|
+
|
|
56
|
+
package-smoke:
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@v4
|
|
60
|
+
- name: Set up Python
|
|
61
|
+
uses: actions/setup-python@v5
|
|
62
|
+
with:
|
|
63
|
+
python-version: "3.12"
|
|
64
|
+
- name: Build wheel and sdist
|
|
65
|
+
run: |
|
|
66
|
+
python -m pip install --upgrade pip build
|
|
67
|
+
python -m build --outdir "$RUNNER_TEMP/dist"
|
|
68
|
+
- name: Verify wheel and sdist contents and dependency metadata
|
|
69
|
+
run: |
|
|
70
|
+
python - <<'PY'
|
|
71
|
+
import os
|
|
72
|
+
import tarfile
|
|
73
|
+
from email import policy
|
|
74
|
+
from email.parser import Parser
|
|
75
|
+
from pathlib import Path
|
|
76
|
+
from zipfile import ZipFile
|
|
77
|
+
|
|
78
|
+
from packaging.requirements import Requirement
|
|
79
|
+
from packaging.version import Version
|
|
80
|
+
|
|
81
|
+
artifacts = Path(os.environ["RUNNER_TEMP"]) / "dist"
|
|
82
|
+
wheel = next(artifacts.glob("*.whl"))
|
|
83
|
+
sdist = next(artifacts.glob("*.tar.gz"))
|
|
84
|
+
expected = {
|
|
85
|
+
"utterplan/py.typed",
|
|
86
|
+
"utterplan/utterplan.schema.json",
|
|
87
|
+
"utterplan/schemas/v1.schema.json",
|
|
88
|
+
"utterplan/schemas/v2.schema.json",
|
|
89
|
+
"utterplan/schemas/v3.schema.json",
|
|
90
|
+
}
|
|
91
|
+
expected_ranges = {
|
|
92
|
+
"phrasplit": ("0.3.9", "0.4"),
|
|
93
|
+
"ssmd": ("0.9.0", "0.10"),
|
|
94
|
+
"spokenform": ("0.4.3", "0.5"),
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
def check_metadata(contents):
|
|
98
|
+
metadata = Parser(policy=policy.default).parsestr(contents)
|
|
99
|
+
requirements = metadata.get_all("Requires-Dist", [])
|
|
100
|
+
for name, (minimum, maximum) in expected_ranges.items():
|
|
101
|
+
requirement = next(
|
|
102
|
+
Requirement(value)
|
|
103
|
+
for value in requirements
|
|
104
|
+
if Requirement(value).name == name
|
|
105
|
+
)
|
|
106
|
+
assert any(
|
|
107
|
+
spec.operator == ">=" and Version(spec.version) == Version(minimum)
|
|
108
|
+
for spec in requirement.specifier
|
|
109
|
+
), (name, requirement)
|
|
110
|
+
assert any(
|
|
111
|
+
spec.operator == "<" and Version(spec.version) == Version(maximum)
|
|
112
|
+
for spec in requirement.specifier
|
|
113
|
+
), (name, requirement)
|
|
114
|
+
|
|
115
|
+
with ZipFile(wheel) as archive:
|
|
116
|
+
wheel_names = set(archive.namelist())
|
|
117
|
+
assert expected <= wheel_names
|
|
118
|
+
metadata_name = next(
|
|
119
|
+
name for name in wheel_names if name.endswith("METADATA")
|
|
120
|
+
)
|
|
121
|
+
check_metadata(archive.read(metadata_name).decode("utf-8"))
|
|
122
|
+
|
|
123
|
+
with tarfile.open(sdist, "r:gz") as archive:
|
|
124
|
+
sdist_names = archive.getnames()
|
|
125
|
+
assert all(
|
|
126
|
+
any(name.endswith(resource) for name in sdist_names)
|
|
127
|
+
for resource in expected
|
|
128
|
+
)
|
|
129
|
+
metadata_name = next(
|
|
130
|
+
name for name in sdist_names if name.endswith("PKG-INFO")
|
|
131
|
+
)
|
|
132
|
+
check_metadata(
|
|
133
|
+
archive.extractfile(metadata_name).read().decode("utf-8")
|
|
134
|
+
)
|
|
135
|
+
PY
|
|
136
|
+
- name: Install wheel in clean environment
|
|
137
|
+
run: |
|
|
138
|
+
python -m venv "$RUNNER_TEMP/utterplan-wheel-venv"
|
|
139
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/python" -m pip install \
|
|
140
|
+
"$RUNNER_TEMP"/dist/utterplan-*.whl
|
|
141
|
+
- name: Run installed smoke checks
|
|
142
|
+
run: |
|
|
143
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/python" -c \
|
|
144
|
+
"import importlib.metadata as m; import utterplan; assert m.version('utterplan') == utterplan.__version__"
|
|
145
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" --version
|
|
146
|
+
cat > "$RUNNER_TEMP/test.ssmd.md" <<'EOF'
|
|
147
|
+
---
|
|
148
|
+
ssmd_version: "0.9"
|
|
149
|
+
language: en-US
|
|
150
|
+
pause_defaults:
|
|
151
|
+
sentence: 500ms
|
|
152
|
+
---
|
|
153
|
+
[Hello]{voice-name="test"} ...200ms world.
|
|
154
|
+
EOF
|
|
155
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" compile \
|
|
156
|
+
"$RUNNER_TEMP/test.ssmd.md" --lang en-us --text-preparation identity --json \
|
|
157
|
+
> "$RUNNER_TEMP/test.utterplan.json"
|
|
158
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" validate \
|
|
159
|
+
"$RUNNER_TEMP/test.utterplan.json"
|
|
160
|
+
cat > "$RUNNER_TEMP/test-0.8.ssmd.md" <<'EOF'
|
|
161
|
+
---
|
|
162
|
+
ssmd_version: "0.8"
|
|
163
|
+
---
|
|
164
|
+
Hello.
|
|
165
|
+
EOF
|
|
166
|
+
if "$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" compile \
|
|
167
|
+
"$RUNNER_TEMP/test-0.8.ssmd.md" --lang en-us --text-preparation identity --json \
|
|
168
|
+
> "$RUNNER_TEMP/test-0.8.out" 2>&1; then
|
|
169
|
+
cat "$RUNNER_TEMP/test-0.8.out"
|
|
170
|
+
echo "Installed wheel accepted an SSMD 0.8 document" >&2
|
|
171
|
+
exit 1
|
|
172
|
+
fi
|
|
173
|
+
grep -q "header.version_unsupported" "$RUNNER_TEMP/test-0.8.out"
|
|
174
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" migrate \
|
|
175
|
+
"$GITHUB_WORKSPACE/tests/schema_history/v1/basic.json" --check
|
|
176
|
+
"$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" inspect \
|
|
177
|
+
"$RUNNER_TEMP/test.utterplan.json" --segment 0
|
{utterplan-0.2.0 → utterplan-0.3.1}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl
RENAMED
|
@@ -36,3 +36,15 @@
|
|
|
36
36
|
{"data":{"updated_rows":3},"event":"audit.updated","event_id":"event-0036","record_revisions":{"commit_audit_sheet":3},"release_version":"0.2.0","schema_version":2}
|
|
37
37
|
{"data":{"entry_ids":["entry-0001","entry-0002","entry-0003","entry-0004"],"synced_audit_rows":3},"event":"entry.batch_added","event_id":"event-0037","record_revisions":{"commit_audit_sheet":4,"entry:0.2.0/entry-0001":1,"entry:0.2.0/entry-0002":1,"entry:0.2.0/entry-0003":1,"entry:0.2.0/entry-0004":1,"release:0.2.0":3},"release_version":"0.2.0","schema_version":2}
|
|
38
38
|
{"data":{"released_at":"2026-09-22"},"event":"release.finalized","event_id":"event-0038","record_revisions":{"release:0.2.0":4},"release_version":"0.2.0","schema_version":2}
|
|
39
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0039","record_revisions":{"release:0.3.0":1},"release_version":"0.3.0","schema_version":2}
|
|
40
|
+
{"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-0040","record_revisions":{"release:0.3.0":2},"release_version":"0.3.0","schema_version":2}
|
|
41
|
+
{"data":{"row_count":1},"event":"audit.created","event_id":"event-0041","record_revisions":{"commit_audit_sheet":1},"release_version":"0.3.0","schema_version":2}
|
|
42
|
+
{"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0042","record_revisions":{"commit_audit_sheet":2},"release_version":"0.3.0","schema_version":2}
|
|
43
|
+
{"data":{"entry_ids":["entry-0001","entry-0002","entry-0003","entry-0004","entry-0005","entry-0006"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0043","record_revisions":{"commit_audit_sheet":3,"entry:0.3.0/entry-0001":1,"entry:0.3.0/entry-0002":1,"entry:0.3.0/entry-0003":1,"entry:0.3.0/entry-0004":1,"entry:0.3.0/entry-0005":1,"entry:0.3.0/entry-0006":1,"release:0.3.0":3},"release_version":"0.3.0","schema_version":2}
|
|
44
|
+
{"data":{"released_at":"2026-09-24"},"event":"release.finalized","event_id":"event-0044","record_revisions":{"release:0.3.0":4},"release_version":"0.3.0","schema_version":2}
|
|
45
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0045","record_revisions":{"release:0.3.1":1},"release_version":"0.3.1","schema_version":2}
|
|
46
|
+
{"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-0046","record_revisions":{"release:0.3.1":2},"release_version":"0.3.1","schema_version":2}
|
|
47
|
+
{"data":{"row_count":1},"event":"audit.created","event_id":"event-0047","record_revisions":{"commit_audit_sheet":1},"release_version":"0.3.1","schema_version":2}
|
|
48
|
+
{"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0048","record_revisions":{"commit_audit_sheet":2},"release_version":"0.3.1","schema_version":2}
|
|
49
|
+
{"data":{"entry_ids":["entry-0001"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0049","record_revisions":{"commit_audit_sheet":3,"entry:0.3.1/entry-0001":1,"release:0.3.1":3},"release_version":"0.3.1","schema_version":2}
|
|
50
|
+
{"data":{"released_at":"2026-09-27"},"event":"release.finalized","event_id":"event-0050","record_revisions":{"release:0.3.1":4},"release_version":"0.3.1","schema_version":2}
|
utterplan-0.3.1/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/audit/commit-audit.yaml
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 3
|
|
6
|
+
release_version: 0.3.0
|
|
7
|
+
git_base_ref: v0.2.0
|
|
8
|
+
git_base_sha: 215d3a4b43ccaadbf50cb40b752ae30a5b4f39e5
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: 49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
11
|
+
git_range: 215d3a4b43ccaadbf50cb40b752ae30a5b4f39e5..49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
12
|
+
commit_count: 1
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
15
|
+
source_ref: git:49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
16
|
+
short_sha: 49023f0
|
|
17
|
+
changed_paths:
|
|
18
|
+
- .github/workflows/tests.yml
|
|
19
|
+
- README.md
|
|
20
|
+
- docs/architecture.md
|
|
21
|
+
- docs/cli.md
|
|
22
|
+
- docs/consumer-guide.md
|
|
23
|
+
- docs/coordinate-spaces.md
|
|
24
|
+
- docs/debugging.md
|
|
25
|
+
- docs/format.md
|
|
26
|
+
- docs/getting-started.md
|
|
27
|
+
- docs/python-api.md
|
|
28
|
+
- examples/chapter.ssmd
|
|
29
|
+
- pyproject.toml
|
|
30
|
+
- spec/schemas/v3.schema.json
|
|
31
|
+
- spec/utterplan.schema.json
|
|
32
|
+
- tests/fixtures/ssmd_09_comprehensive.ssmd
|
|
33
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
34
|
+
- tests/migration/cases.py
|
|
35
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
36
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
37
|
+
- tests/migration/goldens/ssmd_break.json
|
|
38
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
39
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
40
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
41
|
+
- tests/schema_history/README.md
|
|
42
|
+
- tests/schema_history/v2/directives.json
|
|
43
|
+
- tests/test_cli.py
|
|
44
|
+
- tests/test_consumer_contract.py
|
|
45
|
+
- tests/test_consumer_readiness.py
|
|
46
|
+
- tests/test_coordinates.py
|
|
47
|
+
- tests/test_directives.py
|
|
48
|
+
- tests/test_explain.py
|
|
49
|
+
- tests/test_fake_renderer.py
|
|
50
|
+
- tests/test_format.py
|
|
51
|
+
- tests/test_golden.py
|
|
52
|
+
- tests/test_migration_framework.py
|
|
53
|
+
- tests/test_preparation.py
|
|
54
|
+
- tests/test_public_identity.py
|
|
55
|
+
- tests/test_schema_history.py
|
|
56
|
+
- tests/test_schema_registry.py
|
|
57
|
+
- tests/test_ssmd_09_parser.py
|
|
58
|
+
- utterplan/__init__.py
|
|
59
|
+
- utterplan/cli.py
|
|
60
|
+
- utterplan/directives.py
|
|
61
|
+
- utterplan/explain.py
|
|
62
|
+
- utterplan/language.py
|
|
63
|
+
- utterplan/migrations/__init__.py
|
|
64
|
+
- utterplan/migrations/v2_to_v3.py
|
|
65
|
+
- utterplan/model.py
|
|
66
|
+
- utterplan/parsers.py
|
|
67
|
+
- utterplan/pauses.py
|
|
68
|
+
- utterplan/planner.py
|
|
69
|
+
- utterplan/preparation.py
|
|
70
|
+
- utterplan/schema_registry.py
|
|
71
|
+
- utterplan/schemas/v3.schema.json
|
|
72
|
+
- utterplan/stages/segmentation/phrasplit.py
|
|
73
|
+
- utterplan/utterplan.schema.json
|
|
74
|
+
- utterplan/versioning.py
|
|
75
|
+
stats:
|
|
76
|
+
files_changed: 57
|
|
77
|
+
insertions: 4920
|
|
78
|
+
deletions: 507
|
|
79
|
+
inspected: true
|
|
80
|
+
inspected_paths:
|
|
81
|
+
- .github/workflows/tests.yml
|
|
82
|
+
- README.md
|
|
83
|
+
- docs/architecture.md
|
|
84
|
+
- docs/cli.md
|
|
85
|
+
- docs/consumer-guide.md
|
|
86
|
+
- docs/coordinate-spaces.md
|
|
87
|
+
- docs/debugging.md
|
|
88
|
+
- docs/format.md
|
|
89
|
+
- docs/getting-started.md
|
|
90
|
+
- docs/python-api.md
|
|
91
|
+
- examples/chapter.ssmd
|
|
92
|
+
- pyproject.toml
|
|
93
|
+
- spec/schemas/v3.schema.json
|
|
94
|
+
- spec/utterplan.schema.json
|
|
95
|
+
- tests/fixtures/ssmd_09_comprehensive.ssmd
|
|
96
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
97
|
+
- tests/migration/cases.py
|
|
98
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
99
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
100
|
+
- tests/migration/goldens/ssmd_break.json
|
|
101
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
102
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
103
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
104
|
+
- tests/schema_history/README.md
|
|
105
|
+
- tests/schema_history/v2/directives.json
|
|
106
|
+
- tests/test_cli.py
|
|
107
|
+
- tests/test_consumer_contract.py
|
|
108
|
+
- tests/test_consumer_readiness.py
|
|
109
|
+
- tests/test_coordinates.py
|
|
110
|
+
- tests/test_directives.py
|
|
111
|
+
- tests/test_explain.py
|
|
112
|
+
- tests/test_fake_renderer.py
|
|
113
|
+
- tests/test_format.py
|
|
114
|
+
- tests/test_golden.py
|
|
115
|
+
- tests/test_migration_framework.py
|
|
116
|
+
- tests/test_preparation.py
|
|
117
|
+
- tests/test_public_identity.py
|
|
118
|
+
- tests/test_schema_history.py
|
|
119
|
+
- tests/test_schema_registry.py
|
|
120
|
+
- tests/test_ssmd_09_parser.py
|
|
121
|
+
- utterplan/__init__.py
|
|
122
|
+
- utterplan/cli.py
|
|
123
|
+
- utterplan/directives.py
|
|
124
|
+
- utterplan/explain.py
|
|
125
|
+
- utterplan/language.py
|
|
126
|
+
- utterplan/migrations/__init__.py
|
|
127
|
+
- utterplan/migrations/v2_to_v3.py
|
|
128
|
+
- utterplan/model.py
|
|
129
|
+
- utterplan/parsers.py
|
|
130
|
+
- utterplan/pauses.py
|
|
131
|
+
- utterplan/planner.py
|
|
132
|
+
- utterplan/preparation.py
|
|
133
|
+
- utterplan/schema_registry.py
|
|
134
|
+
- utterplan/schemas/v3.schema.json
|
|
135
|
+
- utterplan/stages/segmentation/phrasplit.py
|
|
136
|
+
- utterplan/utterplan.schema.json
|
|
137
|
+
- utterplan/versioning.py
|
|
138
|
+
observed_behavior:
|
|
139
|
+
Adds an SSMD 0.9-only parser and dependency contract, typed renderer-neutral
|
|
140
|
+
schema v3 semantics with source provenance, sequential v1/v2 plan migrations,
|
|
141
|
+
and matching CLI, documentation, and test coverage. The planner remains engine-independent
|
|
142
|
+
and retains deterministic sentence topology.
|
|
143
|
+
public_impact: public
|
|
144
|
+
decision: accepted
|
|
145
|
+
stale: false
|
|
146
|
+
evidence_subject: "feat: support ssmd 0.9 and prepare v3 plan"
|
|
147
|
+
target_entry_id: entry-0001
|
|
148
|
+
notes: ""
|
|
@@ -0,0 +1,85 @@
|
|
|
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: 0.3.0
|
|
9
|
+
kind: changed
|
|
10
|
+
summary: Changed source compatibility to SSMD 0.9 with typed schema v3 plans
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
16
|
+
paths:
|
|
17
|
+
- .github/workflows/tests.yml
|
|
18
|
+
- README.md
|
|
19
|
+
- docs/architecture.md
|
|
20
|
+
- docs/cli.md
|
|
21
|
+
- docs/consumer-guide.md
|
|
22
|
+
- docs/coordinate-spaces.md
|
|
23
|
+
- docs/debugging.md
|
|
24
|
+
- docs/format.md
|
|
25
|
+
- docs/getting-started.md
|
|
26
|
+
- docs/python-api.md
|
|
27
|
+
- examples/chapter.ssmd
|
|
28
|
+
- pyproject.toml
|
|
29
|
+
- spec/schemas/v3.schema.json
|
|
30
|
+
- spec/utterplan.schema.json
|
|
31
|
+
- tests/fixtures/ssmd_09_comprehensive.ssmd
|
|
32
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
33
|
+
- tests/migration/cases.py
|
|
34
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
35
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
36
|
+
- tests/migration/goldens/ssmd_break.json
|
|
37
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
38
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
39
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
40
|
+
- tests/schema_history/README.md
|
|
41
|
+
- tests/schema_history/v2/directives.json
|
|
42
|
+
- tests/test_cli.py
|
|
43
|
+
- tests/test_consumer_contract.py
|
|
44
|
+
- tests/test_consumer_readiness.py
|
|
45
|
+
- tests/test_coordinates.py
|
|
46
|
+
- tests/test_directives.py
|
|
47
|
+
- tests/test_explain.py
|
|
48
|
+
- tests/test_fake_renderer.py
|
|
49
|
+
- tests/test_format.py
|
|
50
|
+
- tests/test_golden.py
|
|
51
|
+
- tests/test_migration_framework.py
|
|
52
|
+
- tests/test_preparation.py
|
|
53
|
+
- tests/test_public_identity.py
|
|
54
|
+
- tests/test_schema_history.py
|
|
55
|
+
- tests/test_schema_registry.py
|
|
56
|
+
- tests/test_ssmd_09_parser.py
|
|
57
|
+
- utterplan/__init__.py
|
|
58
|
+
- utterplan/cli.py
|
|
59
|
+
- utterplan/directives.py
|
|
60
|
+
- utterplan/explain.py
|
|
61
|
+
- utterplan/language.py
|
|
62
|
+
- utterplan/migrations/__init__.py
|
|
63
|
+
- utterplan/migrations/v2_to_v3.py
|
|
64
|
+
- utterplan/model.py
|
|
65
|
+
- utterplan/parsers.py
|
|
66
|
+
- utterplan/pauses.py
|
|
67
|
+
- utterplan/planner.py
|
|
68
|
+
- utterplan/preparation.py
|
|
69
|
+
- utterplan/schema_registry.py
|
|
70
|
+
- utterplan/schemas/v3.schema.json
|
|
71
|
+
- utterplan/stages/segmentation/phrasplit.py
|
|
72
|
+
- utterplan/utterplan.schema.json
|
|
73
|
+
- utterplan/versioning.py
|
|
74
|
+
issues: []
|
|
75
|
+
prs: []
|
|
76
|
+
sources:
|
|
77
|
+
- git:49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
78
|
+
contributors:
|
|
79
|
+
- "@holgern"
|
|
80
|
+
breaking: true
|
|
81
|
+
internal: false
|
|
82
|
+
order: 1
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
SSMD input uses dialect 0.9 and older source syntax is rejected. Schema v3 preserves typed renderer-neutral directives and source provenance; supported v1 and v2 plans migrate to v3 without reparsing or replanning.
|
|
@@ -0,0 +1,29 @@
|
|
|
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: 0.3.0
|
|
9
|
+
kind: fixed
|
|
10
|
+
summary: Fixed precedence so authored SSMD breaks override generated pauses
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs: []
|
|
15
|
+
paths:
|
|
16
|
+
- utterplan/pauses.py
|
|
17
|
+
- tests/test_pauses.py
|
|
18
|
+
- tests/test_ssmd_09_parser.py
|
|
19
|
+
issues: []
|
|
20
|
+
prs: []
|
|
21
|
+
sources:
|
|
22
|
+
- tl:task-0017
|
|
23
|
+
contributors: []
|
|
24
|
+
breaking: false
|
|
25
|
+
internal: false
|
|
26
|
+
order: 2
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
At a shared boundary, an explicit SSMD break wins over automatic or default pauses. Durations are not added, all contributing event IDs remain in provenance, and an authored zero-duration break still takes precedence.
|
|
@@ -0,0 +1,32 @@
|
|
|
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: 0.3.0
|
|
9
|
+
kind: changed
|
|
10
|
+
summary: Changed Python input defaults and renamed SSMDConfig options
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs: []
|
|
15
|
+
paths:
|
|
16
|
+
- utterplan/config.py
|
|
17
|
+
- utterplan/parsers.py
|
|
18
|
+
- utterplan/planner.py
|
|
19
|
+
- docs/python-api.md
|
|
20
|
+
- docs/consumer-guide.md
|
|
21
|
+
- tests/test_consumer_readiness.py
|
|
22
|
+
issues: []
|
|
23
|
+
prs: []
|
|
24
|
+
sources:
|
|
25
|
+
- tl:task-0017
|
|
26
|
+
contributors: []
|
|
27
|
+
breaking: true
|
|
28
|
+
internal: false
|
|
29
|
+
order: 3
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
PlannerConfig now treats strings as plain text unless SSMD is selected explicitly. The no-op strict_header and unknown_header options were removed; parse_header and the application pause_defaults option are now parse_yaml_header and pause_overrides. The source-header pause_defaults key remains unchanged.
|
|
@@ -0,0 +1,28 @@
|
|
|
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: 0.3.0
|
|
9
|
+
kind: changed
|
|
10
|
+
summary: Changed clause enrichment to reuse provider-owned spaCy docs
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs: []
|
|
15
|
+
paths:
|
|
16
|
+
- utterplan/planner.py
|
|
17
|
+
- tests/test_linguistics.py
|
|
18
|
+
issues: []
|
|
19
|
+
prs: []
|
|
20
|
+
sources:
|
|
21
|
+
- tl:task-0017
|
|
22
|
+
contributors: []
|
|
23
|
+
breaking: false
|
|
24
|
+
internal: false
|
|
25
|
+
order: 4
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
Clausal-boundary enrichment reuses the request-local provider document when available. Fallback analysis does not infer syntactic clauses, and sentence topology remains on the deterministic spaCy-free segmentation path.
|
|
@@ -0,0 +1,30 @@
|
|
|
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: 0.3.0
|
|
9
|
+
kind: added
|
|
10
|
+
summary: Added PEP 561 metadata and SSMD 0.9 package checks
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs: []
|
|
15
|
+
paths:
|
|
16
|
+
- utterplan/py.typed
|
|
17
|
+
- pyproject.toml
|
|
18
|
+
- .github/workflows/tests.yml
|
|
19
|
+
- .github/workflows/python-publish.yml
|
|
20
|
+
issues: []
|
|
21
|
+
prs: []
|
|
22
|
+
sources:
|
|
23
|
+
- tl:task-0017
|
|
24
|
+
contributors: []
|
|
25
|
+
breaking: false
|
|
26
|
+
internal: false
|
|
27
|
+
order: 5
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
Wheel and source-distribution checks require the PEP 561 marker, all schema resources, and the SSMD 0.9 dependency range. Installed-package smoke coverage accepts strict 0.9 input and rejects an explicit 0.8 header.
|
|
@@ -0,0 +1,29 @@
|
|
|
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: 0.3.0
|
|
9
|
+
kind: docs
|
|
10
|
+
summary: Documented the 0.2-to-0.3 migration paths
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs: []
|
|
15
|
+
paths:
|
|
16
|
+
- docs/consumer-guide.md
|
|
17
|
+
- docs/python-api.md
|
|
18
|
+
- docs/format.md
|
|
19
|
+
issues: []
|
|
20
|
+
prs: []
|
|
21
|
+
sources:
|
|
22
|
+
- tl:task-0017
|
|
23
|
+
contributors: []
|
|
24
|
+
breaking: false
|
|
25
|
+
internal: false
|
|
26
|
+
order: 6
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
The migration guide separates SSMD source conversion with ssmd migrate from UtterPlan JSON schema migration. It documents the plain Python input default, SSMDConfig renames, and continued v1/v2 plan migration to schema v3.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 4
|
|
7
|
+
version: 0.3.0
|
|
8
|
+
status: released
|
|
9
|
+
history_state: curated
|
|
10
|
+
title: null
|
|
11
|
+
released_at: "2026-09-24"
|
|
12
|
+
previous_version: 0.2.0
|
|
13
|
+
cancel_reason: null
|
|
14
|
+
superseded_by: null
|
|
15
|
+
changelog_file: docs/changelog.md
|
|
16
|
+
boundary_ref: null
|
|
17
|
+
source_refs: []
|
|
18
|
+
source_count: null
|
|
19
|
+
entry_count: 6
|
|
20
|
+
artifact_count: 0
|
|
21
|
+
git_base_ref: v0.2.0
|
|
22
|
+
git_base_sha: 215d3a4b43ccaadbf50cb40b752ae30a5b4f39e5
|
|
23
|
+
git_head_ref: HEAD
|
|
24
|
+
git_head_sha: 49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
25
|
+
git_range: 215d3a4b43ccaadbf50cb40b752ae30a5b4f39e5..49023f0470950eb3b1ff9a1c9a928bac5a47575e
|
|
26
|
+
git_commit_count: 1
|
|
27
|
+
---
|