utterplan 0.6.5__tar.gz → 0.6.7__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 (257) hide show
  1. {utterplan-0.6.5 → utterplan-0.6.7}/.github/workflows/tests.yml +12 -12
  2. {utterplan-0.6.5 → utterplan-0.6.7}/AGENTS.md +1 -1
  3. utterplan-0.6.7/MANIFEST.in +2 -0
  4. {utterplan-0.6.5 → utterplan-0.6.7}/PKG-INFO +45 -72
  5. {utterplan-0.6.5 → utterplan-0.6.7}/README.md +44 -71
  6. {utterplan-0.6.5 → utterplan-0.6.7}/docs/architecture.md +97 -94
  7. utterplan-0.6.7/docs/bundles.md +89 -0
  8. {utterplan-0.6.5 → utterplan-0.6.7}/docs/changelog.md +20 -0
  9. {utterplan-0.6.5 → utterplan-0.6.7}/docs/cli.md +11 -167
  10. {utterplan-0.6.5 → utterplan-0.6.7}/docs/getting-started.md +12 -28
  11. {utterplan-0.6.5 → utterplan-0.6.7}/docs/index.md +2 -4
  12. {utterplan-0.6.5 → utterplan-0.6.7}/docs/python-api.md +14 -10
  13. {utterplan-0.6.5 → utterplan-0.6.7}/pyproject.toml +1 -1
  14. utterplan-0.6.5/tests/test_book_replan.py → utterplan-0.6.7/tests/test_bundle_book_replan.py +6 -5
  15. utterplan-0.6.5/tests/test_book_api.py → utterplan-0.6.7/tests/test_bundle_book_services.py +29 -89
  16. utterplan-0.6.5/tests/test_document_workspace.py → utterplan-0.6.7/tests/test_bundle_document_compile.py +36 -34
  17. utterplan-0.6.5/tests/test_document_render.py → utterplan-0.6.7/tests/test_bundle_document_render.py +12 -10
  18. utterplan-0.6.7/tests/test_bundle_replan.py +155 -0
  19. utterplan-0.6.7/tests/test_bundle_services.py +180 -0
  20. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_cli.py +23 -24
  21. utterplan-0.6.5/tests/test_cli_ssmdbook.py → utterplan-0.6.7/tests/test_cli_bundle_compile_book.py +93 -66
  22. utterplan-0.6.5/tests/test_cli_ssmdoc.py → utterplan-0.6.7/tests/test_cli_bundle_document.py +82 -62
  23. utterplan-0.6.5/tests/test_cli_render_book.py → utterplan-0.6.7/tests/test_cli_bundle_render_book.py +22 -21
  24. utterplan-0.6.5/tests/test_cli_render_document.py → utterplan-0.6.7/tests/test_cli_bundle_render_document.py +23 -32
  25. utterplan-0.6.5/tests/test_cli_replan_book.py → utterplan-0.6.7/tests/test_cli_bundle_replan_book.py +20 -17
  26. utterplan-0.6.7/tests/test_source_input.py +52 -0
  27. utterplan-0.6.7/tests/test_ssmd_bundle.py +262 -0
  28. utterplan-0.6.5/tests/test_ssmdbook.py → utterplan-0.6.7/tests/test_ssmd_bundle_book.py +83 -78
  29. utterplan-0.6.7/tests/test_ssmd_bundle_document.py +200 -0
  30. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/__init__.py +47 -69
  31. utterplan-0.6.5/utterplan/book_replan.py → utterplan-0.6.7/utterplan/_book_replan.py +22 -14
  32. utterplan-0.6.5/utterplan/book.py → utterplan-0.6.7/utterplan/_book_service.py +23 -16
  33. utterplan-0.6.5/utterplan/document_workspace.py → utterplan-0.6.7/utterplan/_document_service.py +53 -58
  34. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/_version.py +3 -3
  35. utterplan-0.6.7/utterplan/bundle.py +348 -0
  36. utterplan-0.6.7/utterplan/bundle_replan.py +663 -0
  37. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/cli.py +141 -426
  38. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/codecs/v4_toml.py +0 -14
  39. utterplan-0.6.7/utterplan/explain.py +295 -0
  40. utterplan-0.6.7/utterplan/source_input.py +77 -0
  41. utterplan-0.6.7/utterplan/ssmd_bundle.py +332 -0
  42. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/PKG-INFO +45 -72
  43. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/SOURCES.txt +23 -20
  44. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/scm_file_list.json +37 -20
  45. utterplan-0.6.7/utterplan.egg-info/scm_version.json +8 -0
  46. utterplan-0.6.5/MANIFEST.in +0 -2
  47. utterplan-0.6.5/docs/ssmdbook.md +0 -171
  48. utterplan-0.6.5/docs/ssmdoc.md +0 -80
  49. utterplan-0.6.5/tests/test_source_input.py +0 -104
  50. utterplan-0.6.5/tests/test_ssmdoc.py +0 -297
  51. utterplan-0.6.5/utterplan/explain.py +0 -643
  52. utterplan-0.6.5/utterplan/source_input.py +0 -123
  53. utterplan-0.6.5/utterplan/ssmdbook.py +0 -259
  54. utterplan-0.6.5/utterplan/ssmdoc.py +0 -212
  55. utterplan-0.6.5/utterplan.egg-info/scm_version.json +0 -8
  56. {utterplan-0.6.5 → utterplan-0.6.7}/.codecrate.toml +0 -0
  57. {utterplan-0.6.5 → utterplan-0.6.7}/.github/workflows/codecov.yml +0 -0
  58. {utterplan-0.6.5 → utterplan-0.6.7}/.github/workflows/pre-commit.yml +0 -0
  59. {utterplan-0.6.5 → utterplan-0.6.7}/.github/workflows/python-publish.yml +0 -0
  60. {utterplan-0.6.5 → utterplan-0.6.7}/.gitignore +0 -0
  61. {utterplan-0.6.5 → utterplan-0.6.7}/.pre-commit-config.yaml +0 -0
  62. {utterplan-0.6.5 → utterplan-0.6.7}/LICENSE +0 -0
  63. {utterplan-0.6.5 → utterplan-0.6.7}/NOTICE +0 -0
  64. {utterplan-0.6.5 → utterplan-0.6.7}/docs/Makefile +0 -0
  65. {utterplan-0.6.5 → utterplan-0.6.7}/docs/conf.py +0 -0
  66. {utterplan-0.6.5 → utterplan-0.6.7}/docs/consumer-guide.md +0 -0
  67. {utterplan-0.6.5 → utterplan-0.6.7}/docs/coordinate-spaces.md +0 -0
  68. {utterplan-0.6.5 → utterplan-0.6.7}/docs/debugging.md +0 -0
  69. {utterplan-0.6.5 → utterplan-0.6.7}/docs/format.md +0 -0
  70. {utterplan-0.6.5 → utterplan-0.6.7}/docs/make.bat +0 -0
  71. {utterplan-0.6.5 → utterplan-0.6.7}/docs/phase-a-completion.md +0 -0
  72. {utterplan-0.6.5 → utterplan-0.6.7}/docs/pykokoro-integration.md +0 -0
  73. {utterplan-0.6.5 → utterplan-0.6.7}/docs/requirements.txt +0 -0
  74. {utterplan-0.6.5 → utterplan-0.6.7}/examples/basic.py +0 -0
  75. {utterplan-0.6.5 → utterplan-0.6.7}/examples/chapter.ssmd +0 -0
  76. {utterplan-0.6.5 → utterplan-0.6.7}/examples/compile_file.py +0 -0
  77. {utterplan-0.6.5 → utterplan-0.6.7}/examples/inspect_plan.py +0 -0
  78. {utterplan-0.6.5 → utterplan-0.6.7}/examples/multilingual.py +0 -0
  79. {utterplan-0.6.5 → utterplan-0.6.7}/examples/ssmd_example.py +0 -0
  80. {utterplan-0.6.5 → utterplan-0.6.7}/setup.cfg +0 -0
  81. {utterplan-0.6.5 → utterplan-0.6.7}/spec/schemas/v1.schema.json +0 -0
  82. {utterplan-0.6.5 → utterplan-0.6.7}/spec/schemas/v2.schema.json +0 -0
  83. {utterplan-0.6.5 → utterplan-0.6.7}/spec/schemas/v3.schema.json +0 -0
  84. {utterplan-0.6.5 → utterplan-0.6.7}/spec/schemas/v4.schema.json +0 -0
  85. {utterplan-0.6.5 → utterplan-0.6.7}/spec/utterplan.schema.json +0 -0
  86. {utterplan-0.6.5 → utterplan-0.6.7}/tests/__init__.py +0 -0
  87. {utterplan-0.6.5 → utterplan-0.6.7}/tests/compiler_helpers.py +0 -0
  88. {utterplan-0.6.5 → utterplan-0.6.7}/tests/fixtures/canonical_consumer_contract.expected.toml +0 -0
  89. {utterplan-0.6.5 → utterplan-0.6.7}/tests/fixtures/canonical_consumer_contract.ssmd +0 -0
  90. {utterplan-0.6.5/tests/fixtures/ssmdoc-v1/story.ssmdoc → utterplan-0.6.7/tests/fixtures/document-bundle-v1/story.ssmd-bundle}/document.ssmd.md +0 -0
  91. {utterplan-0.6.5/tests/fixtures/ssmdoc-v1/story.ssmdoc → utterplan-0.6.7/tests/fixtures/document-bundle-v1/story.ssmd-bundle}/manifest.json +0 -0
  92. {utterplan-0.6.5 → utterplan-0.6.7}/tests/fixtures/ssmd_09_comprehensive.ssmd +0 -0
  93. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/basic_en.utterplan.toml +0 -0
  94. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/directives.utterplan.toml +0 -0
  95. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/markers.utterplan.toml +0 -0
  96. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/multilingual.utterplan.toml +0 -0
  97. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/parenthetical.utterplan.toml +0 -0
  98. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/spokenform_offsets.utterplan.toml +0 -0
  99. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/ssmd_09_comprehensive.utterplan.toml +0 -0
  100. {utterplan-0.6.5 → utterplan-0.6.7}/tests/golden/ssmd_breaks.utterplan.toml +0 -0
  101. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/__init__.py +0 -0
  102. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/cases.py +0 -0
  103. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/basic_en.utterplan.json +0 -0
  104. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/directives.utterplan.json +0 -0
  105. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/markers.utterplan.json +0 -0
  106. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/multilingual.utterplan.json +0 -0
  107. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/parenthetical.utterplan.json +0 -0
  108. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/spokenform_offsets.utterplan.json +0 -0
  109. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/ssmd_09_comprehensive.utterplan.json +0 -0
  110. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/fixtures/v4/ssmd_breaks.utterplan.json +0 -0
  111. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/goldens/multilingual_preparation.json +0 -0
  112. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/goldens/spokenform_numbers.json +0 -0
  113. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/goldens/ssmd_break.json +0 -0
  114. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/goldens/ssmd_language_detection.json +0 -0
  115. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/goldens/ssmd_marker.json +0 -0
  116. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/goldens/ssmd_pronunciation.json +0 -0
  117. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/test_legacy_json_import.py +0 -0
  118. {utterplan-0.6.5 → utterplan-0.6.7}/tests/migration/test_semantic_migration_regressions.py +0 -0
  119. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/README.md +0 -0
  120. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/basic.json +0 -0
  121. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/directives.json +0 -0
  122. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/markers.json +0 -0
  123. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/multilingual.json +0 -0
  124. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/parenthetical.json +0 -0
  125. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/spokenform_offsets.json +0 -0
  126. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v1/ssmd_breaks.json +0 -0
  127. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v2/directives.json +0 -0
  128. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v3/multilingual.json +0 -0
  129. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v3/ssmd_09_comprehensive.json +0 -0
  130. {utterplan-0.6.5 → utterplan-0.6.7}/tests/schema_history/v5/canonical_consumer_contract.toml +0 -0
  131. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_atomic_io.py +0 -0
  132. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_batch.py +0 -0
  133. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_boundaries.py +0 -0
  134. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_cli_batch.py +0 -0
  135. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_compiler.py +0 -0
  136. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_consumer_contract.py +0 -0
  137. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_consumer_readiness.py +0 -0
  138. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_coordinates.py +0 -0
  139. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_dependency_architecture.py +0 -0
  140. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_directives.py +0 -0
  141. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_explain.py +0 -0
  142. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_fake_renderer.py +0 -0
  143. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_flow_compilation.py +0 -0
  144. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_format.py +0 -0
  145. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_golden.py +0 -0
  146. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_identity_units.py +0 -0
  147. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_import_boundaries.py +0 -0
  148. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_language.py +0 -0
  149. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_linguistics.py +0 -0
  150. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_migration_framework.py +0 -0
  151. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_migration_v3_to_v4.py +0 -0
  152. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_migration_v4_to_v5.py +0 -0
  153. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_pauses.py +0 -0
  154. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_planner.py +0 -0
  155. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_preparation.py +0 -0
  156. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_preview.py +0 -0
  157. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_progress.py +0 -0
  158. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_public_identity.py +0 -0
  159. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderability.py +0 -0
  160. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderability_repair.py +0 -0
  161. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderplan_batch.py +0 -0
  162. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderplan_dependency_contract.py +0 -0
  163. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderplan_export.py +0 -0
  164. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderplan_replan.py +0 -0
  165. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_renderplan_v7_contract.py +0 -0
  166. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_replacement_provenance.py +0 -0
  167. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_role_coverage.py +0 -0
  168. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_schema_history.py +0 -0
  169. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_schema_registry.py +0 -0
  170. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_schema_strict.py +0 -0
  171. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_schema_v6_source.py +0 -0
  172. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_schema_v7.py +0 -0
  173. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_segment_topology.py +0 -0
  174. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_segmentation_adapter.py +0 -0
  175. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_segmentation_recovery.py +0 -0
  176. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_semantic_boundaries.py +0 -0
  177. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_sentence_topology.py +0 -0
  178. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_ssmd_09_parser.py +0 -0
  179. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_ssmd_substitution_preparation.py +0 -0
  180. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_token_topology.py +0 -0
  181. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_toml_format.py +0 -0
  182. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_ttsready_preparation_adapter.py +0 -0
  183. {utterplan-0.6.5 → utterplan-0.6.7}/tests/test_version.py +0 -0
  184. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/__main__.py +0 -0
  185. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/atomic_io.py +0 -0
  186. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/attempt_serialization.py +0 -0
  187. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/attempts.py +0 -0
  188. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/batch.py +0 -0
  189. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/boundaries.py +0 -0
  190. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/codecs/__init__.py +0 -0
  191. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/codecs/v5_toml.py +0 -0
  192. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/codecs/v6_toml.py +0 -0
  193. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/codecs/v7_toml.py +0 -0
  194. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/compiler.py +0 -0
  195. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/config.py +0 -0
  196. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/diagnostics.py +0 -0
  197. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/directives.py +0 -0
  198. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/exceptions.py +0 -0
  199. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/flow_projection.py +0 -0
  200. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/format.py +0 -0
  201. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/hashing.py +0 -0
  202. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/language.py +0 -0
  203. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/linguistics.py +0 -0
  204. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migration.py +0 -0
  205. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/__init__.py +0 -0
  206. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/registry.py +0 -0
  207. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/v1_to_v2.py +0 -0
  208. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/v2_to_v3.py +0 -0
  209. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/v3_to_v4.py +0 -0
  210. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/v4_to_v5.py +0 -0
  211. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/v5_to_v6.py +0 -0
  212. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/migrations/v6_to_v7.py +0 -0
  213. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/model.py +0 -0
  214. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/parsers.py +0 -0
  215. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/pauses.py +0 -0
  216. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/planner.py +0 -0
  217. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/preparation.py +0 -0
  218. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/preview.py +0 -0
  219. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/progress.py +0 -0
  220. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/py.typed +0 -0
  221. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderability.py +0 -0
  222. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderplan_batch.py +0 -0
  223. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderplan_export.py +0 -0
  224. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderplan_grouping.py +0 -0
  225. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderplan_projection.py +0 -0
  226. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderplan_replan.py +0 -0
  227. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/renderplan_workspace.py +0 -0
  228. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/role_coverage.py +0 -0
  229. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/schema_registry.py +0 -0
  230. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/schemas/v1.schema.json +0 -0
  231. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/schemas/v2.schema.json +0 -0
  232. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/schemas/v3.schema.json +0 -0
  233. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/schemas/v4.schema.json +0 -0
  234. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/segmentation.py +0 -0
  235. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/serialization.py +0 -0
  236. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/spacy_models.py +0 -0
  237. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/spans.py +0 -0
  238. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/__init__.py +0 -0
  239. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/document/__init__.py +0 -0
  240. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/document/plain.py +0 -0
  241. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/document/ssmd.py +0 -0
  242. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/preparation/__init__.py +0 -0
  243. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/preparation/identity.py +0 -0
  244. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/preparation/ssmd.py +0 -0
  245. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/preparation/ttsready.py +0 -0
  246. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/stages/protocols.py +0 -0
  247. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/token_topology.py +0 -0
  248. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/toml_codec.py +0 -0
  249. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/trace_codec.py +0 -0
  250. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/units.py +0 -0
  251. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/utterplan.schema.json +0 -0
  252. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/versioning.py +0 -0
  253. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan/workspace_paths.py +0 -0
  254. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/dependency_links.txt +0 -0
  255. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/entry_points.txt +0 -0
  256. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/requires.txt +0 -0
  257. {utterplan-0.6.5 → utterplan-0.6.7}/utterplan.egg-info/top_level.txt +0 -0
