utterplan 0.3.1__tar.gz → 0.3.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.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +12 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.2/audit/commit-audit.yaml +105 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.2/entries/entry-0001.md +32 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.2/entries/entry-0002.md +41 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.2/release.md +27 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.3/audit/commit-audit.yaml +90 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.3/entries/entry-0001.md +45 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.3/entries/entry-0002.md +27 -0
- utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.3/release.md +27 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/audit-decisions.yaml +48 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/audit.yaml +75 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/entries.yaml +54 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/evidence/6c2a1ac.patch +64 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/evidence/a2bc20d.patch +1923 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/evidence/ba3b5af.patch +414 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/evidence/manifest.json +57 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.2/range.json +13 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/audit-decisions.yaml +39 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/audit.yaml +61 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/entries.yaml +54 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/evidence/66e2d83.patch +1339 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/evidence/ac797e4.patch +27 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/evidence/manifest.json +51 -0
- utterplan-0.3.3/.ledger/releaseledger/work/0.3.3/range.json +13 -0
- {utterplan-0.3.1/utterplan.egg-info → utterplan-0.3.3}/PKG-INFO +33 -14
- {utterplan-0.3.1 → utterplan-0.3.3}/README.md +32 -13
- utterplan-0.3.3/docs/architecture.md +117 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/changelog.md +20 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/cli.md +29 -15
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/python-api.md +51 -3
- utterplan-0.3.3/tests/fixtures/canonical_consumer_contract.expected.json +10 -0
- utterplan-0.3.3/tests/fixtures/canonical_consumer_contract.ssmd +21 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/ssmd_09_comprehensive.utterplan.json +2 -1
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/goldens/multilingual_preparation.json +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/goldens/spokenform_numbers.json +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/goldens/ssmd_break.json +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/goldens/ssmd_language_detection.json +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/goldens/ssmd_marker.json +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/goldens/ssmd_pronunciation.json +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_cli.py +49 -0
- utterplan-0.3.3/tests/test_compiler.py +130 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_consumer_contract.py +38 -1
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_consumer_readiness.py +92 -0
- utterplan-0.3.3/tests/test_import_boundaries.py +16 -0
- utterplan-0.3.3/tests/test_preparation.py +179 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_public_identity.py +1 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_ssmd_09_parser.py +17 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/__init__.py +14 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/_version.py +3 -3
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/cli.py +111 -25
- utterplan-0.3.3/utterplan/compiler.py +109 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/parsers.py +39 -4
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/planner.py +114 -4
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/preparation.py +37 -1
- {utterplan-0.3.1 → utterplan-0.3.3/utterplan.egg-info}/PKG-INFO +33 -14
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan.egg-info/SOURCES.txt +27 -2
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan.egg-info/scm_file_list.json +27 -2
- utterplan-0.3.3/utterplan.egg-info/scm_version.json +8 -0
- utterplan-0.3.1/01_todo.md +0 -1796
- utterplan-0.3.1/docs/architecture.md +0 -54
- utterplan-0.3.1/plan.md +0 -111
- utterplan-0.3.1/tests/test_import_boundaries.py +0 -10
- utterplan-0.3.1/tests/test_preparation.py +0 -67
- utterplan-0.3.1/utterplan.egg-info/scm_version.json +0 -8
- {utterplan-0.3.1 → utterplan-0.3.3}/.codecrate.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.github/workflows/codecov.yml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.github/workflows/pre-commit.yml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.github/workflows/python-publish.yml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.github/workflows/tests.yml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.gitignore +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/ledger.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/.ledger-project.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/config.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0001.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0002.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0003.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0004.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/release.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/entries/entry-0001.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/release.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/audit/commit-audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0001.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0002.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0003.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0004.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0005.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0006.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/release.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/audit/commit-audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0001.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0002.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0003.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0004.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/release.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/audit/commit-audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0001.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0002.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0003.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0004.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0005.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0006.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/release.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.1/audit/commit-audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.1/entries/entry-0001.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/releases/0.3.1/release.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/audit-decisions.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/entries.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/evidence/2c64e29.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/evidence/4022753.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/evidence/66a88b6.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/evidence/manifest.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.1.2/range.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/audit-decisions.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/entries.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/evidence/9637182.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/evidence/c52aa68.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/evidence/e49a6dd.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/evidence/manifest.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.2.0/range.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.0/audit-decisions.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.0/audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.0/entries.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.0/evidence/49023f0.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.0/evidence/manifest.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.0/range.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.1/audit-decisions.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.1/audit.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.1/entries.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.1/evidence/70adac0.patch +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.1/evidence/manifest.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/work/0.3.1/range.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/write.lock +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/taskledger/.ledger-project.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.ledger/taskledger/config.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/.pre-commit-config.yaml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/AGENTS.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/LICENSE +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/NOTICE +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/Makefile +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/conf.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/consumer-guide.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/coordinate-spaces.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/debugging.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/format.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/getting-started.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/index.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/make.bat +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/phase-a-completion.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/pykokoro-integration.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/docs/requirements.txt +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/examples/basic.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/examples/chapter.ssmd +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/examples/compile_file.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/examples/inspect_plan.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/examples/multilingual.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/examples/ssmd_example.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/pyproject.toml +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/setup.cfg +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/spec/schemas/v1.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/spec/schemas/v2.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/spec/schemas/v3.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/spec/utterplan.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/__init__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/fixtures/ssmd_09_comprehensive.ssmd +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/basic_en.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/directives.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/markers.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/multilingual.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/parenthetical.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/spokenform_offsets.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/golden/ssmd_breaks.utterplan.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/__init__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/cases.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/migration/test_semantic_migration_regressions.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/README.md +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/basic.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/directives.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/markers.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/multilingual.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/parenthetical.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/spokenform_offsets.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v1/ssmd_breaks.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/schema_history/v2/directives.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_boundaries.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_coordinates.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_directives.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_explain.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_fake_renderer.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_format.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_golden.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_identity_units.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_language.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_linguistics.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_migration_framework.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_pauses.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_planner.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_schema_history.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_schema_registry.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_schema_strict.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/tests/test_version.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/__main__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/config.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/diagnostics.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/directives.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/exceptions.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/explain.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/format.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/hashing.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/language.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/linguistics.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/migration.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/migrations/__init__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/migrations/registry.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/migrations/v1_to_v2.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/migrations/v2_to_v3.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/model.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/pauses.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/py.typed +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/schema_registry.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/schemas/v1.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/schemas/v2.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/schemas/v3.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/serialization.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/spacy_models.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/spans.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/__init__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/document/__init__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/document/plain.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/document/ssmd.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/preparation/__init__.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/preparation/identity.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/preparation/spokenform.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/stages/protocols.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/units.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/utterplan.schema.json +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan/versioning.py +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan.egg-info/dependency_links.txt +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan.egg-info/entry_points.txt +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan.egg-info/requires.txt +0 -0
- {utterplan-0.3.1 → utterplan-0.3.3}/utterplan.egg-info/top_level.txt +0 -0
{utterplan-0.3.1 → utterplan-0.3.3}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl
RENAMED
|
@@ -48,3 +48,15 @@
|
|
|
48
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
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
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}
|
|
51
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0051","record_revisions":{"release:0.3.2":1},"release_version":"0.3.2","schema_version":2}
|
|
52
|
+
{"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-0052","record_revisions":{"release:0.3.2":2},"release_version":"0.3.2","schema_version":2}
|
|
53
|
+
{"data":{"row_count":3},"event":"audit.created","event_id":"event-0053","record_revisions":{"commit_audit_sheet":1},"release_version":"0.3.2","schema_version":2}
|
|
54
|
+
{"data":{"updated_rows":3},"event":"audit.updated","event_id":"event-0054","record_revisions":{"commit_audit_sheet":2},"release_version":"0.3.2","schema_version":2}
|
|
55
|
+
{"data":{"entry_ids":["entry-0001","entry-0002"],"synced_audit_rows":2},"event":"entry.batch_added","event_id":"event-0055","record_revisions":{"commit_audit_sheet":3,"entry:0.3.2/entry-0001":1,"entry:0.3.2/entry-0002":1,"release:0.3.2":3},"release_version":"0.3.2","schema_version":2}
|
|
56
|
+
{"data":{"released_at":"2026-10-03"},"event":"release.finalized","event_id":"event-0056","record_revisions":{"release:0.3.2":4},"release_version":"0.3.2","schema_version":2}
|
|
57
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0057","record_revisions":{"release:0.3.3":1},"release_version":"0.3.3","schema_version":2}
|
|
58
|
+
{"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-0058","record_revisions":{"release:0.3.3":2},"release_version":"0.3.3","schema_version":2}
|
|
59
|
+
{"data":{"row_count":2},"event":"audit.created","event_id":"event-0059","record_revisions":{"commit_audit_sheet":1},"release_version":"0.3.3","schema_version":2}
|
|
60
|
+
{"data":{"updated_rows":2},"event":"audit.updated","event_id":"event-0060","record_revisions":{"commit_audit_sheet":2},"release_version":"0.3.3","schema_version":2}
|
|
61
|
+
{"data":{"entry_ids":["entry-0001","entry-0002"],"synced_audit_rows":2},"event":"entry.batch_added","event_id":"event-0061","record_revisions":{"commit_audit_sheet":3,"entry:0.3.3/entry-0001":1,"entry:0.3.3/entry-0002":1,"release:0.3.3":3},"release_version":"0.3.3","schema_version":2}
|
|
62
|
+
{"data":{"released_at":"2026-10-03"},"event":"release.finalized","event_id":"event-0062","record_revisions":{"release:0.3.3":4},"release_version":"0.3.3","schema_version":2}
|
utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.2/audit/commit-audit.yaml
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 3
|
|
6
|
+
release_version: 0.3.2
|
|
7
|
+
git_base_ref: v0.3.1
|
|
8
|
+
git_base_sha: b0415758f6c1d1890d8015ce40c1e52d6120cf46
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
11
|
+
git_range: b0415758f6c1d1890d8015ce40c1e52d6120cf46..ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
12
|
+
commit_count: 3
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
15
|
+
source_ref: git:6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
16
|
+
short_sha: 6c2a1ac
|
|
17
|
+
changed_paths:
|
|
18
|
+
- tests/test_preparation.py
|
|
19
|
+
- utterplan/preparation.py
|
|
20
|
+
stats:
|
|
21
|
+
files_changed: 2
|
|
22
|
+
insertions: 40
|
|
23
|
+
deletions: 1
|
|
24
|
+
inspected: true
|
|
25
|
+
inspected_paths:
|
|
26
|
+
- tests/test_preparation.py
|
|
27
|
+
- utterplan/preparation.py
|
|
28
|
+
observed_behavior:
|
|
29
|
+
Spoken-text preparation protects annotation spans using sub,
|
|
30
|
+
as, say-as, ph, or phonemes from automated replacement while preserving source
|
|
31
|
+
offset mappings.
|
|
32
|
+
public_impact: public
|
|
33
|
+
decision: accepted
|
|
34
|
+
stale: false
|
|
35
|
+
evidence_subject: "feat: improve prepare ssmd"
|
|
36
|
+
target_entry_id: entry-0001
|
|
37
|
+
notes: ""
|
|
38
|
+
- sha: a2bc20d5d25f880688886f1867f0fd398a5b8c7e
|
|
39
|
+
source_ref: git:a2bc20d5d25f880688886f1867f0fd398a5b8c7e
|
|
40
|
+
short_sha: a2bc20d
|
|
41
|
+
changed_paths:
|
|
42
|
+
- 01_todo.md
|
|
43
|
+
- plan.md
|
|
44
|
+
stats:
|
|
45
|
+
files_changed: 2
|
|
46
|
+
insertions: 0
|
|
47
|
+
deletions: 1907
|
|
48
|
+
inspected: true
|
|
49
|
+
inspected_paths:
|
|
50
|
+
- 01_todo.md
|
|
51
|
+
- plan.md
|
|
52
|
+
observed_behavior:
|
|
53
|
+
Removed planning-only repository files; no runtime or public
|
|
54
|
+
package behavior changed.
|
|
55
|
+
public_impact: internal
|
|
56
|
+
decision: internal
|
|
57
|
+
stale: false
|
|
58
|
+
evidence_subject: "chore: remove plan files"
|
|
59
|
+
notes: Repository planning artifacts only, with no user-facing change.
|
|
60
|
+
- sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
61
|
+
source_ref: git:ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
62
|
+
short_sha: ba3b5af
|
|
63
|
+
changed_paths:
|
|
64
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
65
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
66
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
67
|
+
- tests/migration/goldens/ssmd_break.json
|
|
68
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
69
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
70
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
71
|
+
- tests/test_consumer_readiness.py
|
|
72
|
+
- tests/test_preparation.py
|
|
73
|
+
- tests/test_ssmd_09_parser.py
|
|
74
|
+
- utterplan/parsers.py
|
|
75
|
+
- utterplan/planner.py
|
|
76
|
+
- utterplan/preparation.py
|
|
77
|
+
stats:
|
|
78
|
+
files_changed: 13
|
|
79
|
+
insertions: 183
|
|
80
|
+
deletions: 7
|
|
81
|
+
inspected: true
|
|
82
|
+
inspected_paths:
|
|
83
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
84
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
85
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
86
|
+
- tests/migration/goldens/ssmd_break.json
|
|
87
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
88
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
89
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
90
|
+
- tests/test_consumer_readiness.py
|
|
91
|
+
- tests/test_preparation.py
|
|
92
|
+
- tests/test_ssmd_09_parser.py
|
|
93
|
+
- utterplan/parsers.py
|
|
94
|
+
- utterplan/planner.py
|
|
95
|
+
- utterplan/preparation.py
|
|
96
|
+
observed_behavior:
|
|
97
|
+
SSMD sequence_fallback_mode accepts spell or preserve, defaults
|
|
98
|
+
to spell, is forwarded to spoken-form preparation and serialized in plan metadata
|
|
99
|
+
and identity, and rejects invalid values.
|
|
100
|
+
public_impact: public
|
|
101
|
+
decision: accepted
|
|
102
|
+
stale: false
|
|
103
|
+
evidence_subject: "feat: parse fallback mode parameter from ssmdconvert settings"
|
|
104
|
+
target_entry_id: entry-0002
|
|
105
|
+
notes: ""
|
|
@@ -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-0001
|
|
8
|
+
release_version: 0.3.2
|
|
9
|
+
kind: fixed
|
|
10
|
+
summary:
|
|
11
|
+
Fixed text preparation so authored SSMD substitutions and say-as annotations
|
|
12
|
+
remain unchanged
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
18
|
+
paths:
|
|
19
|
+
- tests/test_preparation.py
|
|
20
|
+
- utterplan/preparation.py
|
|
21
|
+
issues: []
|
|
22
|
+
prs: []
|
|
23
|
+
sources:
|
|
24
|
+
- git:6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
25
|
+
contributors:
|
|
26
|
+
- "@holgern"
|
|
27
|
+
breaking: false
|
|
28
|
+
internal: false
|
|
29
|
+
order: 1
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
Spoken-text preparation excludes spans with `sub`, `as`, and `say-as` attributes from automatic spoken-form replacement, preserving author-provided text while retaining existing pronunciation protections.
|
|
@@ -0,0 +1,41 @@
|
|
|
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.2
|
|
9
|
+
kind: added
|
|
10
|
+
summary: Added SSMD sequence fallback mode controls for spoken-form preparation
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
16
|
+
paths:
|
|
17
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
18
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
19
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
20
|
+
- tests/migration/goldens/ssmd_break.json
|
|
21
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
22
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
23
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
24
|
+
- tests/test_consumer_readiness.py
|
|
25
|
+
- tests/test_preparation.py
|
|
26
|
+
- tests/test_ssmd_09_parser.py
|
|
27
|
+
- utterplan/parsers.py
|
|
28
|
+
- utterplan/planner.py
|
|
29
|
+
- utterplan/preparation.py
|
|
30
|
+
issues: []
|
|
31
|
+
prs: []
|
|
32
|
+
sources:
|
|
33
|
+
- git:ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
34
|
+
contributors:
|
|
35
|
+
- "@holgern"
|
|
36
|
+
breaking: false
|
|
37
|
+
internal: false
|
|
38
|
+
order: 2
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
SSMD headers can choose `spell` or `preserve` for sequence fallback behavior. The default remains `spell`; the selected mode is carried in plan metadata, and invalid values are rejected during planning.
|
|
@@ -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.2
|
|
8
|
+
status: released
|
|
9
|
+
history_state: curated
|
|
10
|
+
title: null
|
|
11
|
+
released_at: "2026-10-03"
|
|
12
|
+
previous_version: 0.3.1
|
|
13
|
+
cancel_reason: null
|
|
14
|
+
superseded_by: null
|
|
15
|
+
changelog_file: null
|
|
16
|
+
boundary_ref: null
|
|
17
|
+
source_refs: []
|
|
18
|
+
source_count: null
|
|
19
|
+
entry_count: 2
|
|
20
|
+
artifact_count: 0
|
|
21
|
+
git_base_ref: v0.3.1
|
|
22
|
+
git_base_sha: b0415758f6c1d1890d8015ce40c1e52d6120cf46
|
|
23
|
+
git_head_ref: HEAD
|
|
24
|
+
git_head_sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
25
|
+
git_range: b0415758f6c1d1890d8015ce40c1e52d6120cf46..ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
26
|
+
git_commit_count: 3
|
|
27
|
+
---
|
utterplan-0.3.3/.ledger/releaseledger/data/ledgers/main/releases/0.3.3/audit/commit-audit.yaml
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 3
|
|
6
|
+
release_version: 0.3.3
|
|
7
|
+
git_base_ref: v0.3.2
|
|
8
|
+
git_base_sha: c2566055d7d5a93794bd9a30b06db862b0fa7bde
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
11
|
+
git_range: c2566055d7d5a93794bd9a30b06db862b0fa7bde..ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
12
|
+
commit_count: 2
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 66e2d83fc06ee2d46bff0aca0a5920c5caf8c8e0
|
|
15
|
+
source_ref: git:66e2d83fc06ee2d46bff0aca0a5920c5caf8c8e0
|
|
16
|
+
short_sha: 66e2d83
|
|
17
|
+
changed_paths:
|
|
18
|
+
- README.md
|
|
19
|
+
- docs/architecture.md
|
|
20
|
+
- docs/cli.md
|
|
21
|
+
- docs/python-api.md
|
|
22
|
+
- tests/fixtures/canonical_consumer_contract.expected.json
|
|
23
|
+
- tests/fixtures/canonical_consumer_contract.ssmd
|
|
24
|
+
- tests/test_cli.py
|
|
25
|
+
- tests/test_compiler.py
|
|
26
|
+
- tests/test_consumer_contract.py
|
|
27
|
+
- tests/test_consumer_readiness.py
|
|
28
|
+
- tests/test_import_boundaries.py
|
|
29
|
+
- tests/test_public_identity.py
|
|
30
|
+
- utterplan/__init__.py
|
|
31
|
+
- utterplan/cli.py
|
|
32
|
+
- utterplan/compiler.py
|
|
33
|
+
- utterplan/planner.py
|
|
34
|
+
- utterplan/preparation.py
|
|
35
|
+
stats:
|
|
36
|
+
files_changed: 17
|
|
37
|
+
insertions: 875
|
|
38
|
+
deletions: 74
|
|
39
|
+
inspected: true
|
|
40
|
+
inspected_paths:
|
|
41
|
+
- README.md
|
|
42
|
+
- docs/architecture.md
|
|
43
|
+
- docs/cli.md
|
|
44
|
+
- docs/python-api.md
|
|
45
|
+
- tests/fixtures/canonical_consumer_contract.expected.json
|
|
46
|
+
- tests/fixtures/canonical_consumer_contract.ssmd
|
|
47
|
+
- tests/test_cli.py
|
|
48
|
+
- tests/test_compiler.py
|
|
49
|
+
- tests/test_consumer_contract.py
|
|
50
|
+
- tests/test_consumer_readiness.py
|
|
51
|
+
- tests/test_import_boundaries.py
|
|
52
|
+
- tests/test_public_identity.py
|
|
53
|
+
- utterplan/__init__.py
|
|
54
|
+
- utterplan/cli.py
|
|
55
|
+
- utterplan/compiler.py
|
|
56
|
+
- utterplan/planner.py
|
|
57
|
+
- utterplan/preparation.py
|
|
58
|
+
observed_behavior:
|
|
59
|
+
Added the public compile_document API for one SSMD or explicitly
|
|
60
|
+
selected plain-text document, including immutable compile results, optional preparation
|
|
61
|
+
traces, authoritative header-language handling, and canonical consumer-contract
|
|
62
|
+
coverage.
|
|
63
|
+
public_impact: public
|
|
64
|
+
decision: accepted
|
|
65
|
+
stale: false
|
|
66
|
+
evidence_subject: "feat: lanf support in header"
|
|
67
|
+
target_entry_key: canonical-single-document-compiler
|
|
68
|
+
target_entry_id: entry-0001
|
|
69
|
+
notes: Reviewed implementation, documentation, fixtures, and tests.
|
|
70
|
+
- sha: ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
71
|
+
source_ref: git:ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
72
|
+
short_sha: ac797e4
|
|
73
|
+
changed_paths:
|
|
74
|
+
- utterplan/cli.py
|
|
75
|
+
stats:
|
|
76
|
+
files_changed: 1
|
|
77
|
+
insertions: 4
|
|
78
|
+
deletions: 4
|
|
79
|
+
inspected: true
|
|
80
|
+
inspected_paths:
|
|
81
|
+
- utterplan/cli.py
|
|
82
|
+
observed_behavior:
|
|
83
|
+
Renamed the local validation result variable to compile_result
|
|
84
|
+
without changing behavior.
|
|
85
|
+
public_impact: internal
|
|
86
|
+
decision: internal
|
|
87
|
+
stale: false
|
|
88
|
+
evidence_subject: "chore: fix mypy"
|
|
89
|
+
target_entry_id: entry-0002
|
|
90
|
+
notes: Mypy-oriented naming-only cleanup; excluded from public notes.
|
|
@@ -0,0 +1,45 @@
|
|
|
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.3
|
|
9
|
+
kind: added
|
|
10
|
+
summary:
|
|
11
|
+
Added canonical single-document compilation with plain-text support and preparation
|
|
12
|
+
traces
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:66e2d83fc06ee2d46bff0aca0a5920c5caf8c8e0
|
|
18
|
+
paths:
|
|
19
|
+
- README.md
|
|
20
|
+
- docs/architecture.md
|
|
21
|
+
- docs/cli.md
|
|
22
|
+
- docs/python-api.md
|
|
23
|
+
- tests/fixtures/canonical_consumer_contract.expected.json
|
|
24
|
+
- tests/fixtures/canonical_consumer_contract.ssmd
|
|
25
|
+
- tests/test_cli.py
|
|
26
|
+
- tests/test_compiler.py
|
|
27
|
+
- tests/test_consumer_contract.py
|
|
28
|
+
- tests/test_consumer_readiness.py
|
|
29
|
+
- tests/test_import_boundaries.py
|
|
30
|
+
- tests/test_public_identity.py
|
|
31
|
+
- utterplan/__init__.py
|
|
32
|
+
- utterplan/cli.py
|
|
33
|
+
- utterplan/compiler.py
|
|
34
|
+
- utterplan/planner.py
|
|
35
|
+
- utterplan/preparation.py
|
|
36
|
+
issues: []
|
|
37
|
+
prs: []
|
|
38
|
+
sources:
|
|
39
|
+
- git:66e2d83fc06ee2d46bff0aca0a5920c5caf8c8e0
|
|
40
|
+
contributors:
|
|
41
|
+
- "@holgern"
|
|
42
|
+
breaking: false
|
|
43
|
+
internal: false
|
|
44
|
+
order: 1
|
|
45
|
+
---
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0002
|
|
8
|
+
release_version: 0.3.3
|
|
9
|
+
kind: internal
|
|
10
|
+
summary: Changed CLI validation variable naming for mypy clarity
|
|
11
|
+
status: accepted
|
|
12
|
+
audience: null
|
|
13
|
+
scopes: []
|
|
14
|
+
source_refs:
|
|
15
|
+
- git:ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
16
|
+
paths:
|
|
17
|
+
- utterplan/cli.py
|
|
18
|
+
issues: []
|
|
19
|
+
prs: []
|
|
20
|
+
sources:
|
|
21
|
+
- git:ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
22
|
+
contributors:
|
|
23
|
+
- "@holgern"
|
|
24
|
+
breaking: false
|
|
25
|
+
internal: true
|
|
26
|
+
order: 2
|
|
27
|
+
---
|
|
@@ -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.3
|
|
8
|
+
status: released
|
|
9
|
+
history_state: curated
|
|
10
|
+
title: null
|
|
11
|
+
released_at: "2026-10-03"
|
|
12
|
+
previous_version: 0.3.2
|
|
13
|
+
cancel_reason: null
|
|
14
|
+
superseded_by: null
|
|
15
|
+
changelog_file: null
|
|
16
|
+
boundary_ref: null
|
|
17
|
+
source_refs: []
|
|
18
|
+
source_count: null
|
|
19
|
+
entry_count: 2
|
|
20
|
+
artifact_count: 0
|
|
21
|
+
git_base_ref: v0.3.2
|
|
22
|
+
git_base_sha: c2566055d7d5a93794bd9a30b06db862b0fa7bde
|
|
23
|
+
git_head_ref: HEAD
|
|
24
|
+
git_head_sha: ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
25
|
+
git_range: c2566055d7d5a93794bd9a30b06db862b0fa7bde..ac797e4a55e4eef9a8e9c76112f5ebee5ad9e2b8
|
|
26
|
+
git_commit_count: 2
|
|
27
|
+
---
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
rows:
|
|
2
|
+
- sha: 6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
3
|
+
inspected: true
|
|
4
|
+
inspected_paths:
|
|
5
|
+
- tests/test_preparation.py
|
|
6
|
+
- utterplan/preparation.py
|
|
7
|
+
observed_behavior: Spoken-text preparation protects annotation spans using sub, as, say-as, ph, or phonemes from automated replacement while preserving source offset mappings.
|
|
8
|
+
public_impact: public
|
|
9
|
+
decision: accepted
|
|
10
|
+
target_entry_key: null
|
|
11
|
+
target_entry_id: null
|
|
12
|
+
notes: ""
|
|
13
|
+
stale: false
|
|
14
|
+
- sha: a2bc20d5d25f880688886f1867f0fd398a5b8c7e
|
|
15
|
+
inspected: true
|
|
16
|
+
inspected_paths:
|
|
17
|
+
- 01_todo.md
|
|
18
|
+
- plan.md
|
|
19
|
+
observed_behavior: Removed planning-only repository files; no runtime or public package behavior changed.
|
|
20
|
+
public_impact: internal
|
|
21
|
+
decision: internal
|
|
22
|
+
target_entry_key: null
|
|
23
|
+
target_entry_id: null
|
|
24
|
+
notes: Repository planning artifacts only, with no user-facing change.
|
|
25
|
+
stale: false
|
|
26
|
+
- sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
27
|
+
inspected: true
|
|
28
|
+
inspected_paths:
|
|
29
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
30
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
31
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
32
|
+
- tests/migration/goldens/ssmd_break.json
|
|
33
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
34
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
35
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
36
|
+
- tests/test_consumer_readiness.py
|
|
37
|
+
- tests/test_preparation.py
|
|
38
|
+
- tests/test_ssmd_09_parser.py
|
|
39
|
+
- utterplan/parsers.py
|
|
40
|
+
- utterplan/planner.py
|
|
41
|
+
- utterplan/preparation.py
|
|
42
|
+
observed_behavior: SSMD sequence_fallback_mode accepts spell or preserve, defaults to spell, is forwarded to spoken-form preparation and serialized in plan metadata and identity, and rejects invalid values.
|
|
43
|
+
public_impact: public
|
|
44
|
+
decision: accepted
|
|
45
|
+
target_entry_key: null
|
|
46
|
+
target_entry_id: null
|
|
47
|
+
notes: ""
|
|
48
|
+
stale: false
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 1
|
|
6
|
+
release_version: 0.3.2
|
|
7
|
+
git_base_ref: v0.3.1
|
|
8
|
+
git_base_sha: b0415758f6c1d1890d8015ce40c1e52d6120cf46
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
11
|
+
git_range: b0415758f6c1d1890d8015ce40c1e52d6120cf46..ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
12
|
+
commit_count: 3
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
15
|
+
source_ref: git:6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
16
|
+
short_sha: 6c2a1ac
|
|
17
|
+
changed_paths:
|
|
18
|
+
- tests/test_preparation.py
|
|
19
|
+
- utterplan/preparation.py
|
|
20
|
+
stats:
|
|
21
|
+
files_changed: 2
|
|
22
|
+
insertions: 40
|
|
23
|
+
deletions: 1
|
|
24
|
+
inspected: false
|
|
25
|
+
inspected_paths: []
|
|
26
|
+
observed_behavior: ""
|
|
27
|
+
public_impact: unknown
|
|
28
|
+
decision: needs_review
|
|
29
|
+
stale: false
|
|
30
|
+
evidence_subject: "feat: improve prepare ssmd"
|
|
31
|
+
- sha: a2bc20d5d25f880688886f1867f0fd398a5b8c7e
|
|
32
|
+
source_ref: git:a2bc20d5d25f880688886f1867f0fd398a5b8c7e
|
|
33
|
+
short_sha: a2bc20d
|
|
34
|
+
changed_paths:
|
|
35
|
+
- 01_todo.md
|
|
36
|
+
- plan.md
|
|
37
|
+
stats:
|
|
38
|
+
files_changed: 2
|
|
39
|
+
insertions: 0
|
|
40
|
+
deletions: 1907
|
|
41
|
+
inspected: false
|
|
42
|
+
inspected_paths: []
|
|
43
|
+
observed_behavior: ""
|
|
44
|
+
public_impact: unknown
|
|
45
|
+
decision: needs_review
|
|
46
|
+
stale: false
|
|
47
|
+
evidence_subject: "chore: remove plan files"
|
|
48
|
+
- sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
49
|
+
source_ref: git:ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
50
|
+
short_sha: ba3b5af
|
|
51
|
+
changed_paths:
|
|
52
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
53
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
54
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
55
|
+
- tests/migration/goldens/ssmd_break.json
|
|
56
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
57
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
58
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
59
|
+
- tests/test_consumer_readiness.py
|
|
60
|
+
- tests/test_preparation.py
|
|
61
|
+
- tests/test_ssmd_09_parser.py
|
|
62
|
+
- utterplan/parsers.py
|
|
63
|
+
- utterplan/planner.py
|
|
64
|
+
- utterplan/preparation.py
|
|
65
|
+
stats:
|
|
66
|
+
files_changed: 13
|
|
67
|
+
insertions: 183
|
|
68
|
+
deletions: 7
|
|
69
|
+
inspected: false
|
|
70
|
+
inspected_paths: []
|
|
71
|
+
observed_behavior: ""
|
|
72
|
+
public_impact: unknown
|
|
73
|
+
decision: needs_review
|
|
74
|
+
stale: false
|
|
75
|
+
evidence_subject: "feat: parse fallback mode parameter from ssmdconvert settings"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
schema: releaseledger.entry-batch.v1
|
|
2
|
+
operation: create
|
|
3
|
+
schema_version: 1
|
|
4
|
+
object_type: release_entry_batch
|
|
5
|
+
release_version: 0.3.2
|
|
6
|
+
git_base_ref: b0415758f6c1d1890d8015ce40c1e52d6120cf46
|
|
7
|
+
git_base_sha: b0415758f6c1d1890d8015ce40c1e52d6120cf46
|
|
8
|
+
git_head_ref: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
9
|
+
git_head_sha: ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
10
|
+
include_merges: nontrivial
|
|
11
|
+
entries:
|
|
12
|
+
- kind: fixed
|
|
13
|
+
summary: Fixed text preparation so authored SSMD substitutions and say-as annotations remain unchanged
|
|
14
|
+
status: accepted
|
|
15
|
+
body: >-
|
|
16
|
+
Spoken-text preparation excludes spans with `sub`, `as`, and `say-as` attributes from automatic spoken-form replacement, preserving author-provided text while retaining existing pronunciation protections.
|
|
17
|
+
source_refs:
|
|
18
|
+
- git:6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
19
|
+
paths:
|
|
20
|
+
- tests/test_preparation.py
|
|
21
|
+
- utterplan/preparation.py
|
|
22
|
+
sources:
|
|
23
|
+
- git:6c2a1ac444c76ea183a791b59af2e92fb60dbb23
|
|
24
|
+
prs: []
|
|
25
|
+
issues: []
|
|
26
|
+
contributors:
|
|
27
|
+
- "@holgern"
|
|
28
|
+
- kind: added
|
|
29
|
+
summary: Added SSMD sequence fallback mode controls for spoken-form preparation
|
|
30
|
+
status: accepted
|
|
31
|
+
body: >-
|
|
32
|
+
SSMD headers can choose `spell` or `preserve` for sequence fallback behavior. The default remains `spell`; the selected mode is carried in plan metadata, and invalid values are rejected during planning.
|
|
33
|
+
source_refs:
|
|
34
|
+
- git:ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
35
|
+
paths:
|
|
36
|
+
- tests/golden/ssmd_09_comprehensive.utterplan.json
|
|
37
|
+
- tests/migration/goldens/multilingual_preparation.json
|
|
38
|
+
- tests/migration/goldens/spokenform_numbers.json
|
|
39
|
+
- tests/migration/goldens/ssmd_break.json
|
|
40
|
+
- tests/migration/goldens/ssmd_language_detection.json
|
|
41
|
+
- tests/migration/goldens/ssmd_marker.json
|
|
42
|
+
- tests/migration/goldens/ssmd_pronunciation.json
|
|
43
|
+
- tests/test_consumer_readiness.py
|
|
44
|
+
- tests/test_preparation.py
|
|
45
|
+
- tests/test_ssmd_09_parser.py
|
|
46
|
+
- utterplan/parsers.py
|
|
47
|
+
- utterplan/planner.py
|
|
48
|
+
- utterplan/preparation.py
|
|
49
|
+
sources:
|
|
50
|
+
- git:ba3b5afb6c619cf91e482db16b19d53f199eb1e2
|
|
51
|
+
prs: []
|
|
52
|
+
issues: []
|
|
53
|
+
contributors:
|
|
54
|
+
- "@holgern"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
tests/test_preparation.py | 37 +++++++++++++++++++++++++++++++++++++
|
|
2
|
+
utterplan/preparation.py | 4 +++-
|
|
3
|
+
2 files changed, 40 insertions(+), 1 deletion(-)
|
|
4
|
+
|
|
5
|
+
diff --git a/tests/test_preparation.py b/tests/test_preparation.py
|
|
6
|
+
index dad7957..11f777b 100644
|
|
7
|
+
--- a/tests/test_preparation.py
|
|
8
|
+
+++ b/tests/test_preparation.py
|
|
9
|
+
@@ -65,3 +65,40 @@ def test_zero_width_audio_annotation_maps_to_spoken_point():
|
|
10
|
+
assert annotation.structural_start == annotation.structural_end
|
|
11
|
+
assert annotation.spoken_start == annotation.spoken_end
|
|
12
|
+
assert plan.texts.spoken[annotation.spoken_start : annotation.spoken_end] == ""
|
|
13
|
+
+
|
|
14
|
+
+
|
|
15
|
+
+def test_author_speech_annotations_are_protected_and_keep_source_offsets():
|
|
16
|
+
+ source = (
|
|
17
|
+
+ '[H2O]{sub="water"} '
|
|
18
|
+
+ '[31.12.2024]{as="date" format="dd.mm.yyyy"} '
|
|
19
|
+
+ '[04/05/2024]{say-as="date" format="MM/dd/yyyy"} '
|
|
20
|
+
+ '[tomato]{ph="təˈmeɪtoʊ"} '
|
|
21
|
+
+ '[AWS]{phonemes="eɪ dʌbəljuː ɛs"} ordinary 5 kg.'
|
|
22
|
+
+ )
|
|
23
|
+
+ plan = UtterancePlanner(PlannerConfig(language="en-us", document_format="ssmd")).plan(source)
|
|
24
|
+
+
|
|
25
|
+
+ assert plan.texts.spoken == ("H2O 31.12.2024 04/05/2024 tomato AWS ordinary five kilograms.")
|
|
26
|
+
+ protected = [
|
|
27
|
+
+ annotation
|
|
28
|
+
+ for annotation in plan.annotations
|
|
29
|
+
+ if any(key in annotation.attrs for key in ("sub", "as", "say-as", "ph", "phonemes"))
|
|
30
|
+
+ ]
|
|
31
|
+
+ assert len(protected) == 5
|
|
32
|
+
+ for annotation in protected:
|
|
33
|
+
+ structural = plan.texts.structural[annotation.structural_start : annotation.structural_end]
|
|
34
|
+
+ spoken = plan.texts.spoken[annotation.spoken_start : annotation.spoken_end]
|
|
35
|
+
+ assert spoken == structural
|
|
36
|
+
+
|
|
37
|
+
+ assert any(annotation.attrs.get("sub") == "water" for annotation in protected)
|
|
38
|
+
+ assert any(annotation.attrs.get("as") == "date" for annotation in protected)
|
|
39
|
+
+ assert any(annotation.attrs.get("say-as") == "date" for annotation in protected)
|
|
40
|
+
+ assert any("ph" in annotation.attrs for annotation in protected)
|
|
41
|
+
+ assert any("phonemes" in annotation.attrs for annotation in protected)
|
|
42
|
+
+
|
|
43
|
+
+ assert len(plan.preparation.replacements) == 1
|
|
44
|
+
+ replacement = plan.preparation.replacements[0]
|
|
45
|
+
+ assert plan.texts.structural[replacement["source_start"] : replacement["source_end"]] == "5 kg"
|
|
46
|
+
+ assert (
|
|
47
|
+
+ plan.texts.spoken[replacement["output_start"] : replacement["output_end"]]
|
|
48
|
+
+ == "five kilograms"
|
|
49
|
+
+ )
|
|
50
|
+
diff --git a/utterplan/preparation.py b/utterplan/preparation.py
|
|
51
|
+
index d11bfdb..2483738 100644
|
|
52
|
+
--- a/utterplan/preparation.py
|
|
53
|
+
+++ b/utterplan/preparation.py
|
|
54
|
+
@@ -50,7 +50,9 @@ class SpokenformTextPreparer:
|
|
55
|
+
for annotation in annotations
|
|
56
|
+
if annotation.structural_start >= run.spoken_start
|
|
57
|
+
and annotation.structural_end <= run.spoken_end
|
|
58
|
+
- and (annotation.attrs.get("ph") or annotation.attrs.get("phonemes"))
|
|
59
|
+
+ and any(
|
|
60
|
+
+ key in annotation.attrs for key in ("sub", "as", "say-as", "ph", "phonemes")
|
|
61
|
+
+ )
|
|
62
|
+
]
|
|
63
|
+
kwargs: dict[str, Any] = {
|
|
64
|
+
"language": language_lookup_key(run.language),
|