utterplan 0.1.3__tar.gz → 0.3.0__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.
Files changed (230) hide show
  1. {utterplan-0.1.3 → utterplan-0.3.0}/.github/workflows/python-publish.yml +19 -9
  2. utterplan-0.3.0/.github/workflows/tests.yml +177 -0
  3. {utterplan-0.1.3 → utterplan-0.3.0}/.gitignore +3 -0
  4. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +12 -0
  5. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/audit/commit-audit.yaml +241 -0
  6. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0001.md +74 -0
  7. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0002.md +31 -0
  8. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0003.md +38 -0
  9. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0004.md +53 -0
  10. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/release.md +27 -0
  11. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/audit/commit-audit.yaml +148 -0
  12. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0001.md +85 -0
  13. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0002.md +29 -0
  14. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0003.md +32 -0
  15. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0004.md +28 -0
  16. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0005.md +30 -0
  17. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/entries/entry-0006.md +29 -0
  18. utterplan-0.3.0/.ledger/releaseledger/data/ledgers/main/releases/0.3.0/release.md +27 -0
  19. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/audit-decisions.yaml +131 -0
  20. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/audit.yaml +135 -0
  21. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/entries.yaml +165 -0
  22. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/evidence/9637182.patch +991 -0
  23. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/evidence/c52aa68.patch +3109 -0
  24. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/evidence/e49a6dd.patch +178 -0
  25. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/evidence/manifest.json +123 -0
  26. utterplan-0.3.0/.ledger/releaseledger/work/0.2.0/range.json +13 -0
  27. utterplan-0.3.0/.ledger/releaseledger/work/0.3.0/audit-decisions.yaml +72 -0
  28. utterplan-0.3.0/.ledger/releaseledger/work/0.3.0/audit.yaml +85 -0
  29. utterplan-0.3.0/.ledger/releaseledger/work/0.3.0/entries.yaml +160 -0
  30. utterplan-0.3.0/.ledger/releaseledger/work/0.3.0/evidence/49023f0.patch +6377 -0
  31. utterplan-0.3.0/.ledger/releaseledger/work/0.3.0/evidence/manifest.json +81 -0
  32. utterplan-0.3.0/.ledger/releaseledger/work/0.3.0/range.json +13 -0
  33. utterplan-0.3.0/01_todo.md +1796 -0
  34. {utterplan-0.1.3 → utterplan-0.3.0}/PKG-INFO +36 -8
  35. {utterplan-0.1.3 → utterplan-0.3.0}/README.md +31 -6
  36. {utterplan-0.1.3 → utterplan-0.3.0}/docs/architecture.md +11 -1
  37. {utterplan-0.1.3 → utterplan-0.3.0}/docs/changelog.md +38 -0
  38. {utterplan-0.1.3 → utterplan-0.3.0}/docs/cli.md +22 -8
  39. utterplan-0.3.0/docs/consumer-guide.md +114 -0
  40. {utterplan-0.1.3 → utterplan-0.3.0}/docs/coordinate-spaces.md +3 -1
  41. utterplan-0.3.0/docs/debugging.md +29 -0
  42. utterplan-0.3.0/docs/format.md +32 -0
  43. {utterplan-0.1.3 → utterplan-0.3.0}/docs/getting-started.md +10 -5
  44. {utterplan-0.1.3 → utterplan-0.3.0}/docs/index.md +1 -1
  45. {utterplan-0.1.3 → utterplan-0.3.0}/docs/pykokoro-integration.md +12 -0
  46. utterplan-0.3.0/docs/python-api.md +168 -0
  47. utterplan-0.3.0/examples/basic.py +17 -0
  48. utterplan-0.3.0/examples/chapter.ssmd +7 -0
  49. utterplan-0.3.0/examples/compile_file.py +29 -0
  50. utterplan-0.3.0/examples/inspect_plan.py +29 -0
  51. utterplan-0.3.0/examples/multilingual.py +12 -0
  52. utterplan-0.3.0/examples/ssmd_example.py +12 -0
  53. utterplan-0.3.0/plan.md +111 -0
  54. {utterplan-0.1.3 → utterplan-0.3.0}/pyproject.toml +3 -1
  55. utterplan-0.1.3/utterplan/utterplan.schema.json → utterplan-0.3.0/spec/schemas/v2.schema.json +38 -5
  56. utterplan-0.3.0/spec/schemas/v3.schema.json +407 -0
  57. utterplan-0.3.0/spec/utterplan.schema.json +407 -0
  58. utterplan-0.3.0/tests/fixtures/ssmd_09_comprehensive.ssmd +45 -0
  59. {utterplan-0.1.3 → utterplan-0.3.0}/tests/golden/basic_en.utterplan.json +20 -9
  60. utterplan-0.3.0/tests/golden/directives.utterplan.json +176 -0
  61. {utterplan-0.1.3 → utterplan-0.3.0}/tests/golden/markers.utterplan.json +23 -10
  62. {utterplan-0.1.3 → utterplan-0.3.0}/tests/golden/multilingual.utterplan.json +40 -9
  63. {utterplan-0.1.3 → utterplan-0.3.0}/tests/golden/parenthetical.utterplan.json +34 -11
  64. {utterplan-0.1.3 → utterplan-0.3.0}/tests/golden/spokenform_offsets.utterplan.json +27 -9
  65. utterplan-0.3.0/tests/golden/ssmd_09_comprehensive.utterplan.json +1669 -0
  66. {utterplan-0.1.3 → utterplan-0.3.0}/tests/golden/ssmd_breaks.utterplan.json +24 -11
  67. {utterplan-0.1.3 → utterplan-0.3.0}/tests/migration/cases.py +23 -7
  68. utterplan-0.3.0/tests/migration/goldens/multilingual_preparation.json +132 -0
  69. utterplan-0.3.0/tests/migration/goldens/spokenform_numbers.json +86 -0
  70. utterplan-0.3.0/tests/migration/goldens/ssmd_break.json +96 -0
  71. utterplan-0.3.0/tests/migration/goldens/ssmd_language_detection.json +77 -0
  72. utterplan-0.3.0/tests/migration/goldens/ssmd_marker.json +102 -0
  73. utterplan-0.3.0/tests/migration/goldens/ssmd_pronunciation.json +103 -0
  74. utterplan-0.3.0/tests/schema_history/README.md +9 -0
  75. utterplan-0.1.3/tests/golden/directives.utterplan.json → utterplan-0.3.0/tests/schema_history/v2/directives.json +18 -5
  76. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_boundaries.py +6 -2
  77. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_cli.py +28 -6
  78. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_consumer_contract.py +25 -11
  79. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_consumer_readiness.py +119 -35
  80. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_coordinates.py +6 -4
  81. utterplan-0.3.0/tests/test_directives.py +168 -0
  82. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_explain.py +39 -3
  83. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_fake_renderer.py +9 -2
  84. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_format.py +10 -1
  85. utterplan-0.3.0/tests/test_golden.py +59 -0
  86. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_identity_units.py +6 -1
  87. utterplan-0.3.0/tests/test_linguistics.py +313 -0
  88. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_migration_framework.py +37 -5
  89. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_pauses.py +31 -5
  90. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_planner.py +4 -2
  91. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_preparation.py +18 -7
  92. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_public_identity.py +3 -1
  93. utterplan-0.3.0/tests/test_schema_history.py +76 -0
  94. utterplan-0.3.0/tests/test_schema_registry.py +49 -0
  95. utterplan-0.3.0/tests/test_ssmd_09_parser.py +220 -0
  96. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/__init__.py +8 -0
  97. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/_version.py +3 -3
  98. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/cli.py +33 -7
  99. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/config.py +11 -16
  100. utterplan-0.3.0/utterplan/directives.py +206 -0
  101. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/explain.py +143 -23
  102. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/hashing.py +17 -1
  103. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/language.py +25 -11
  104. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/linguistics.py +72 -37
  105. utterplan-0.3.0/utterplan/migrations/__init__.py +12 -0
  106. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/migrations/registry.py +5 -1
  107. utterplan-0.3.0/utterplan/migrations/v1_to_v2.py +213 -0
  108. utterplan-0.3.0/utterplan/migrations/v2_to_v3.py +35 -0
  109. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/model.py +302 -37
  110. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/parsers.py +103 -114
  111. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/pauses.py +11 -1
  112. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/planner.py +115 -47
  113. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/preparation.py +5 -2
  114. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/schema_registry.py +5 -1
  115. utterplan-0.1.3/spec/utterplan.schema.json → utterplan-0.3.0/utterplan/schemas/v2.schema.json +38 -5
  116. utterplan-0.3.0/utterplan/schemas/v3.schema.json +407 -0
  117. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/units.py +9 -3
  118. utterplan-0.3.0/utterplan/utterplan.schema.json +407 -0
  119. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/versioning.py +2 -3
  120. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan.egg-info/PKG-INFO +36 -8
  121. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan.egg-info/SOURCES.txt +43 -4
  122. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan.egg-info/requires.txt +4 -1
  123. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan.egg-info/scm_file_list.json +42 -3
  124. utterplan-0.3.0/utterplan.egg-info/scm_version.json +8 -0
  125. utterplan-0.1.3/.github/workflows/tests.yml +0 -97
  126. utterplan-0.1.3/docs/consumer-guide.md +0 -79
  127. utterplan-0.1.3/docs/debugging.md +0 -25
  128. utterplan-0.1.3/docs/format.md +0 -33
  129. utterplan-0.1.3/docs/python-api.md +0 -85
  130. utterplan-0.1.3/examples/basic.py +0 -7
  131. utterplan-0.1.3/examples/compile_file.py +0 -7
  132. utterplan-0.1.3/examples/inspect_plan.py +0 -5
  133. utterplan-0.1.3/examples/multilingual.py +0 -4
  134. utterplan-0.1.3/examples/ssmd.py +0 -6
  135. utterplan-0.1.3/tests/migration/goldens/multilingual_preparation.json +0 -29
  136. utterplan-0.1.3/tests/migration/goldens/spokenform_numbers.json +0 -6
  137. utterplan-0.1.3/tests/migration/goldens/ssmd_break.json +0 -47
  138. utterplan-0.1.3/tests/migration/goldens/ssmd_language_detection.json +0 -4
  139. utterplan-0.1.3/tests/migration/goldens/ssmd_marker.json +0 -15
  140. utterplan-0.1.3/tests/migration/goldens/ssmd_pronunciation.json +0 -35
  141. utterplan-0.1.3/tests/schema_history/README.md +0 -10
  142. utterplan-0.1.3/tests/test_directives.py +0 -97
  143. utterplan-0.1.3/tests/test_golden.py +0 -16
  144. utterplan-0.1.3/tests/test_linguistics.py +0 -77
  145. utterplan-0.1.3/tests/test_schema_history.py +0 -39
  146. utterplan-0.1.3/tests/test_schema_registry.py +0 -38
  147. utterplan-0.1.3/utterplan/directives.py +0 -95
  148. utterplan-0.1.3/utterplan/migrations/__init__.py +0 -5
  149. utterplan-0.1.3/utterplan/stages/segmentation/__init__.py +0 -0
  150. utterplan-0.1.3/utterplan/stages/segmentation/phrasplit.py +0 -35
  151. utterplan-0.1.3/utterplan.egg-info/scm_version.json +0 -8
  152. {utterplan-0.1.3 → utterplan-0.3.0}/.codecrate.toml +0 -0
  153. {utterplan-0.1.3 → utterplan-0.3.0}/.github/workflows/codecov.yml +0 -0
  154. {utterplan-0.1.3 → utterplan-0.3.0}/.github/workflows/pre-commit.yml +0 -0
  155. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/ledger.toml +0 -0
  156. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/.ledger-project.toml +0 -0
  157. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/config.toml +0 -0
  158. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
  159. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0001.md +0 -0
  160. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0002.md +0 -0
  161. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0003.md +0 -0
  162. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0004.md +0 -0
  163. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/release.md +0 -0
  164. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/entries/entry-0001.md +0 -0
  165. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/release.md +0 -0
  166. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/audit/commit-audit.yaml +0 -0
  167. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0001.md +0 -0
  168. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0002.md +0 -0
  169. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0003.md +0 -0
  170. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0004.md +0 -0
  171. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0005.md +0 -0
  172. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0006.md +0 -0
  173. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/release.md +0 -0
  174. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/audit-decisions.yaml +0 -0
  175. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/audit.yaml +0 -0
  176. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/entries.yaml +0 -0
  177. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/evidence/2c64e29.patch +0 -0
  178. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/evidence/4022753.patch +0 -0
  179. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/evidence/66a88b6.patch +0 -0
  180. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/evidence/manifest.json +0 -0
  181. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/work/0.1.2/range.json +0 -0
  182. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/releaseledger/write.lock +0 -0
  183. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/taskledger/.ledger-project.toml +0 -0
  184. {utterplan-0.1.3 → utterplan-0.3.0}/.ledger/taskledger/config.toml +0 -0
  185. {utterplan-0.1.3 → utterplan-0.3.0}/.pre-commit-config.yaml +0 -0
  186. {utterplan-0.1.3 → utterplan-0.3.0}/AGENTS.md +0 -0
  187. {utterplan-0.1.3 → utterplan-0.3.0}/LICENSE +0 -0
  188. {utterplan-0.1.3 → utterplan-0.3.0}/NOTICE +0 -0
  189. {utterplan-0.1.3 → utterplan-0.3.0}/docs/Makefile +0 -0
  190. {utterplan-0.1.3 → utterplan-0.3.0}/docs/conf.py +0 -0
  191. {utterplan-0.1.3 → utterplan-0.3.0}/docs/make.bat +0 -0
  192. {utterplan-0.1.3 → utterplan-0.3.0}/docs/phase-a-completion.md +0 -0
  193. {utterplan-0.1.3 → utterplan-0.3.0}/docs/requirements.txt +0 -0
  194. {utterplan-0.1.3 → utterplan-0.3.0}/setup.cfg +0 -0
  195. {utterplan-0.1.3 → utterplan-0.3.0}/spec/schemas/v1.schema.json +0 -0
  196. {utterplan-0.1.3 → utterplan-0.3.0}/tests/__init__.py +0 -0
  197. {utterplan-0.1.3 → utterplan-0.3.0}/tests/migration/__init__.py +0 -0
  198. {utterplan-0.1.3 → utterplan-0.3.0}/tests/migration/test_semantic_migration_regressions.py +0 -0
  199. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/basic.json +0 -0
  200. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/directives.json +0 -0
  201. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/markers.json +0 -0
  202. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/multilingual.json +0 -0
  203. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/parenthetical.json +0 -0
  204. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/spokenform_offsets.json +0 -0
  205. {utterplan-0.1.3 → utterplan-0.3.0}/tests/schema_history/v1/ssmd_breaks.json +0 -0
  206. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_import_boundaries.py +0 -0
  207. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_language.py +0 -0
  208. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_schema_strict.py +0 -0
  209. {utterplan-0.1.3 → utterplan-0.3.0}/tests/test_version.py +0 -0
  210. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/__main__.py +0 -0
  211. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/diagnostics.py +0 -0
  212. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/exceptions.py +0 -0
  213. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/format.py +0 -0
  214. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/migration.py +0 -0
  215. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/py.typed +0 -0
  216. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/schemas/v1.schema.json +0 -0
  217. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/serialization.py +0 -0
  218. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/spacy_models.py +0 -0
  219. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/spans.py +0 -0
  220. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/__init__.py +0 -0
  221. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/document/__init__.py +0 -0
  222. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/document/plain.py +0 -0
  223. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/document/ssmd.py +0 -0
  224. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/preparation/__init__.py +0 -0
  225. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/preparation/identity.py +0 -0
  226. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/preparation/spokenform.py +0 -0
  227. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan/stages/protocols.py +0 -0
  228. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan.egg-info/dependency_links.txt +0 -0
  229. {utterplan-0.1.3 → utterplan-0.3.0}/utterplan.egg-info/entry_points.txt +0 -0
  230. {utterplan-0.1.3 → utterplan-0.3.0}/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 has_minimum(requirements, name, minimum):
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 in (">=", ">", "==")
54
- and Version(spec.version) >= minimum_version
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 has_minimum(requirements, "phrasplit", "0.3.9")
80
- assert has_minimum(requirements, "ssmd", "0.8.7")
81
- assert has_minimum(requirements, "spokenform", "0.4.3")
82
- assert any(name.endswith("utterplan/py.typed") for name in archive.namelist())
83
- assert any(name.endswith("utterplan/utterplan.schema.json") for name in archive.namelist())
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
@@ -219,3 +219,6 @@ __marimo__/
219
219
  context_utterplan*.*