@@ -78,7 +78,7 @@ jobs:
78
78
  tests/test_renderplan_batch.py
79
79
  tests/test_renderplan_export.py
80
80
  tests/test_renderplan_replan.py
81
- tests/test_cli_render_book.py
81
+ tests/test_cli_bundle_render_book.py
82
82
  tests/test_renderplan_dependency_contract.py
83
83
  package-smoke:
84
84
  runs-on: ubuntu-latest
@@ -189,16 +189,16 @@ jobs:
189
189
  > "$RUNNER_TEMP/test.utterplan.toml"
190
190
  "$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" validate \
191
191
  "$RUNNER_TEMP/test.utterplan.toml"
192
- BOOK="$RUNNER_TEMP/render-book.smoke.ssmdbook"
193
- mkdir -p "$BOOK/chapters" "$BOOK/utterplan"
194
- cat > "$BOOK/chapters/chapter-0001.ssmd.md" <<'EOF'
192
+ BUNDLE="$RUNNER_TEMP/render-bundle.smoke.ssmd-bundle"
193
+ mkdir -p "$BUNDLE/chapters" "$BUNDLE/utterplan"
194
+ cat > "$BUNDLE/chapters/chapter-0001.ssmd.md" <<'EOF'
195
195
  ---
196
196
  ssmd_version: "0.9"
