utterplan 0.1.3__tar.gz → 0.2.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 (190) hide show
  1. {utterplan-0.1.3 → utterplan-0.2.0}/.gitignore +3 -0
  2. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +7 -0
  3. utterplan-0.2.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/audit/commit-audit.yaml +241 -0
  4. utterplan-0.2.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0001.md +74 -0
  5. utterplan-0.2.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0002.md +31 -0
  6. utterplan-0.2.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0003.md +38 -0
  7. utterplan-0.2.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0004.md +53 -0
  8. utterplan-0.2.0/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/release.md +27 -0
  9. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/audit-decisions.yaml +131 -0
  10. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/audit.yaml +135 -0
  11. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/entries.yaml +165 -0
  12. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/evidence/9637182.patch +991 -0
  13. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/evidence/c52aa68.patch +3109 -0
  14. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/evidence/e49a6dd.patch +178 -0
  15. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/evidence/manifest.json +123 -0
  16. utterplan-0.2.0/.ledger/releaseledger/work/0.2.0/range.json +13 -0
  17. {utterplan-0.1.3 → utterplan-0.2.0}/PKG-INFO +5 -3
  18. {utterplan-0.1.3 → utterplan-0.2.0}/README.md +2 -2
  19. {utterplan-0.1.3 → utterplan-0.2.0}/docs/architecture.md +3 -1
  20. {utterplan-0.1.3 → utterplan-0.2.0}/docs/changelog.md +16 -0
  21. {utterplan-0.1.3 → utterplan-0.2.0}/docs/cli.md +2 -3
  22. {utterplan-0.1.3 → utterplan-0.2.0}/docs/consumer-guide.md +6 -0
  23. {utterplan-0.1.3 → utterplan-0.2.0}/docs/coordinate-spaces.md +1 -1
  24. {utterplan-0.1.3 → utterplan-0.2.0}/docs/debugging.md +2 -0
  25. {utterplan-0.1.3 → utterplan-0.2.0}/docs/format.md +10 -10
  26. {utterplan-0.1.3 → utterplan-0.2.0}/docs/getting-started.md +3 -2
  27. {utterplan-0.1.3 → utterplan-0.2.0}/docs/index.md +1 -1
  28. {utterplan-0.1.3 → utterplan-0.2.0}/docs/pykokoro-integration.md +12 -0
  29. {utterplan-0.1.3 → utterplan-0.2.0}/docs/python-api.md +3 -0
  30. utterplan-0.2.0/examples/basic.py +17 -0
  31. utterplan-0.2.0/examples/chapter.ssmd +1 -0
  32. utterplan-0.2.0/examples/compile_file.py +29 -0
  33. utterplan-0.2.0/examples/inspect_plan.py +29 -0
  34. utterplan-0.2.0/examples/multilingual.py +12 -0
  35. utterplan-0.2.0/examples/ssmd_example.py +12 -0
  36. {utterplan-0.1.3 → utterplan-0.2.0}/pyproject.toml +1 -0
  37. utterplan-0.2.0/spec/schemas/v2.schema.json +311 -0
  38. {utterplan-0.1.3/utterplan → utterplan-0.2.0/spec}/utterplan.schema.json +38 -5
  39. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/basic_en.utterplan.json +18 -5
  40. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/directives.utterplan.json +18 -5
  41. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/markers.utterplan.json +21 -6
  42. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/multilingual.utterplan.json +38 -5
  43. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/parenthetical.utterplan.json +32 -7
  44. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/spokenform_offsets.utterplan.json +25 -5
  45. {utterplan-0.1.3 → utterplan-0.2.0}/tests/golden/ssmd_breaks.utterplan.json +22 -7
  46. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_cli.py +20 -5
  47. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_explain.py +6 -1
  48. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_format.py +10 -1
  49. utterplan-0.2.0/tests/test_linguistics.py +225 -0
  50. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_migration_framework.py +6 -5
  51. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_public_identity.py +1 -1
  52. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_schema_history.py +15 -5
  53. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_schema_registry.py +13 -7
  54. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/__init__.py +2 -0
  55. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/_version.py +3 -3
  56. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/cli.py +11 -2
  57. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/explain.py +31 -7
  58. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/hashing.py +17 -1
  59. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/linguistics.py +72 -37
  60. utterplan-0.2.0/utterplan/migrations/__init__.py +6 -0
  61. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/migrations/registry.py +5 -1
  62. utterplan-0.2.0/utterplan/migrations/v1_to_v2.py +213 -0
  63. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/model.py +170 -16
  64. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/planner.py +34 -6
  65. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/schema_registry.py +4 -1
  66. utterplan-0.2.0/utterplan/schemas/v2.schema.json +311 -0
  67. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/units.py +9 -3
  68. {utterplan-0.1.3/spec → utterplan-0.2.0/utterplan}/utterplan.schema.json +38 -5
  69. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/versioning.py +2 -3
  70. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/PKG-INFO +5 -3
  71. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/SOURCES.txt +19 -1
  72. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/requires.txt +3 -0
  73. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/scm_file_list.json +19 -1
  74. utterplan-0.2.0/utterplan.egg-info/scm_version.json +8 -0
  75. utterplan-0.1.3/examples/basic.py +0 -7
  76. utterplan-0.1.3/examples/compile_file.py +0 -7
  77. utterplan-0.1.3/examples/inspect_plan.py +0 -5
  78. utterplan-0.1.3/examples/multilingual.py +0 -4
  79. utterplan-0.1.3/examples/ssmd.py +0 -6
  80. utterplan-0.1.3/tests/test_linguistics.py +0 -77
  81. utterplan-0.1.3/utterplan/migrations/__init__.py +0 -5
  82. utterplan-0.1.3/utterplan.egg-info/scm_version.json +0 -8
  83. {utterplan-0.1.3 → utterplan-0.2.0}/.codecrate.toml +0 -0
  84. {utterplan-0.1.3 → utterplan-0.2.0}/.github/workflows/codecov.yml +0 -0
  85. {utterplan-0.1.3 → utterplan-0.2.0}/.github/workflows/pre-commit.yml +0 -0
  86. {utterplan-0.1.3 → utterplan-0.2.0}/.github/workflows/python-publish.yml +0 -0
  87. {utterplan-0.1.3 → utterplan-0.2.0}/.github/workflows/tests.yml +0 -0
  88. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/ledger.toml +0 -0
  89. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/.ledger-project.toml +0 -0
  90. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/config.toml +0 -0
  91. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
  92. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0001.md +0 -0
  93. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0002.md +0 -0
  94. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0003.md +0 -0
  95. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/entries/entry-0004.md +0 -0
  96. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.0/release.md +0 -0
  97. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/entries/entry-0001.md +0 -0
  98. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/release.md +0 -0
  99. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/audit/commit-audit.yaml +0 -0
  100. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0001.md +0 -0
  101. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0002.md +0 -0
  102. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0003.md +0 -0
  103. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0004.md +0 -0
  104. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0005.md +0 -0
  105. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/entries/entry-0006.md +0 -0
  106. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/data/ledgers/main/releases/0.1.3/release.md +0 -0
  107. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/audit-decisions.yaml +0 -0
  108. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/audit.yaml +0 -0
  109. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/entries.yaml +0 -0
  110. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/evidence/2c64e29.patch +0 -0
  111. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/evidence/4022753.patch +0 -0
  112. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/evidence/66a88b6.patch +0 -0
  113. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/evidence/manifest.json +0 -0
  114. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/work/0.1.2/range.json +0 -0
  115. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/releaseledger/write.lock +0 -0
  116. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/taskledger/.ledger-project.toml +0 -0
  117. {utterplan-0.1.3 → utterplan-0.2.0}/.ledger/taskledger/config.toml +0 -0
  118. {utterplan-0.1.3 → utterplan-0.2.0}/.pre-commit-config.yaml +0 -0
  119. {utterplan-0.1.3 → utterplan-0.2.0}/AGENTS.md +0 -0
  120. {utterplan-0.1.3 → utterplan-0.2.0}/LICENSE +0 -0
  121. {utterplan-0.1.3 → utterplan-0.2.0}/NOTICE +0 -0
  122. {utterplan-0.1.3 → utterplan-0.2.0}/docs/Makefile +0 -0
  123. {utterplan-0.1.3 → utterplan-0.2.0}/docs/conf.py +0 -0
  124. {utterplan-0.1.3 → utterplan-0.2.0}/docs/make.bat +0 -0
  125. {utterplan-0.1.3 → utterplan-0.2.0}/docs/phase-a-completion.md +0 -0
  126. {utterplan-0.1.3 → utterplan-0.2.0}/docs/requirements.txt +0 -0
  127. {utterplan-0.1.3 → utterplan-0.2.0}/setup.cfg +0 -0
  128. {utterplan-0.1.3 → utterplan-0.2.0}/spec/schemas/v1.schema.json +0 -0
  129. {utterplan-0.1.3 → utterplan-0.2.0}/tests/__init__.py +0 -0
  130. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/__init__.py +0 -0
  131. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/cases.py +0 -0
  132. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/goldens/multilingual_preparation.json +0 -0
  133. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/goldens/spokenform_numbers.json +0 -0
  134. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/goldens/ssmd_break.json +0 -0
  135. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/goldens/ssmd_language_detection.json +0 -0
  136. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/goldens/ssmd_marker.json +0 -0
  137. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/goldens/ssmd_pronunciation.json +0 -0
  138. {utterplan-0.1.3 → utterplan-0.2.0}/tests/migration/test_semantic_migration_regressions.py +0 -0
  139. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/README.md +0 -0
  140. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/basic.json +0 -0
  141. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/directives.json +0 -0
  142. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/markers.json +0 -0
  143. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/multilingual.json +0 -0
  144. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/parenthetical.json +0 -0
  145. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/spokenform_offsets.json +0 -0
  146. {utterplan-0.1.3 → utterplan-0.2.0}/tests/schema_history/v1/ssmd_breaks.json +0 -0
  147. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_boundaries.py +0 -0
  148. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_consumer_contract.py +0 -0
  149. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_consumer_readiness.py +0 -0
  150. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_coordinates.py +0 -0
  151. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_directives.py +0 -0
  152. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_fake_renderer.py +0 -0
  153. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_golden.py +0 -0
  154. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_identity_units.py +0 -0
  155. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_import_boundaries.py +0 -0
  156. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_language.py +0 -0
  157. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_pauses.py +0 -0
  158. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_planner.py +0 -0
  159. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_preparation.py +0 -0
  160. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_schema_strict.py +0 -0
  161. {utterplan-0.1.3 → utterplan-0.2.0}/tests/test_version.py +0 -0
  162. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/__main__.py +0 -0
  163. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/config.py +0 -0
  164. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/diagnostics.py +0 -0
  165. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/directives.py +0 -0
  166. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/exceptions.py +0 -0
  167. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/format.py +0 -0
  168. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/language.py +0 -0
  169. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/migration.py +0 -0
  170. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/parsers.py +0 -0
  171. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/pauses.py +0 -0
  172. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/preparation.py +0 -0
  173. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/py.typed +0 -0
  174. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/schemas/v1.schema.json +0 -0
  175. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/serialization.py +0 -0
  176. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/spacy_models.py +0 -0
  177. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/spans.py +0 -0
  178. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/__init__.py +0 -0
  179. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/document/__init__.py +0 -0
  180. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/document/plain.py +0 -0
  181. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/document/ssmd.py +0 -0
  182. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/preparation/__init__.py +0 -0
  183. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/preparation/identity.py +0 -0
  184. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/preparation/spokenform.py +0 -0
  185. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/protocols.py +0 -0
  186. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/segmentation/__init__.py +0 -0
  187. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan/stages/segmentation/phrasplit.py +0 -0
  188. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/dependency_links.txt +0 -0
  189. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/entry_points.txt +0 -0
  190. {utterplan-0.1.3 → utterplan-0.2.0}/utterplan.egg-info/top_level.txt +0 -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,10 @@
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}
@@ -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.
@@ -0,0 +1,53 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 1
7
+ entry_id: entry-0004
8
+ release_version: 0.2.0
9
+ kind: internal
10
+ summary: Improved formatting in schema files, golden fixtures, and Python modules
11
+ status: accepted
12
+ audience: null
13
+ scopes: []
14
+ source_refs:
15
+ - git:9637182acbf51763706e1047283b6df27def4bb8
16
+ paths:
17
+ - docs/cli.md
18
+ - docs/consumer-guide.md
19
+ - docs/getting-started.md
20
+ - docs/pykokoro-integration.md
21
+ - docs/python-api.md
22
+ - spec/schemas/v2.schema.json
23
+ - spec/utterplan.schema.json
24
+ - tests/golden/basic_en.utterplan.json
25
+ - tests/golden/directives.utterplan.json
26
+ - tests/golden/markers.utterplan.json
27
+ - tests/golden/multilingual.utterplan.json
28
+ - tests/golden/parenthetical.utterplan.json
29
+ - tests/golden/spokenform_offsets.utterplan.json
30
+ - tests/golden/ssmd_breaks.utterplan.json
31
+ - tests/test_cli.py
32
+ - tests/test_format.py
33
+ - tests/test_linguistics.py
34
+ - tests/test_schema_history.py
35
+ - utterplan/explain.py
36
+ - utterplan/hashing.py
37
+ - utterplan/migrations/v1_to_v2.py
38
+ - utterplan/model.py
39
+ - utterplan/planner.py
40
+ - utterplan/schemas/v2.schema.json
41
+ - utterplan/utterplan.schema.json
42
+ issues: []
43
+ prs: []
44
+ sources:
45
+ - git:9637182acbf51763706e1047283b6df27def4bb8
46
+ contributors:
47
+ - "@holgern"
48
+ breaking: false
49
+ internal: true
50
+ order: 4
51
+ ---
52
+
53
+ Formatter-only normalization. Golden fixtures were compacted to single-line JSON arrays, schema required arrays expanded and rewrapped, and Python sources rewrapped. No serialization, validation, migration, or planning behavior changed.
@@ -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.2.0
8
+ status: released
9
+ history_state: curated
10
+ title: null
11
+ released_at: "2026-09-22"
12
+ previous_version: 0.1.3
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: 4
20
+ artifact_count: 0
21
+ git_base_ref: v0.1.3
22
+ git_base_sha: 35a631ed89a676484546d62bccf08203f93b01e9
23
+ git_head_ref: HEAD
24
+ git_head_sha: 9637182acbf51763706e1047283b6df27def4bb8
25
+ git_range: 35a631ed89a676484546d62bccf08203f93b01e9..9637182acbf51763706e1047283b6df27def4bb8
26
+ git_commit_count: 3
27
+ ---
@@ -0,0 +1,131 @@
1
+ rows:
2
+ - sha: e49a6ddc97c789574098a635fc823da885b48439
3
+ inspected: true
4
+ inspected_paths:
5
+ - .gitignore
6
+ - examples/basic.py
7
+ - examples/chapter.ssmd
8
+ - examples/compile_file.py
9
+ - examples/inspect_plan.py
10
+ - examples/multilingual.py
11
+ - examples/ssmd.py
12
+ - examples/ssmd_example.py
13
+ observed_behavior:
14
+ "Example scripts now run through main() entry points. basic.py,
15
+ compile_file.py, and inspect_plan.py gained argparse interfaces with defaults resolved
16
+ next to the script and outputs written beside it. multilingual.py demonstrates inline
17
+ SSMD language switching. examples/ssmd.py was replaced by examples/ssmd_example.py,
18
+ examples/chapter.ssmd was added as sample SSMD input, and generated examples/*.utterplan.json
19
+ outputs are excluded from git."
20
+ public_impact: docs
21
+ decision: accepted
22
+ target_entry_key: null
23
+ target_entry_id: null
24
+ notes:
25
+ "Examples-only change with documentation impact; covered by the fixed entry
26
+ for the examples rework."
27
+ stale: false
28
+ - sha: c52aa684cc872d348d90972001a8c5194ae7c7f8
29
+ inspected: true
30
+ inspected_paths:
31
+ - README.md
32
+ - docs/architecture.md
33
+ - docs/cli.md
34
+ - docs/consumer-guide.md
35
+ - docs/coordinate-spaces.md
36
+ - docs/debugging.md
37
+ - docs/format.md
38
+ - docs/getting-started.md
39
+ - docs/index.md
40
+ - docs/pykokoro-integration.md
41
+ - docs/python-api.md
42
+ - pyproject.toml
43
+ - spec/schemas/v2.schema.json
44
+ - spec/utterplan.schema.json
45
+ - tests/golden/basic_en.utterplan.json
46
+ - tests/golden/directives.utterplan.json
47
+ - tests/golden/markers.utterplan.json
48
+ - tests/golden/multilingual.utterplan.json
49
+ - tests/golden/parenthetical.utterplan.json
50
+ - tests/golden/spokenform_offsets.utterplan.json
51
+ - tests/golden/ssmd_breaks.utterplan.json
52
+ - tests/test_cli.py
53
+ - tests/test_explain.py
54
+ - tests/test_format.py
55
+ - tests/test_linguistics.py
56
+ - tests/test_migration_framework.py
57
+ - tests/test_public_identity.py
58
+ - tests/test_schema_history.py
59
+ - tests/test_schema_registry.py
60
+ - utterplan/__init__.py
61
+ - utterplan/cli.py
62
+ - utterplan/explain.py
63
+ - utterplan/hashing.py
64
+ - utterplan/linguistics.py
65
+ - utterplan/migrations/__init__.py
66
+ - utterplan/migrations/registry.py
67
+ - utterplan/migrations/v1_to_v2.py
68
+ - utterplan/model.py
69
+ - utterplan/planner.py
70
+ - utterplan/schema_registry.py
71
+ - utterplan/schemas/v2.schema.json
72
+ - utterplan/units.py
73
+ - utterplan/utterplan.schema.json
74
+ - utterplan/versioning.py
75
+ observed_behavior:
76
+ "Serialized plans gain a v2 schema that embeds token annotations
77
+ with lemma, pos, tag, and morph fields plus linguistic run records carrying provider,
78
+ model, provider_version, and model_version provenance. Unit content hashes move
79
+ to the utterplan-unit-v2 payload that includes tokens. A registered v1-to-v2 migration
80
+ upgrades older files and the schema registry keeps v1 frozen. pyproject gains a
81
+ spacy optional extra. The inspect token view and detailed explain output report
82
+ provider and model provenance and per-segment tokens."
83
+ public_impact: public
84
+ decision: accepted
85
+ target_entry_key: null
86
+ target_entry_id: null
87
+ notes:
88
+ "Two entries describe this commit: the schema v2 feature owns the git source
89
+ ref and the inspect/explain output detail references it as supporting source."
90
+ stale: false
91
+ - sha: 9637182acbf51763706e1047283b6df27def4bb8
92
+ inspected: true
93
+ inspected_paths:
94
+ - docs/cli.md
95
+ - docs/consumer-guide.md
96
+ - docs/getting-started.md
97
+ - docs/pykokoro-integration.md
98
+ - docs/python-api.md
99
+ - spec/schemas/v2.schema.json
100
+ - spec/utterplan.schema.json
101
+ - tests/golden/basic_en.utterplan.json
102
+ - tests/golden/directives.utterplan.json
103
+ - tests/golden/markers.utterplan.json
104
+ - tests/golden/multilingual.utterplan.json
105
+ - tests/golden/parenthetical.utterplan.json
106
+ - tests/golden/spokenform_offsets.utterplan.json
107
+ - tests/golden/ssmd_breaks.utterplan.json
108
+ - tests/test_cli.py
109
+ - tests/test_format.py
110
+ - tests/test_linguistics.py
111
+ - tests/test_schema_history.py
112
+ - utterplan/explain.py
113
+ - utterplan/hashing.py
114
+ - utterplan/migrations/v1_to_v2.py
115
+ - utterplan/model.py
116
+ - utterplan/planner.py
117
+ - utterplan/schemas/v2.schema.json
118
+ - utterplan/utterplan.schema.json
119
+ observed_behavior:
120
+ "Formatter-only normalization: golden fixtures compacted to single-line
121
+ JSON arrays, schema required arrays expanded and rewrapped, and Python modules,
122
+ tests, and migrations rewrapped to formatter style. Hashing, validation, migration,
123
+ and planning behavior are unchanged."
124
+ public_impact: none
125
+ decision: internal
126
+ target_entry_key: null
127
+ target_entry_id: null
128
+ notes:
129
+ "Formatting-only change with no user-visible behavior; represented by an internal
130
+ entry and excluded from the public changelog."
131
+ stale: false