220
220
 
221
221
  utterplan/_version.py
222
+
223
+ # Generated outputs from the runnable examples
224
+ examples/*.utterplan.json
@@ -29,3 +29,15 @@
29
29
  {"data":{"added_source_refs":[],"fields":["internal","kind"],"removed_source_refs":[],"source_refs_mode":"unchanged"},"entry_id":"entry-0005","event":"entry.updated","event_id":"event-0029","record_revisions":{"entry:0.1.3/entry-0005":2},"release_version":"0.1.3","schema_version":2}
30
30
  {"data":{"updated_rows":3},"event":"audit.updated","event_id":"event-0030","record_revisions":{"commit_audit_sheet":6},"release_version":"0.1.3","schema_version":2}
31
31
  {"data":{"released_at":"2026-09-19"},"event":"release.finalized","event_id":"event-0031","record_revisions":{"release:0.1.3":11},"release_version":"0.1.3","schema_version":2}
32
+ {"data":{"status":"planned"},"event":"release.created","event_id":"event-0032","record_revisions":{"release:0.2.0":1},"release_version":"0.2.0","schema_version":2}
33
+ {"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-0033","record_revisions":{"release:0.2.0":2},"release_version":"0.2.0","schema_version":2}
34
+ {"data":{"row_count":3},"event":"audit.created","event_id":"event-0034","record_revisions":{"commit_audit_sheet":1},"release_version":"0.2.0","schema_version":2}
35
+ {"data":{"updated_rows":3},"event":"audit.updated","event_id":"event-0035","record_revisions":{"commit_audit_sheet":2},"release_version":"0.2.0","schema_version":2}
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
+ {"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
+ {"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}
@@ -0,0 +1,241 @@
1
+ schema_version: 1
2
+ object_type: commit_audit_sheet
3
+ versioning:
4
+ schema_version: 1
5
+ revision: 4
6
+ release_version: 0.2.0
7
+ git_base_ref: v0.1.3
8
+ git_base_sha: 35a631ed89a676484546d62bccf08203f93b01e9
9
+ git_head_ref: HEAD
10
+ git_head_sha: 9637182acbf51763706e1047283b6df27def4bb8
11
+ git_range: 35a631ed89a676484546d62bccf08203f93b01e9..9637182acbf51763706e1047283b6df27def4bb8
12
+ commit_count: 3
13
+ rows:
14
+ - sha: e49a6ddc97c789574098a635fc823da885b48439
15
+ source_ref: git:e49a6ddc97c789574098a635fc823da885b48439
16
+ short_sha: e49a6dd
17
+ changed_paths:
18
+ - .gitignore
19
+ - examples/basic.py
20
+ - examples/chapter.ssmd
21
+ - examples/compile_file.py
22
+ - examples/inspect_plan.py
23
+ - examples/multilingual.py
24
+ - examples/ssmd.py
25
+ - examples/ssmd_example.py
26
+ stats:
27
+ files_changed: 8
28
+ insertions: 93
29
+ deletions: 19
30
+ inspected: true
31
+ inspected_paths:
32
+ - .gitignore
33
+ - examples/basic.py
34
+ - examples/chapter.ssmd
35
+ - examples/compile_file.py
36
+ - examples/inspect_plan.py
37
+ - examples/multilingual.py
38
+ - examples/ssmd.py
39
+ - examples/ssmd_example.py
40
+ observed_behavior:
41
+ Example scripts now run through main() entry points. basic.py,
42
+ compile_file.py, and inspect_plan.py gained argparse interfaces with defaults
43
+ resolved next to the script and outputs written beside it. multilingual.py demonstrates
44
+ inline SSMD language switching. examples/ssmd.py was replaced by examples/ssmd_example.py,
45
+ examples/chapter.ssmd was added as sample SSMD input, and generated examples/*.utterplan.json
46
+ outputs are excluded from git.
47
+ public_impact: docs
48
+ decision: accepted
49
+ stale: false
50
+ evidence_subject: "fix: examples"
51
+ target_entry_id: entry-0003
52
+ notes:
53
+ Examples-only change with documentation impact; covered by the fixed entry
54
+ for the examples rework.
55
+ - sha: c52aa684cc872d348d90972001a8c5194ae7c7f8
56
+ source_ref: git:c52aa684cc872d348d90972001a8c5194ae7c7f8
57
+ short_sha: c52aa68
58
+ changed_paths:
59
+ - README.md
60
+ - docs/architecture.md
61
+ - docs/cli.md
62
+ - docs/consumer-guide.md
63
+ - docs/coordinate-spaces.md
64
+ - docs/debugging.md
65
+ - docs/format.md
66
+ - docs/getting-started.md
67
+ - docs/index.md
68
+ - docs/pykokoro-integration.md
69
+ - docs/python-api.md
70
+ - pyproject.toml
71
+ - spec/schemas/v2.schema.json
72
+ - spec/utterplan.schema.json
73
+ - tests/golden/basic_en.utterplan.json
74
+ - tests/golden/directives.utterplan.json
75
+ - tests/golden/markers.utterplan.json
76
+ - tests/golden/multilingual.utterplan.json
77
+ - tests/golden/parenthetical.utterplan.json
78
+ - tests/golden/spokenform_offsets.utterplan.json
79
+ - tests/golden/ssmd_breaks.utterplan.json
80
+ - tests/test_cli.py
81
+ - tests/test_explain.py
82
+ - tests/test_format.py
83
+ - tests/test_linguistics.py
84
+ - tests/test_migration_framework.py
85
+ - tests/test_public_identity.py
86
+ - tests/test_schema_history.py
87
+ - tests/test_schema_registry.py
88
+ - utterplan/__init__.py
89
+ - utterplan/cli.py
90
+ - utterplan/explain.py
91
+ - utterplan/hashing.py
92
+ - utterplan/linguistics.py
93
+ - utterplan/migrations/__init__.py
94
+ - utterplan/migrations/registry.py
95
+ - utterplan/migrations/v1_to_v2.py
96
+ - utterplan/model.py
97
+ - utterplan/planner.py
98
+ - utterplan/schema_registry.py
99
+ - utterplan/schemas/v2.schema.json
100
+ - utterplan/units.py
101
+ - utterplan/utterplan.schema.json
102
+ - utterplan/versioning.py
103
+ stats:
104
+ files_changed: 44
105
+ insertions: 1714
106
+ deletions: 215
107
+ inspected: true
108
+ inspected_paths:
109
+ - README.md
110
+ - docs/architecture.md
111
+ - docs/cli.md
112
+ - docs/consumer-guide.md
113
+ - docs/coordinate-spaces.md
114
+ - docs/debugging.md
115
+ - docs/format.md
116
+ - docs/getting-started.md
117
+ - docs/index.md
118
+ - docs/pykokoro-integration.md
119
+ - docs/python-api.md
120
+ - pyproject.toml
121
+ - spec/schemas/v2.schema.json
122
+ - spec/utterplan.schema.json
123
+ - tests/golden/basic_en.utterplan.json
124
+ - tests/golden/directives.utterplan.json
125
+ - tests/golden/markers.utterplan.json
126
+ - tests/golden/multilingual.utterplan.json
127
+ - tests/golden/parenthetical.utterplan.json
128
+ - tests/golden/spokenform_offsets.utterplan.json
129
+ - tests/golden/ssmd_breaks.utterplan.json
130
+ - tests/test_cli.py
131
+ - tests/test_explain.py
132
+ - tests/test_format.py
133
+ - tests/test_linguistics.py
134
+ - tests/test_migration_framework.py
135
+ - tests/test_public_identity.py
136
+ - tests/test_schema_history.py
137
+ - tests/test_schema_registry.py
138
+ - utterplan/__init__.py
139
+ - utterplan/cli.py
140
+ - utterplan/explain.py
141
+ - utterplan/hashing.py
142
+ - utterplan/linguistics.py
143
+ - utterplan/migrations/__init__.py
144
+ - utterplan/migrations/registry.py
145
+ - utterplan/migrations/v1_to_v2.py
146
+ - utterplan/model.py
147
+ - utterplan/planner.py
148
+ - utterplan/schema_registry.py
149
+ - utterplan/schemas/v2.schema.json
150
+ - utterplan/units.py
151
+ - utterplan/utterplan.schema.json
152
+ - utterplan/versioning.py
153
+ observed_behavior:
154
+ Serialized plans gain a v2 schema that embeds token annotations
155
+ with lemma, pos, tag, and morph fields plus linguistic run records carrying provider,
156
+ model, provider_version, and model_version provenance. Unit content hashes move
157
+ to the utterplan-unit-v2 payload that includes tokens. A registered v1-to-v2 migration
158
+ upgrades older files and the schema registry keeps v1 frozen. pyproject gains
159
+ a spacy optional extra. The inspect token view and detailed explain output report
160
+ provider and model provenance and per-segment tokens.
161
+ public_impact: public
162
+ decision: accepted
163
+ stale: false
164
+ evidence_subject: "feat: add v2 with spacy tokens embedded"
165
+ target_entry_id: entry-0001
166
+ notes:
167
+ "Two entries describe this commit: the schema v2 feature owns the git source
168
+ ref and the inspect/explain output detail references it as supporting source."
169
+ - sha: 9637182acbf51763706e1047283b6df27def4bb8
170
+ source_ref: git:9637182acbf51763706e1047283b6df27def4bb8
171
+ short_sha: "9637182"
172
+ changed_paths:
173
+ - docs/cli.md
174
+ - docs/consumer-guide.md
175
+ - docs/getting-started.md
176
+ - docs/pykokoro-integration.md
177
+ - docs/python-api.md
178
+ - spec/schemas/v2.schema.json
179
+ - spec/utterplan.schema.json
180
+ - tests/golden/basic_en.utterplan.json
181
+ - tests/golden/directives.utterplan.json
182
+ - tests/golden/markers.utterplan.json
183
+ - tests/golden/multilingual.utterplan.json
184
+ - tests/golden/parenthetical.utterplan.json
185
+ - tests/golden/spokenform_offsets.utterplan.json
186
+ - tests/golden/ssmd_breaks.utterplan.json
187
+ - tests/test_cli.py
188
+ - tests/test_format.py
189
+ - tests/test_linguistics.py
190
+ - tests/test_schema_history.py
191
+ - utterplan/explain.py
192
+ - utterplan/hashing.py
193
+ - utterplan/migrations/v1_to_v2.py
194
+ - utterplan/model.py
195
+ - utterplan/planner.py
196
+ - utterplan/schemas/v2.schema.json
197
+ - utterplan/utterplan.schema.json
198
+ stats:
199
+ files_changed: 25
200
+ insertions: 159
201
+ deletions: 193
202
+ inspected: true
203
+ inspected_paths:
204
+ - docs/cli.md
205
+ - docs/consumer-guide.md
206
+ - docs/getting-started.md
207
+ - docs/pykokoro-integration.md
208
+ - docs/python-api.md
209
+ - spec/schemas/v2.schema.json
210
+ - spec/utterplan.schema.json
211
+ - tests/golden/basic_en.utterplan.json
212
+ - tests/golden/directives.utterplan.json
213
+ - tests/golden/markers.utterplan.json
214
+ - tests/golden/multilingual.utterplan.json
215
+ - tests/golden/parenthetical.utterplan.json
216
+ - tests/golden/spokenform_offsets.utterplan.json
217
+ - tests/golden/ssmd_breaks.utterplan.json
218
+ - tests/test_cli.py
219
+ - tests/test_format.py
220
+ - tests/test_linguistics.py
221
+ - tests/test_schema_history.py
222
+ - utterplan/explain.py
223
+ - utterplan/hashing.py
224
+ - utterplan/migrations/v1_to_v2.py
225
+ - utterplan/model.py
226
+ - utterplan/planner.py
227
+ - utterplan/schemas/v2.schema.json
228
+ - utterplan/utterplan.schema.json
229
+ observed_behavior:
230
+ "Formatter-only normalization: golden fixtures compacted to single-line
231
+ JSON arrays, schema required arrays expanded and rewrapped, and Python modules,
232
+ tests, and migrations rewrapped to formatter style. Hashing, validation, migration,
233
+ and planning behavior are unchanged."
234
+ public_impact: none
235
+ decision: internal
236
+ stale: false
237
+ evidence_subject: "chore: pre-commit"
238
+ target_entry_id: entry-0004
239
+ notes:
240
+ Formatting-only change with no user-visible behavior; represented by an internal
241
+ entry and excluded from the public changelog.
@@ -0,0 +1,74 @@
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.2.0
9
+ kind: added
10
+ summary:
11
+ Added schema version 2 with embedded token annotations, linguistic run provenance,
12
+ and a v1-to-v2 migration
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - git:c52aa684cc872d348d90972001a8c5194ae7c7f8
18
+ paths:
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/index.md
28
+ - docs/pykokoro-integration.md
29
+ - docs/python-api.md
30
+ - pyproject.toml
31
+ - spec/schemas/v2.schema.json
32
+ - spec/utterplan.schema.json
33
+ - tests/golden/basic_en.utterplan.json
34
+ - tests/golden/directives.utterplan.json
35
+ - tests/golden/markers.utterplan.json
36
+ - tests/golden/multilingual.utterplan.json
37
+ - tests/golden/parenthetical.utterplan.json
38
+ - tests/golden/spokenform_offsets.utterplan.json
39
+ - tests/golden/ssmd_breaks.utterplan.json
40
+ - tests/test_cli.py
41
+ - tests/test_explain.py
42
+ - tests/test_format.py
43
+ - tests/test_linguistics.py
44
+ - tests/test_migration_framework.py
45
+ - tests/test_public_identity.py
46
+ - tests/test_schema_history.py
47
+ - tests/test_schema_registry.py
48
+ - utterplan/__init__.py
49
+ - utterplan/cli.py
50
+ - utterplan/explain.py
51
+ - utterplan/hashing.py
52
+ - utterplan/linguistics.py
53
+ - utterplan/migrations/__init__.py
54
+ - utterplan/migrations/registry.py
55
+ - utterplan/migrations/v1_to_v2.py
56
+ - utterplan/model.py
57
+ - utterplan/planner.py
58
+ - utterplan/schema_registry.py
59
+ - utterplan/schemas/v2.schema.json
60
+ - utterplan/units.py
61
+ - utterplan/utterplan.schema.json
62
+ - utterplan/versioning.py
63
+ issues: []
64
+ prs: []
65
+ sources:
66
+ - git:c52aa684cc872d348d90972001a8c5194ae7c7f8
67
+ contributors:
68
+ - "@holgern"
69
+ breaking: false
70
+ internal: false
71
+ order: 1
72
+ ---
73
+
74
+ Serialized plans can now be written as schema version 2, which embeds token annotations with lemma, pos, tag, and morph fields and records linguistic run provenance (provider, model, provider version, model version). Unit content hashes move to the utterplan-unit-v2 payload that includes tokens. Older v1 files upgrade through the registered v1-to-v2 migration while v1 stays frozen, and spaCy support is available through the spacy optional extra.
@@ -0,0 +1,31 @@
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.2.0
9
+ kind: changed
10
+ summary:
11
+ Improved inspect and explain output with token annotations and linguistic
12
+ run metadata
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs: []
17
+ paths:
18
+ - utterplan/cli.py
19
+ - utterplan/explain.py
20
+ issues: []
21
+ prs: []
22
+ sources:
23
+ - git:c52aa684cc872d348d90972001a8c5194ae7c7f8
24
+ contributors:
25
+ - "@holgern"
26
+ breaking: false
27
+ internal: false
28
+ order: 2
29
+ ---
30
+
31
+ The inspect token view reports provider and model provenance alongside per-token lemma, pos, tag, and morph values. Detailed explain output lists each segment's tokens and the linguistic run information behind them.
@@ -0,0 +1,38 @@
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.2.0
9
+ kind: fixed
10
+ summary:
11
+ Fixed runnable examples with command-line arguments, path-safe outputs, and
12
+ a dedicated SSMD example script
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - git:e49a6ddc97c789574098a635fc823da885b48439
18
+ paths:
19
+ - .gitignore
20
+ - examples/basic.py
21
+ - examples/chapter.ssmd
22
+ - examples/compile_file.py
23
+ - examples/inspect_plan.py
24
+ - examples/multilingual.py
25
+ - examples/ssmd.py
26
+ - examples/ssmd_example.py
27
+ issues: []
28
+ prs: []
29
+ sources:
30
+ - git:e49a6ddc97c789574098a635fc823da885b48439
31
+ contributors:
32
+ - "@holgern"
33
+ breaking: false
34
+ internal: false
35
+ order: 3
36
+ ---
37
+
38
+ Example scripts expose main() entry points with argparse interfaces, resolve default paths next to the script instead of the current working directory, and write generated plans beside the source. examples/ssmd.py is replaced by examples/ssmd_example.py, examples/chapter.ssmd provides sample SSMD input, and generated examples/\*.utterplan.json outputs are excluded from git.