197
197
  language: en-US
198
198
  ---
199
- Installed wheel render-book smoke.
199
+ Installed wheel bundle render smoke.
200
200
  EOF
201
- cat > "$BOOK/manifest.json" <<'EOF'
201
+ cat > "$BUNDLE/manifest.json" <<'EOF'
202
202
  {
203
203
  "format": "ssmdconvert.book",
204
204
  "schema_version": 1,
@@ -214,9 +214,9 @@ jobs:
214
214
  }
215
215
  EOF
216
216
  "$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" compile \
217
- "$BOOK/chapters/chapter-0001.ssmd.md" --lang en-us --text-preparation identity \
218
- -o "$BOOK/utterplan/chapter-0001.utterplan.toml"
219
- "$RUNNER_TEMP/utterplan-wheel-venv/bin/python" - "$BOOK/narration.renderprofile.toml" <<'PY'
217
+ "$BUNDLE/chapters/chapter-0001.ssmd.md" --lang en-us --text-preparation identity \
218
+ -o "$BUNDLE/utterplan/chapter-0001.utterplan.toml"
219
+ "$RUNNER_TEMP/utterplan-wheel-venv/bin/python" - "$BUNDLE/narration.renderprofile.toml" <<'PY'
220
220
  import sys
221
221
  from pathlib import Path
222
222
 
@@ -231,9 +231,9 @@ jobs:
231
231
  )
232
232
  codec.save_profile(profile, Path(sys.argv[1]))
233
233
  PY
234
- "$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" render-book \
235
- "$BOOK" --profile "$BOOK/narration.renderprofile.toml" --chapters 1
236
- "$RUNNER_TEMP/utterplan-wheel-venv/bin/python" - "$BOOK" <<'PY'
234
+ "$RUNNER_TEMP/utterplan-wheel-venv/bin/utterplan" bundle render \
235
+ "$BUNDLE" --profile "$BUNDLE/narration.renderprofile.toml" --chapters 1
236
+ "$RUNNER_TEMP/utterplan-wheel-venv/bin/python" - "$BUNDLE" <<'PY'
237
237
  import sys
238
238
  from pathlib import Path
239
239
 
@@ -23,7 +23,7 @@ This file contains reviewed long-term project memory.
23
23
  - Package version and schema version remain independent. Migration preserves a compiled plan; replanning is a separate operation.
24
24
  - Optional compiler traces are sidecars; they must never alter executable plan content or identity.
25
25
  - UtterPlan parses SSMD 0.9 only; it does not parse SSMD 0.8 or migrate source documents (`ssmd migrate` owns that).
26
- - Book commands (`compile-book`, `render-book`) read the SSMDBook manifest only for chapter discovery, never modify the manifest or source chapters, write derived plans to separate directories, and never build book-level combined plans.
26
+ - Bundle commands accept only a canonical <name>.ssmd-bundle/ root and select book or document behavior from manifest.json. Book items are selected by manifest source_number and produce independent plans; document bundles contain one item and support only the all selector. Compilation, RenderPlan projection, and replan leave manifests and source content unchanged and never create a book-level combined plan.
27
27
  - RenderPlan projection is optional: VoiceRender creates and validates engine-backed RenderProfiles, while UtterPlan projects stored schema-v7 FlowPlans into profile-specific RenderPlans (with `renderplan-set.toml` and reports) and performs deterministic replan refinement only.
28
28
  - UtterPlan depends directly on SSMD, PhraseSplit, TTSReady, and the renderplan contract package only; production code does not import Spokenform, and spaCy stays optional best-effort enrichment.
29
29
  - Repository tests must be self-contained and must not require sibling consumer checkouts; consumer-specific compatibility testing belongs in the consumer repository.
@@ -0,0 +1,2 @@
1
+ prune .ledger
2
+ include docs/bundles.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utterplan
3
- Version: 0.6.5
3
+ Version: 0.6.7
4
4
  Summary: Engine-independent text-to-speech planning compiler and interchange format
5
5
  Author-email: Holger Nahrstaedt <nahrstaedt@gmail.com>
6
6
  License: Apache License
@@ -251,9 +251,13 @@ Dynamic: license-file
251
251
 
252
252
  UtterPlan is the canonical, engine-independent semantic compiler from one SSMD
253
253
  document (or explicitly selected plain-text document) to an executable speech
254
- plan. It produces deterministic prepared text, paragraph-local flow units, safe boundary opportunities, authored pause intents, and segment-local
255
- semantics, portable document metadata, and typed directives for
256
- independent downstream FlowPlan consumers. Its book commands read the SSMDBook manifest only for chapter discovery, never modify the manifest or source chapters, and write derived plans to separate directories. It uses TTSReady for written-to-spoken preparation and stops before G2P, synthesis, and audio.
254
+ plan. It produces deterministic prepared text, paragraph-local flow units, safe
255
+ boundary opportunities, authored pause intents, segment-local semantics,
256
+ portable document metadata, and typed directives for independent downstream
257
+ FlowPlan consumers. Its `bundle` lifecycle accepts canonical `.ssmd-bundle/`
258
+ roots and dispatches book or document behavior from `manifest.json`, without
259
+ modifying source manifests or chapters. It uses TTSReady for written-to-spoken
260
+ preparation and stops before G2P, synthesis, and audio.
257
261
 
258
262
  ## CLI
259
263
 
@@ -285,44 +289,26 @@ utterplan compile-many examples/*.ssmd --output-dir build/plans
285
289
 
286
290
  This writes one `.utterplan.toml` per source plus an atomically refreshed `compile-report.toml`. Terminal diagnostics default to warnings; `--diagnostics all` also prints informational records, while `--diagnostics none` suppresses non-failure details. Failures are always reported, and the operational report retains every diagnostic. Use `--fail-fast` to skip later inputs after a failure, `--force` to replace existing plans, or `--report PATH` to choose another report location.
287
291
 
288
- ## Compile an SSMDDoc workspace
292
+ ## Manifest-driven bundle lifecycle
289
293
 
290
- Compile one editable `.ssmdoc` directory as one SSMD document and one FlowPlan:
294
+ Use the canonical `<name>.ssmd-bundle/` directory for either a book or a single-document bundle. UtterPlan reads `manifest.json` to determine the bundle kind; chapter directories and source files are not alternate bundle roots.
291
295
 
292
296
  ```bash
293
- utterplan compile-document story.ssmdoc
297
+ utterplan bundle compile novel.ssmd-bundle --chapters 5-17
298
+ utterplan bundle compile story.ssmd-bundle
299
+ utterplan bundle render novel.ssmd-bundle --chapters 5-17 --profile narration.renderprofile.toml
300
+ utterplan bundle render story.ssmd-bundle --profile narration.renderprofile.toml
294
301
  ```
295
302
 
296
- By default this writes `story.ssmdoc/utterplan/document.utterplan.toml` and `story.ssmdoc/utterplan/compile-report.toml`. The current `document.ssmd.md` is authoritative even if its manifest digest is stale; UtterPlan leaves the source and manifest untouched. This is separate from the multi-chapter SSMDBook workflow below. See the [SSMDDoc workspace guide](docs/ssmdoc.md) for manifest safety, output options, and the Python API.
303
+ Book manifests support source-number selectors such as `5-17` or `1,3-5`; omit `--chapters` to select all chapters. A document bundle accepts only `--chapters all`. Compilation writes independent FlowPlans and an operational report under `<bundle>/utterplan/`; rendering projects saved plans into profile-specific RenderPlans under `<bundle>/renderplan/`. Source manifests and source documents remain untouched. See the [bundle guide](docs/bundles.md) for manifest contracts, safe paths, reports, and examples.
297
304
 
298
- Project the saved plan with an explicit RenderProfile:
305
+ When rendering feedback requests deterministic replanning, refine the active bundle variant and the selected book items (or the full document bundle):
299
306
 
300
307
  ```bash
301
- utterplan render-document story.ssmdoc --profile narration.renderprofile.toml
308
+ utterplan bundle replan novel.ssmd-bundle --chapters 5 --variant narration--28f616b6fe3b
302
309
  ```
303
310
 
304
- The profile-specific RenderPlan is written to a matching variant directly under `story.ssmdoc/renderplan/`.
305
-
306
- Compile a selected chapter range directly from an editable SSMDBook workspace:
307
-
308
- ```bash
309
- cd "Platform Decay - Martha Wells.ssmdbook"
310
-
311
- utterplan compile-book chapters --chapters 5-17
312
- ```
313
-
314
- The command reads the workspace manifest to discover chapters and writes independent v7 plans and a report under `utterplan/`:
315
-
316
- ```text
317
- utterplan/
318
- ├── compile-report.toml
319
- ├── chapter-0005.utterplan.toml
320
- ├── chapter-0006.utterplan.toml
321
- ├── ...
322
- └── chapter-0017.utterplan.toml
323
- ```
324
-
325
- Omit `--chapters` to compile all manifest chapters. Use comma-separated source-number selections for non-contiguous ranges, for example `utterplan compile-book chapters --chapters 1,3-5`. `--diagnostics warnings|all|none` defaults to warnings; failures are always shown and reports retain complete diagnostics. The book root itself is also accepted as input; see the [SSMDBook guide](docs/ssmdbook.md).
311
+ Replanning uses stored profile snapshots and matching preflight feedback; it does not run synthesis or modify source content.
326
312
 
327
313
  ## Logical roles and complete RenderProfiles
328
314
 
@@ -370,17 +356,17 @@ Inspect symbolic role usage without a profile, then project a document or select
370
356
 
371
357
  ```bash
372
358
  utterplan inspect story.utterplan.toml --roles
373
- utterplan render-document story.ssmdoc --profile printer-cast.renderprofile.toml
374
- utterplan render-book novel.ssmdbook --profile novel-cast.renderprofile.toml
359
+ utterplan bundle render story.ssmd-bundle --profile printer-cast.renderprofile.toml
360
+ utterplan bundle render novel.ssmd-bundle --profile novel-cast.renderprofile.toml
375
361
  ```
376
362
 
377
363
  Projection reports required and available roles and rejects incomplete coverage before writing the RenderPlan variant. The profile and its concrete role bindings remain separate from the source SSMD.
378
364
 
379
- ## From an SSMDBook to RenderPlans
365
+ ## From bundles to RenderPlans
380
366
 
381
- UtterPlan keeps one canonical semantic plan per chapter. A RenderProfile is a
367
+ UtterPlan keeps one canonical semantic plan per source item. A RenderProfile is a
382
368
  separate renderer configuration; create and validate it with VoiceRender, then
383
- project the selected saved plans into a profile-specific RenderPlan collection:
369
+ project saved plans from a canonical `.ssmd-bundle/` root:
384
370
 
385
371
  ```bash
386
372
  voicerender profile create \
@@ -391,12 +377,11 @@ voicerender profile create \
391
377
  --output narration.renderprofile.toml
392
378
  voicerender profile validate narration.renderprofile.toml
393
379
 
394
- utterplan compile-book . --chapters 5-17
395
- utterplan render-book . --chapters 5-17 --profile narration.renderprofile.toml
380
+ utterplan bundle compile novel.ssmd-bundle --chapters 5-17
381
+ utterplan bundle render novel.ssmd-bundle --chapters 5-17 --profile narration.renderprofile.toml
396
382
  ```
397
383
 
398
- The book's `utterplan/` directory remains the shared semantic source. The new
399
- command writes independent renderer-specific plans into a deterministic variant:
384
+ The shared `renderplan/` area contains a profile-specific variant:
400
385
 
401
386
  ```text
402
387
  renderplan/
@@ -413,45 +398,33 @@ first 12 hexadecimal characters of the canonical RenderProfile `profile_id`.
413
398
  Changing identity-bearing profile semantics selects a different directory, so
414
399
  multiple voices or planning policies can coexist without replacing one another.
415
400
  Each variant snapshots the canonical profile; `renderplan-set.toml` records its
416
- full identity, source profile reference, and chapter plan IDs. `--variant` changes
401
+ full identity, source profile reference, and source plan IDs. `--variant` changes
417
402
  the human label without removing the fingerprint, and `--output-root` changes the
418
403
  collection root while retaining the automatic variant directory.
419
404
 
420
- `render-book` consumes only the existing schema-v7 UtterPlans and shared
421
- RenderProfile/RenderPlan contract. VoiceRender is not required to run it: VoiceRender
422
- creates or refreshes engine-backed profiles, then preflights and renders the
423
- resulting RenderPlans. The single-file `utterplan render-plan` command remains the
424
- low-level projection and deterministic replan primitive.
405
+ `utterplan bundle render` consumes only existing schema-v7 FlowPlans and the
406
+ shared RenderProfile/RenderPlan contract. VoiceRender creates or refreshes
407
+ engine-backed profiles, then preflights and renders the resulting RenderPlans.
408
+ UtterPlan's single-file `render-plan` command remains the low-level projection and
409
+ deterministic replan primitive.
425
410
 
426
- When VoiceRender reports `preflight.replan`, use the new `replan-book` command to
427
- refine the exact active chapter plan. The operation reads the RenderProfile snapshot
428
- from the selected variant, writes a fingerprinted child RenderPlan, and updates only
429
- that chapter's active set entry. It does not replace the parent plan or rerun initial
430
- projection:
411
+ When VoiceRender reports `preflight.replan`, refine the active bundle variant
412
+ using matching feedback:
431
413
 
432
414
  ```bash
433
- # VoiceRender measures the active plans; suppose chapter 5 returns preflight.replan.
434
- voicerender render-book . \
435
- --variant narration4--28f616b6fe3b \
436
- --chapters 5 \
437
- --emphasis-policy defer-to-compose
438
-
439
- utterplan replan-book . \
440
- --variant narration4--28f616b6fe3b \
415
+ # After VoiceRender reports preflight.replan for chapter 5:
416
+ utterplan bundle replan novel.ssmd-bundle \
417
+ --variant narration--28f616b6fe3b \
441
418
  --chapters 5
442
-
443
- # Measure/render the newly active child. Repeat these last two commands if it
444
- # still reports preflight.replan; each cycle must use feedback for the active plan.
445
- voicerender render-book . \
446
- --variant narration4--28f616b6fe3b \
447
- --chapters 5 \
448
- --emphasis-policy defer-to-compose
449
419
  ```
450
420
 
451
- Use the exact variant directory name (including its profile fingerprint). `replan-book`
452
- searches `preflight-recheck.toml` before `preflight.toml` and refuses stale feedback,
453
- so a report for a parent can never be applied to its child. The single-file
454
- `render-plan --previous ... --preflight ...` operation remains available for
421
+ Ask VoiceRender to measure and render the newly active plan. If it still reports
422
+ `preflight.replan`, repeat the feedback cycle against the active child.
423
+
424
+ Use the exact variant directory name (including its profile fingerprint). Bundle
425
+ replanning searches `preflight-recheck.toml` before `preflight.toml` and refuses
426
+ stale feedback, so a report for a parent can never be applied to its child. The
427
+ single-file `render-plan --previous ... --preflight ...` operation remains available for
455
428
  low-level replanning.
456
429
 
457
430
  This orchestration does not add a splitter, renderer-specific capacity estimate, or
@@ -600,7 +573,7 @@ renderer repository rather than UtterPlan's test suite.
600
573
 
601
574
  - [Getting started](docs/getting-started.md)
602
575
  - [CLI](docs/cli.md)
603
- - [SSMDBook workflows](docs/ssmdbook.md)
576
+ - [Bundle workflows](docs/bundles.md)
604
577
  - [Format and schema](docs/format.md)
605
578
  - [Consumer guide](docs/consumer-guide.md)
606
579
  - [Architecture](docs/architecture.md)
@@ -7,9 +7,13 @@
7
7
 
8
8
  UtterPlan is the canonical, engine-independent semantic compiler from one SSMD
9
9
  document (or explicitly selected plain-text document) to an executable speech
10
- plan. It produces deterministic prepared text, paragraph-local flow units, safe boundary opportunities, authored pause intents, and segment-local
11
- semantics, portable document metadata, and typed directives for
12
- independent downstream FlowPlan consumers. Its book commands read the SSMDBook manifest only for chapter discovery, never modify the manifest or source chapters, and write derived plans to separate directories. It uses TTSReady for written-to-spoken preparation and stops before G2P, synthesis, and audio.
10
+ plan. It produces deterministic prepared text, paragraph-local flow units, safe
11
+ boundary opportunities, authored pause intents, segment-local semantics,
12
+ portable document metadata, and typed directives for independent downstream
13
+ FlowPlan consumers. Its `bundle` lifecycle accepts canonical `.ssmd-bundle/`
14
+ roots and dispatches book or document behavior from `manifest.json`, without
15
+ modifying source manifests or chapters. It uses TTSReady for written-to-spoken
16
+ preparation and stops before G2P, synthesis, and audio.
13
17
 
14
18
  ## CLI
15
19
 
@@ -41,44 +45,26 @@ utterplan compile-many examples/*.ssmd --output-dir build/plans
41
45
 
42
46
  This writes one `.utterplan.toml` per source plus an atomically refreshed `compile-report.toml`. Terminal diagnostics default to warnings; `--diagnostics all` also prints informational records, while `--diagnostics none` suppresses non-failure details. Failures are always reported, and the operational report retains every diagnostic. Use `--fail-fast` to skip later inputs after a failure, `--force` to replace existing plans, or `--report PATH` to choose another report location.
43
47
 
44
- ## Compile an SSMDDoc workspace
48
+ ## Manifest-driven bundle lifecycle
45
49
 
46
- Compile one editable `.ssmdoc` directory as one SSMD document and one FlowPlan:
50
+ Use the canonical `<name>.ssmd-bundle/` directory for either a book or a single-document bundle. UtterPlan reads `manifest.json` to determine the bundle kind; chapter directories and source files are not alternate bundle roots.
47
51
 
48
52
  ```bash
49
- utterplan compile-document story.ssmdoc
53
+ utterplan bundle compile novel.ssmd-bundle --chapters 5-17
54
+ utterplan bundle compile story.ssmd-bundle
55
+ utterplan bundle render novel.ssmd-bundle --chapters 5-17 --profile narration.renderprofile.toml
56
+ utterplan bundle render story.ssmd-bundle --profile narration.renderprofile.toml
50
57
  ```
51
58
 
52
- By default this writes `story.ssmdoc/utterplan/document.utterplan.toml` and `story.ssmdoc/utterplan/compile-report.toml`. The current `document.ssmd.md` is authoritative even if its manifest digest is stale; UtterPlan leaves the source and manifest untouched. This is separate from the multi-chapter SSMDBook workflow below. See the [SSMDDoc workspace guide](docs/ssmdoc.md) for manifest safety, output options, and the Python API.
59
+ Book manifests support source-number selectors such as `5-17` or `1,3-5`; omit `--chapters` to select all chapters. A document bundle accepts only `--chapters all`. Compilation writes independent FlowPlans and an operational report under `<bundle>/utterplan/`; rendering projects saved plans into profile-specific RenderPlans under `<bundle>/renderplan/`. Source manifests and source documents remain untouched. See the [bundle guide](docs/bundles.md) for manifest contracts, safe paths, reports, and examples.
53
60
 
54
- Project the saved plan with an explicit RenderProfile:
61
+ When rendering feedback requests deterministic replanning, refine the active bundle variant and the selected book items (or the full document bundle):
55
62
 
56
63
  ```bash
57
- utterplan render-document story.ssmdoc --profile narration.renderprofile.toml
64
+ utterplan bundle replan novel.ssmd-bundle --chapters 5 --variant narration--28f616b6fe3b
58
65
  ```
59
66
 
60
- The profile-specific RenderPlan is written to a matching variant directly under `story.ssmdoc/renderplan/`.
61
-
62
- Compile a selected chapter range directly from an editable SSMDBook workspace:
63
-
64
- ```bash
65
- cd "Platform Decay - Martha Wells.ssmdbook"
66
-
67
- utterplan compile-book chapters --chapters 5-17
68
- ```
69
-
70
- The command reads the workspace manifest to discover chapters and writes independent v7 plans and a report under `utterplan/`:
71
-
72
- ```text
73
- utterplan/
74
- ├── compile-report.toml
75
- ├── chapter-0005.utterplan.toml
76
- ├── chapter-0006.utterplan.toml
77
- ├── ...
78
- └── chapter-0017.utterplan.toml
79
- ```
80
-
81
- Omit `--chapters` to compile all manifest chapters. Use comma-separated source-number selections for non-contiguous ranges, for example `utterplan compile-book chapters --chapters 1,3-5`. `--diagnostics warnings|all|none` defaults to warnings; failures are always shown and reports retain complete diagnostics. The book root itself is also accepted as input; see the [SSMDBook guide](docs/ssmdbook.md).
67
+ Replanning uses stored profile snapshots and matching preflight feedback; it does not run synthesis or modify source content.
82
68
 
83
69
  ## Logical roles and complete RenderProfiles
84
70
 
@@ -126,17 +112,17 @@ Inspect symbolic role usage without a profile, then project a document or select
126
112
 
127
113
  ```bash
128
114
  utterplan inspect story.utterplan.toml --roles
129
- utterplan render-document story.ssmdoc --profile printer-cast.renderprofile.toml
130
- utterplan render-book novel.ssmdbook --profile novel-cast.renderprofile.toml
115
+ utterplan bundle render story.ssmd-bundle --profile printer-cast.renderprofile.toml
116
+ utterplan bundle render novel.ssmd-bundle --profile novel-cast.renderprofile.toml
131
117
  ```
132
118
 
133
119
  Projection reports required and available roles and rejects incomplete coverage before writing the RenderPlan variant. The profile and its concrete role bindings remain separate from the source SSMD.
134
120
 
135
- ## From an SSMDBook to RenderPlans
121
+ ## From bundles to RenderPlans
136
122
 
137
- UtterPlan keeps one canonical semantic plan per chapter. A RenderProfile is a
123
+ UtterPlan keeps one canonical semantic plan per source item. A RenderProfile is a
138
124
  separate renderer configuration; create and validate it with VoiceRender, then
139
- project the selected saved plans into a profile-specific RenderPlan collection:
125
+ project saved plans from a canonical `.ssmd-bundle/` root:
140
126
 
141
127
  ```bash
142
128
  voicerender profile create \
@@ -147,12 +133,11 @@ voicerender profile create \
147
133
  --output narration.renderprofile.toml
148
134
  voicerender profile validate narration.renderprofile.toml
149
135
 
150
- utterplan compile-book . --chapters 5-17
151
- utterplan render-book . --chapters 5-17 --profile narration.renderprofile.toml
136
+ utterplan bundle compile novel.ssmd-bundle --chapters 5-17
137
+ utterplan bundle render novel.ssmd-bundle --chapters 5-17 --profile narration.renderprofile.toml
152
138
  ```
153
139
 
154
- The book's `utterplan/` directory remains the shared semantic source. The new
155
- command writes independent renderer-specific plans into a deterministic variant:
140
+ The shared `renderplan/` area contains a profile-specific variant:
156
141
 
157
142
  ```text
158
143
  renderplan/
@@ -169,45 +154,33 @@ first 12 hexadecimal characters of the canonical RenderProfile `profile_id`.
169
154
  Changing identity-bearing profile semantics selects a different directory, so
170
155
  multiple voices or planning policies can coexist without replacing one another.
171
156
  Each variant snapshots the canonical profile; `renderplan-set.toml` records its
172
- full identity, source profile reference, and chapter plan IDs. `--variant` changes
157
+ full identity, source profile reference, and source plan IDs. `--variant` changes
173
158
  the human label without removing the fingerprint, and `--output-root` changes the
174
159
  collection root while retaining the automatic variant directory.
175
160
 
176
- `render-book` consumes only the existing schema-v7 UtterPlans and shared
177
- RenderProfile/RenderPlan contract. VoiceRender is not required to run it: VoiceRender
178
- creates or refreshes engine-backed profiles, then preflights and renders the
179
- resulting RenderPlans. The single-file `utterplan render-plan` command remains the
180
- low-level projection and deterministic replan primitive.
161
+ `utterplan bundle render` consumes only existing schema-v7 FlowPlans and the
162
+ shared RenderProfile/RenderPlan contract. VoiceRender creates or refreshes
163
+ engine-backed profiles, then preflights and renders the resulting RenderPlans.
164
+ UtterPlan's single-file `render-plan` command remains the low-level projection and
165
+ deterministic replan primitive.
181
166
 
182
- When VoiceRender reports `preflight.replan`, use the new `replan-book` command to
183
- refine the exact active chapter plan. The operation reads the RenderProfile snapshot
184
- from the selected variant, writes a fingerprinted child RenderPlan, and updates only
185
- that chapter's active set entry. It does not replace the parent plan or rerun initial
186
- projection:
167
+ When VoiceRender reports `preflight.replan`, refine the active bundle variant
168
+ using matching feedback:
187
169
 
188
170
  ```bash
189
- # VoiceRender measures the active plans; suppose chapter 5 returns preflight.replan.
190
- voicerender render-book . \
191
- --variant narration4--28f616b6fe3b \
192
- --chapters 5 \
193
- --emphasis-policy defer-to-compose
194
-
195
- utterplan replan-book . \
196
- --variant narration4--28f616b6fe3b \
171
+ # After VoiceRender reports preflight.replan for chapter 5:
172
+ utterplan bundle replan novel.ssmd-bundle \
173
+ --variant narration--28f616b6fe3b \
197
174
  --chapters 5
198
-
199
- # Measure/render the newly active child. Repeat these last two commands if it
200
- # still reports preflight.replan; each cycle must use feedback for the active plan.
201
- voicerender render-book . \
202
- --variant narration4--28f616b6fe3b \
203
- --chapters 5 \
204
- --emphasis-policy defer-to-compose
205
175
  ```
206
176
 
207
- Use the exact variant directory name (including its profile fingerprint). `replan-book`
208
- searches `preflight-recheck.toml` before `preflight.toml` and refuses stale feedback,
209
- so a report for a parent can never be applied to its child. The single-file
210
- `render-plan --previous ... --preflight ...` operation remains available for
177
+ Ask VoiceRender to measure and render the newly active plan. If it still reports
178
+ `preflight.replan`, repeat the feedback cycle against the active child.
179
+
180
+ Use the exact variant directory name (including its profile fingerprint). Bundle
181
+ replanning searches `preflight-recheck.toml` before `preflight.toml` and refuses
182
+ stale feedback, so a report for a parent can never be applied to its child. The
183
+ single-file `render-plan --previous ... --preflight ...` operation remains available for
211
184
  low-level replanning.
212
185
 
213
186
  This orchestration does not add a splitter, renderer-specific capacity estimate, or
@@ -356,7 +329,7 @@ renderer repository rather than UtterPlan's test suite.
356
329
 
357
330
  - [Getting started](docs/getting-started.md)
358
331
  - [CLI](docs/cli.md)
359
- - [SSMDBook workflows](docs/ssmdbook.md)
332
+ - [Bundle workflows](docs/bundles.md)
360
333
  - [Format and schema](docs/format.md)
361
334
  - [Consumer guide](docs/consumer-guide.md)
362
335
  - [Architecture](docs/architecture.md)