deterministic-scenario-engine 2.1.2__tar.gz → 3.0.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 (276) hide show
  1. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/MANIFEST.in +3 -0
  2. {deterministic_scenario_engine-2.1.2/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-3.0.0}/PKG-INFO +55 -49
  3. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/README.md +54 -48
  4. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/api.md +42 -0
  5. deterministic_scenario_engine-3.0.0/docs/compatibility.md +198 -0
  6. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/dsl-reference.md +4 -0
  7. deterministic_scenario_engine-3.0.0/docs/dsl2-reference.md +40 -0
  8. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/phase3-public-contract.md +2 -2
  9. deterministic_scenario_engine-3.0.0/docs/phase4-architecture.md +815 -0
  10. deterministic_scenario_engine-3.0.0/docs/phase5-architecture.md +1149 -0
  11. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/product-evidence-gate.md +29 -9
  12. deterministic_scenario_engine-3.0.0/docs/quickstart.md +255 -0
  13. deterministic_scenario_engine-3.0.0/docs/release-notes-2.2.0.md +44 -0
  14. deterministic_scenario_engine-3.0.0/docs/release-notes-3.0.0.md +45 -0
  15. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/release-process.md +16 -0
  16. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/pyproject.toml +3 -0
  17. deterministic_scenario_engine-3.0.0/setup.py +44 -0
  18. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0/src/deterministic_scenario_engine.egg-info}/PKG-INFO +55 -49
  19. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +80 -0
  20. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/__init__.py +2 -3
  21. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/_version.py +3 -2
  22. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/address.py +16 -0
  23. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/canonical.py +23 -3
  24. deterministic_scenario_engine-3.0.0/src/scenario_engine/cli/main.py +1507 -0
  25. deterministic_scenario_engine-3.0.0/src/scenario_engine/compatibility.py +50 -0
  26. deterministic_scenario_engine-3.0.0/src/scenario_engine/compatibility_fixtures.py +223 -0
  27. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/current-2.1.2-suite-run-v1.json +1 -0
  28. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-1.0.0-result-v1.json +1 -0
  29. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-2.0.0-suite-run-v1.json +1 -0
  30. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-incomplete-suite-run-v1.json +1 -0
  31. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-scenario-mismatch-suite-run-v1.json +1 -0
  32. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-engine-suite-run-v1.json +1 -0
  33. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-manifest-suite-run-v9.json +1 -0
  34. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unsupported-contract.json +1 -0
  35. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/compatibility-fixtures.json +1 -0
  36. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/inputs/current-2.1.2-suite-run-v1.inputs.json +1 -0
  37. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/inputs/historical-2.0.0-suite-run-v1.inputs.json +1 -0
  38. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/compatibility_case.yaml +10 -0
  39. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/mismatch_case.yaml +10 -0
  40. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/artifacts/manifest-v2.json +1 -0
  41. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/artifacts/result-v2.json +1 -0
  42. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/artifacts/schedule-v1.json +1 -0
  43. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/artifacts/suite-run-v2.json +1 -0
  44. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/compatibility-fixtures.json +1 -0
  45. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/references/legacy-result1.json +1 -0
  46. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/corrupt-result-hash.json +1 -0
  47. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/duplicate-key.json +1 -0
  48. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/incomplete-coordinates.json +1 -0
  49. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/invalid-type.json +1 -0
  50. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/missing-field.json +1 -0
  51. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/mixed-contract-tuple.json +1 -0
  52. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/noncanonical-address.json +1 -0
  53. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-contract.json +1 -0
  54. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-engine.json +1 -0
  55. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-field.json +1 -0
  56. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-input-hashes.json +1 -0
  57. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-root-seed.json +1 -0
  58. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-scenario-hash.json +1 -0
  59. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-schedule-hash.json +1 -0
  60. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-schedule-seed.json +1 -0
  61. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-scheduler-contract.json +1 -0
  62. deterministic_scenario_engine-3.0.0/src/scenario_engine/data/compatibility/phase5_10/scenarios/scenario-v2.yaml +15 -0
  63. deterministic_scenario_engine-3.0.0/src/scenario_engine/definition_diff.py +263 -0
  64. deterministic_scenario_engine-3.0.0/src/scenario_engine/diagnostics.py +134 -0
  65. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/dsl/__init__.py +6 -5
  66. deterministic_scenario_engine-3.0.0/src/scenario_engine/dsl/actor_runtime.py +433 -0
  67. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/dsl/compiler.py +30 -3
  68. deterministic_scenario_engine-3.0.0/src/scenario_engine/dsl/errors.py +67 -0
  69. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/dsl/models.py +39 -0
  70. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/dsl/parser.py +181 -15
  71. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/dsl/runtime.py +42 -7
  72. deterministic_scenario_engine-3.0.0/src/scenario_engine/engine2.py +618 -0
  73. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/compatibility.py +2 -2
  74. deterministic_scenario_engine-3.0.0/src/scenario_engine/impact.py +408 -0
  75. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/inspection/__init__.py +3 -1
  76. deterministic_scenario_engine-3.0.0/src/scenario_engine/inspection/explain.py +142 -0
  77. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/inspection/inspect.py +97 -3
  78. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/inspection/models.py +4 -2
  79. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/inspection/redaction.py +3 -2
  80. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/manifest.py +53 -2
  81. deterministic_scenario_engine-3.0.0/src/scenario_engine/scaffolding.py +224 -0
  82. deterministic_scenario_engine-3.0.0/src/scenario_engine/schedule.py +415 -0
  83. deterministic_scenario_engine-3.0.0/src/scenario_engine/scheduler.py +175 -0
  84. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/suite/__init__.py +2 -1
  85. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/suite/errors.py +8 -2
  86. deterministic_scenario_engine-3.0.0/src/scenario_engine/suite/publication.py +33 -0
  87. deterministic_scenario_engine-3.0.0/src/scenario_engine/trace_view.py +356 -0
  88. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_2a_reproducible_results.py +3 -2
  89. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_1_0d_documentation_examples.py +2 -2
  90. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_1_0e_packaging_release_candidate.py +2 -2
  91. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
  92. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_12_public_contract_docs_freeze.py +3 -2
  93. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_13_packaging_fresh_install_rc.py +7 -5
  94. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_1_v1_read_contract.py +1 -1
  95. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_2_composition.py +1 -1
  96. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_3_matrix.py +1 -1
  97. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_4_batch.py +1 -1
  98. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_5_inspect_explain.py +1 -1
  99. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_7_cli_product_surface.py +7 -3
  100. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_11_public_contract_docs_freeze.py +7 -3
  101. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_1_evidence_bundle_contract.py +2 -2
  102. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_7_cli_interchange_surface.py +4 -1
  103. deterministic_scenario_engine-3.0.0/tests/test_phase_4_10_canonical_workflow_help.py +76 -0
  104. deterministic_scenario_engine-3.0.0/tests/test_phase_4_11_cross_version_fixtures.py +207 -0
  105. deterministic_scenario_engine-3.0.0/tests/test_phase_4_12_hardening.py +134 -0
  106. deterministic_scenario_engine-3.0.0/tests/test_phase_4_12r2_public_fixture_packaging.py +94 -0
  107. deterministic_scenario_engine-3.0.0/tests/test_phase_4_12r3_consumer_secret_redaction.py +181 -0
  108. deterministic_scenario_engine-3.0.0/tests/test_phase_4_1_cli_replay_workflow.py +150 -0
  109. deterministic_scenario_engine-3.0.0/tests/test_phase_4_2_replay_compatibility_diagnostics.py +142 -0
  110. deterministic_scenario_engine-3.0.0/tests/test_phase_4_3_filesystem_trust_boundary.py +107 -0
  111. deterministic_scenario_engine-3.0.0/tests/test_phase_4_4_actionable_human_diagnostics.py +98 -0
  112. deterministic_scenario_engine-3.0.0/tests/test_phase_4_5_machine_readable_error_envelope.py +99 -0
  113. deterministic_scenario_engine-3.0.0/tests/test_phase_4_6_author_time_scaffolding.py +110 -0
  114. deterministic_scenario_engine-3.0.0/tests/test_phase_4_7_scenario_definition_structural_diff.py +151 -0
  115. deterministic_scenario_engine-3.0.0/tests/test_phase_4_8_conservative_impact_analysis.py +110 -0
  116. deterministic_scenario_engine-3.0.0/tests/test_phase_4_9_static_trace_viewer.py +162 -0
  117. deterministic_scenario_engine-3.0.0/tests/test_phase_5_10_public_api_cli_compatibility_fixtures.py +139 -0
  118. deterministic_scenario_engine-3.0.0/tests/test_phase_5_11_performance_security_contract_freeze.py +148 -0
  119. deterministic_scenario_engine-3.0.0/tests/test_phase_5_12a_r2_quickstart_installed_consumer.py +170 -0
  120. deterministic_scenario_engine-3.0.0/tests/test_phase_5_12b_1_version_promotion.py +107 -0
  121. deterministic_scenario_engine-3.0.0/tests/test_phase_5_1_dsl2_actor_lane_foundation.py +133 -0
  122. deterministic_scenario_engine-3.0.0/tests/test_phase_5_2_scheduler_kernel.py +151 -0
  123. deterministic_scenario_engine-3.0.0/tests/test_phase_5_3_actor_execution_shared_state.py +170 -0
  124. deterministic_scenario_engine-3.0.0/tests/test_phase_5_4_schedule_identity_replay.py +217 -0
  125. deterministic_scenario_engine-3.0.0/tests/test_phase_5_5_result2_engine2_compatibility.py +217 -0
  126. deterministic_scenario_engine-3.0.0/tests/test_phase_5_6_public_cli_python_execution.py +122 -0
  127. deterministic_scenario_engine-3.0.0/tests/test_phase_5_7_actor_aware_analysis.py +215 -0
  128. deterministic_scenario_engine-3.0.0/tests/test_phase_5_9_actor_aware_static_trace_viewer.py +156 -0
  129. deterministic_scenario_engine-2.1.2/docs/compatibility.md +0 -91
  130. deterministic_scenario_engine-2.1.2/docs/quickstart.md +0 -133
  131. deterministic_scenario_engine-2.1.2/src/scenario_engine/cli/main.py +0 -593
  132. deterministic_scenario_engine-2.1.2/src/scenario_engine/dsl/errors.py +0 -23
  133. deterministic_scenario_engine-2.1.2/src/scenario_engine/inspection/explain.py +0 -75
  134. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/LICENSE +0 -0
  135. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/determinism.md +0 -0
  136. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/hypothesis.md +0 -0
  137. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/phase2-architecture.md +0 -0
  138. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/phase2-public-contract.md +0 -0
  139. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/phase3-architecture.md +0 -0
  140. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/plugins.md +0 -0
  141. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/reproducibility.md +0 -0
  142. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/schemathesis.md +0 -0
  143. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/security-and-non-goals.md +0 -0
  144. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/sqlalchemy.md +0 -0
  145. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/docs/testing-oracle.md +0 -0
  146. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/api_scenario.yaml +0 -0
  147. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/cart.yaml +0 -0
  148. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/control_flow.yaml +0 -0
  149. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/ecommerce.yaml +0 -0
  150. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/openapi.yaml +0 -0
  151. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/oracle_fault.yaml +0 -0
  152. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_1b_cart.yaml +0 -0
  153. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_3_resources.yaml +0 -0
  154. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_4_control_flow.yaml +0 -0
  155. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_5_oracle_fault.yaml +0 -0
  156. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
  157. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
  158. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_8_api_scenario.yaml +0 -0
  159. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase0_8_openapi.yaml +0 -0
  160. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/phase3_ecommerce_evidence.py +0 -0
  161. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/resources.yaml +0 -0
  162. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/examples/sqlalchemy_rows.yaml +0 -0
  163. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/setup.cfg +0 -0
  164. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
  165. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
  166. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
  167. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
  168. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/adapters/__init__.py +0 -0
  169. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/adapters/json_file.py +0 -0
  170. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
  171. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/artifacts.py +0 -0
  172. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/batch/__init__.py +0 -0
  173. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/batch/canonical.py +0 -0
  174. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/batch/errors.py +0 -0
  175. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/batch/models.py +0 -0
  176. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/batch/runtime.py +0 -0
  177. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/cli/__init__.py +0 -0
  178. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/cli/__main__.py +0 -0
  179. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/clock.py +0 -0
  180. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/__init__.py +0 -0
  181. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/canonical.py +0 -0
  182. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/errors.py +0 -0
  183. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/models.py +0 -0
  184. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/parser.py +0 -0
  185. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/resolver.py +0 -0
  186. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/composition/runtime.py +0 -0
  187. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/context.py +0 -0
  188. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/control_flow.py +0 -0
  189. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/diff/__init__.py +0 -0
  190. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/diff/compare.py +0 -0
  191. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/diff/errors.py +0 -0
  192. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/diff/models.py +0 -0
  193. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/diff/render.py +0 -0
  194. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/diff/serialization.py +0 -0
  195. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/domain_packs/__init__.py +0 -0
  196. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/domain_packs/canonical.py +0 -0
  197. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/domain_packs/errors.py +0 -0
  198. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/domain_packs/models.py +0 -0
  199. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/domain_packs/registry.py +0 -0
  200. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/errors.py +0 -0
  201. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/__init__.py +0 -0
  202. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/adapter.py +0 -0
  203. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/canonical.py +0 -0
  204. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/errors.py +0 -0
  205. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/export.py +0 -0
  206. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/fixture.py +0 -0
  207. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/migration.py +0 -0
  208. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/models.py +0 -0
  209. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/evidence/read.py +0 -0
  210. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/expressions.py +0 -0
  211. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/faults.py +0 -0
  212. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/history.py +0 -0
  213. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/ids.py +0 -0
  214. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/inspection/errors.py +0 -0
  215. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/inspection/serialization.py +0 -0
  216. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/integrations/__init__.py +0 -0
  217. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/integrations/hypothesis.py +0 -0
  218. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/integrations/schemathesis.py +0 -0
  219. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/invariants.py +0 -0
  220. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/__init__.py +0 -0
  221. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/canonical.py +0 -0
  222. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/errors.py +0 -0
  223. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/expand.py +0 -0
  224. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/filtering.py +0 -0
  225. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/models.py +0 -0
  226. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/matrix/runtime.py +0 -0
  227. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/oracle.py +0 -0
  228. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
  229. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/oracle_assertions/errors.py +0 -0
  230. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
  231. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/oracle_assertions/models.py +0 -0
  232. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
  233. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/plugins.py +0 -0
  234. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/provenance.py +0 -0
  235. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/pytest_plugin.py +0 -0
  236. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/reference_packs/__init__.py +0 -0
  237. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
  238. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
  239. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/resources.py +0 -0
  240. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/result.py +0 -0
  241. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/rng.py +0 -0
  242. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/runner.py +0 -0
  243. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/state.py +0 -0
  244. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/suite/models.py +0 -0
  245. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/suite/read.py +0 -0
  246. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/suite/serialization.py +0 -0
  247. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/validation.py +0 -0
  248. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/src/scenario_engine/values.py +0 -0
  249. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
  250. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_1b_linear_dsl.py +0 -0
  251. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
  252. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
  253. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
  254. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_3_resources_constraints.py +0 -0
  255. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_4_control_flow.py +0 -0
  256. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_5_oracle_faults.py +0 -0
  257. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
  258. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
  259. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
  260. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
  261. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
  262. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
  263. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_1_models_serialization.py +0 -0
  264. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
  265. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
  266. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_2_9_oracle_assertions.py +0 -0
  267. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
  268. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
  269. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
  270. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_3_ordered_export.py +0 -0
  271. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
  272. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
  273. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
  274. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
  275. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_readme_pypi_portability.py +0 -0
  276. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-3.0.0}/tests/test_test_portability.py +0 -0
@@ -1,7 +1,10 @@
1
1
  include LICENSE
2
2
  include README.md
3
+ include setup.py
3
4
  include pyproject.toml
4
5
  recursive-include src *.py
6
+ recursive-include src/scenario_engine/data/compatibility/phase4_11 *
7
+ recursive-include src/scenario_engine/data/compatibility/phase5_10 *
5
8
  recursive-include docs *.md
6
9
  recursive-include examples *.yaml
7
10
  include examples/phase3_ecommerce_evidence.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deterministic-scenario-engine
3
- Version: 2.1.2
3
+ Version: 3.0.0
4
4
  Summary: Reproducible, state-consistent business scenarios with deterministic ground truth
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/imshahinul/deterministic-scenario-engine
@@ -41,10 +41,11 @@ Dynamic: license-file
41
41
 
42
42
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
43
43
  business histories and deterministic scenario suites with ground truth for
44
- testing. The source-tree distribution version is 2.1.2. Distribution release
45
- identity and deterministic compatibility identity are separate:
46
- `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
47
- public-release availability and history, see PyPI and GitHub Releases.
44
+ testing. This source tree is the prepublication distribution 3.0.0 candidate.
45
+ Distribution and execution compatibility identities are separate: public
46
+ `ENGINE_VERSION` is 2.0.0, while the preserved DSL 1 path records Engine 1.0.0.
47
+ This statement does not assert package-index publication; PyPI and GitHub
48
+ Releases remain authoritative for public-release availability and history.
48
49
 
49
50
  ## Why it exists
50
51
 
@@ -58,6 +59,9 @@ make expected behavior explicit.
58
59
  ## Core capabilities
59
60
 
60
61
  - DSL 1 parsing, compilation, and deterministic execution
62
+ - DSL 2 logical-actor execution with an explicit independent schedule seed
63
+ - canonical Result/2, Manifest/2, and Schedule/1 evidence with exact replay
64
+ - actor-aware inspect/explain and deterministic offline trace viewing
61
65
  - addressed randomness and logical IDs that do not depend on a shared stream
62
66
  - current state plus append-only committed history and artifacts
63
67
  - whole-step atomicity
@@ -72,12 +76,18 @@ make expected behavior explicit.
72
76
  - ordered Cartesian matrices with stable case IDs and original indexes
73
77
  - immutable ordered batch plans and worker-independent results
74
78
  - structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
75
- - twelve-command `scenario` CLI for local and CI workflows, including bounded
79
+ - validated scenario-definition structural diff with canonical semantic addresses
80
+ - self-contained, deterministic offline HTML trace views of local result evidence
81
+ - `scenario` CLI for local and CI workflows, including bounded
76
82
  local evidence export, verification, and lossless migration
77
83
  - explicit immutable Domain Pack registries and pure Oracle Assertions
78
84
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
79
85
  explicit adapters, closed lossless migrations, and fixture-directory export
80
86
 
87
+ The 3.0.0 candidate adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
88
+ behavior and immutable evidence. See the
89
+ [3.0.0 candidate notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
90
+
81
91
  Core execution does not require a database, network service, plugin, or property
82
92
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
83
93
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
@@ -87,57 +97,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
87
97
 
88
98
  ## Installation
89
99
 
90
- From a source checkout, use a virtual environment and install the checkout:
100
+ Supported Python versions are 3.11, 3.12, 3.13, and 3.14.
101
+
102
+ Install the published package and use its `scenario` entry point:
91
103
 
92
104
  ```console
93
- python3 -m venv /tmp/scenario-engine-docs-venv
94
- /tmp/scenario-engine-docs-venv/bin/python -m pip install .
105
+ python3 -m pip install deterministic-scenario-engine
106
+ scenario --help
95
107
  ```
96
108
 
97
109
  Install only the named optional integrations you need:
98
110
 
99
111
  ```console
100
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[pytest]'
101
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[sqlalchemy]'
102
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[hypothesis]'
103
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
112
+ python3 -m pip install 'deterministic-scenario-engine[pytest]'
113
+ python3 -m pip install 'deterministic-scenario-engine[sqlalchemy]'
114
+ python3 -m pip install 'deterministic-scenario-engine[hypothesis]'
115
+ python3 -m pip install 'deterministic-scenario-engine[schemathesis]'
104
116
  ```
105
117
 
106
- Install the package with `pip install deterministic-scenario-engine`, or select
107
- an optional integration with a command such as
108
- `pip install 'deterministic-scenario-engine[pytest]'`.
118
+ Installing the current checkout with `python3 -m pip install .` is a
119
+ source-development-only alternative.
109
120
 
110
121
  ## Minimal quickstart
111
122
 
112
- The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
113
- Run it from the repository root:
114
-
115
- ```python
116
- from pathlib import Path
117
-
118
- from scenario_engine import (
119
- compile_document,
120
- parse_yaml,
121
- replay_scenario,
122
- run_scenario,
123
- )
124
-
125
- yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
126
- document = parse_yaml(yaml_text)
127
- scenario = compile_document(document)
128
- result = run_scenario(scenario, root_seed="quickstart", run_index=0)
129
-
130
- print(result.final_state["checkout_complete"])
131
- print(result.trace())
132
- stable_bytes = result.to_json_bytes()
133
- manifest = result.manifest
134
-
135
- replayed = replay_scenario(yaml_text, manifest)
136
- assert replayed.to_json_bytes() == stable_bytes
137
- ```
138
-
139
- `ScenarioResult.final_state` is the supported state-reading property; the stable
140
- normalized result contains the same data under its `state` field.
123
+ The [canonical installed-package workflows](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
124
+ start by creating a complete portable DSL file under `/tmp/dse-demo`; they do
125
+ not require a source checkout or files from this repository. The guide covers
126
+ validate, run → replay, inspect/explain, both diff commands, conservative impact
127
+ analysis, export → verify, the static trace viewer, scaffold → validate, and the
128
+ human/machine diagnostic contract.
141
129
 
142
130
  ## Determinism contract
143
131
 
@@ -148,10 +136,24 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
148
136
  [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
149
137
  [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
150
138
 
139
+ The installed public compatibility corpus can be discovered with
140
+ `scenario --help` and exported without a source checkout using
141
+ `scenario compatibility-fixtures export --out /absolute/path`.
142
+
143
+ ## Canonical command workflows
144
+
145
+ Use the [quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md#canonical-installed-package-workflows)
146
+ as the single canonical workflow document. In particular, `scenario diff`
147
+ compares execution artifacts, while `scenario diff-definition` structurally
148
+ compares validated scenario definitions. `scenario impact` is a separate,
149
+ conservative static may-impact analysis. `scenario trace-view` creates one
150
+ self-contained offline HTML file from supported result/evidence.
151
+
151
152
  ## Documentation
152
153
 
153
154
  - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
154
155
  - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
156
+ - [DSL 2 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl2-reference.md)
155
157
  - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
156
158
  - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
157
159
  - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
@@ -162,13 +164,17 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
162
164
  - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
163
165
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
164
166
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
167
+ - [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
168
+ - [3.0.0 candidate notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
165
169
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
166
170
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
167
171
 
168
172
  ## Status
169
173
 
170
174
  Distribution release identity and deterministic engine compatibility are
171
- separate contracts. This source tree reports distribution version 2.1.2;
172
- generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
173
- GitHub Releases are the authoritative sources for public-release availability
174
- and history. The project is licensed under Apache-2.0.
175
+ separate contracts. This prepublication source tree reports distribution
176
+ version 3.0.0 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
177
+ with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
178
+ Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
179
+ 2 suite orchestration, cross-major promotion, remote URI input, and implicit
180
+ schedule-seed derivation are unsupported. The project is Apache-2.0 licensed.
@@ -4,10 +4,11 @@
4
4
 
5
5
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
6
6
  business histories and deterministic scenario suites with ground truth for
7
- testing. The source-tree distribution version is 2.1.2. Distribution release
8
- identity and deterministic compatibility identity are separate:
9
- `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
10
- public-release availability and history, see PyPI and GitHub Releases.
7
+ testing. This source tree is the prepublication distribution 3.0.0 candidate.
8
+ Distribution and execution compatibility identities are separate: public
9
+ `ENGINE_VERSION` is 2.0.0, while the preserved DSL 1 path records Engine 1.0.0.
10
+ This statement does not assert package-index publication; PyPI and GitHub
11
+ Releases remain authoritative for public-release availability and history.
11
12
 
12
13
  ## Why it exists
13
14
 
@@ -21,6 +22,9 @@ make expected behavior explicit.
21
22
  ## Core capabilities
22
23
 
23
24
  - DSL 1 parsing, compilation, and deterministic execution
25
+ - DSL 2 logical-actor execution with an explicit independent schedule seed
26
+ - canonical Result/2, Manifest/2, and Schedule/1 evidence with exact replay
27
+ - actor-aware inspect/explain and deterministic offline trace viewing
24
28
  - addressed randomness and logical IDs that do not depend on a shared stream
25
29
  - current state plus append-only committed history and artifacts
26
30
  - whole-step atomicity
@@ -35,12 +39,18 @@ make expected behavior explicit.
35
39
  - ordered Cartesian matrices with stable case IDs and original indexes
36
40
  - immutable ordered batch plans and worker-independent results
37
41
  - structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
38
- - twelve-command `scenario` CLI for local and CI workflows, including bounded
42
+ - validated scenario-definition structural diff with canonical semantic addresses
43
+ - self-contained, deterministic offline HTML trace views of local result evidence
44
+ - `scenario` CLI for local and CI workflows, including bounded
39
45
  local evidence export, verification, and lossless migration
40
46
  - explicit immutable Domain Pack registries and pure Oracle Assertions
41
47
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
42
48
  explicit adapters, closed lossless migrations, and fixture-directory export
43
49
 
50
+ The 3.0.0 candidate adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
51
+ behavior and immutable evidence. See the
52
+ [3.0.0 candidate notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
53
+
44
54
  Core execution does not require a database, network service, plugin, or property
45
55
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
46
56
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
@@ -50,57 +60,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
50
60
 
51
61
  ## Installation
52
62
 
53
- From a source checkout, use a virtual environment and install the checkout:
63
+ Supported Python versions are 3.11, 3.12, 3.13, and 3.14.
64
+
65
+ Install the published package and use its `scenario` entry point:
54
66
 
55
67
  ```console
56
- python3 -m venv /tmp/scenario-engine-docs-venv
57
- /tmp/scenario-engine-docs-venv/bin/python -m pip install .
68
+ python3 -m pip install deterministic-scenario-engine
69
+ scenario --help
58
70
  ```
59
71
 
60
72
  Install only the named optional integrations you need:
61
73
 
62
74
  ```console
63
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[pytest]'
64
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[sqlalchemy]'
65
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[hypothesis]'
66
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
75
+ python3 -m pip install 'deterministic-scenario-engine[pytest]'
76
+ python3 -m pip install 'deterministic-scenario-engine[sqlalchemy]'
77
+ python3 -m pip install 'deterministic-scenario-engine[hypothesis]'
78
+ python3 -m pip install 'deterministic-scenario-engine[schemathesis]'
67
79
  ```
68
80
 
69
- Install the package with `pip install deterministic-scenario-engine`, or select
70
- an optional integration with a command such as
71
- `pip install 'deterministic-scenario-engine[pytest]'`.
81
+ Installing the current checkout with `python3 -m pip install .` is a
82
+ source-development-only alternative.
72
83
 
73
84
  ## Minimal quickstart
74
85
 
75
- The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
76
- Run it from the repository root:
77
-
78
- ```python
79
- from pathlib import Path
80
-
81
- from scenario_engine import (
82
- compile_document,
83
- parse_yaml,
84
- replay_scenario,
85
- run_scenario,
86
- )
87
-
88
- yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
89
- document = parse_yaml(yaml_text)
90
- scenario = compile_document(document)
91
- result = run_scenario(scenario, root_seed="quickstart", run_index=0)
92
-
93
- print(result.final_state["checkout_complete"])
94
- print(result.trace())
95
- stable_bytes = result.to_json_bytes()
96
- manifest = result.manifest
97
-
98
- replayed = replay_scenario(yaml_text, manifest)
99
- assert replayed.to_json_bytes() == stable_bytes
100
- ```
101
-
102
- `ScenarioResult.final_state` is the supported state-reading property; the stable
103
- normalized result contains the same data under its `state` field.
86
+ The [canonical installed-package workflows](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
87
+ start by creating a complete portable DSL file under `/tmp/dse-demo`; they do
88
+ not require a source checkout or files from this repository. The guide covers
89
+ validate, run → replay, inspect/explain, both diff commands, conservative impact
90
+ analysis, export → verify, the static trace viewer, scaffold → validate, and the
91
+ human/machine diagnostic contract.
104
92
 
105
93
  ## Determinism contract
106
94
 
@@ -111,10 +99,24 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
111
99
  [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
112
100
  [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
113
101
 
102
+ The installed public compatibility corpus can be discovered with
103
+ `scenario --help` and exported without a source checkout using
104
+ `scenario compatibility-fixtures export --out /absolute/path`.
105
+
106
+ ## Canonical command workflows
107
+
108
+ Use the [quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md#canonical-installed-package-workflows)
109
+ as the single canonical workflow document. In particular, `scenario diff`
110
+ compares execution artifacts, while `scenario diff-definition` structurally
111
+ compares validated scenario definitions. `scenario impact` is a separate,
112
+ conservative static may-impact analysis. `scenario trace-view` creates one
113
+ self-contained offline HTML file from supported result/evidence.
114
+
114
115
  ## Documentation
115
116
 
116
117
  - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
117
118
  - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
119
+ - [DSL 2 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl2-reference.md)
118
120
  - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
119
121
  - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
120
122
  - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
@@ -125,13 +127,17 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
125
127
  - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
126
128
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
127
129
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
130
+ - [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
131
+ - [3.0.0 candidate notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
128
132
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
129
133
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
130
134
 
131
135
  ## Status
132
136
 
133
137
  Distribution release identity and deterministic engine compatibility are
134
- separate contracts. This source tree reports distribution version 2.1.2;
135
- generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
136
- GitHub Releases are the authoritative sources for public-release availability
137
- and history. The project is licensed under Apache-2.0.
138
+ separate contracts. This prepublication source tree reports distribution
139
+ version 3.0.0 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
140
+ with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
141
+ Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
142
+ 2 suite orchestration, cross-major promotion, remote URI input, and implicit
143
+ schedule-seed derivation are unsupported. The project is Apache-2.0 licensed.
@@ -8,6 +8,11 @@ exports.
8
8
 
9
9
  ## Constants and value objects
10
10
 
11
+ - `scenario_engine.ENGINE_VERSION` — public current Engine coordinate, `2.0.0`.
12
+ - `scenario_engine._version.VERSION` — distribution coordinate, `3.0.0`.
13
+ - `scenario_engine._version.ENGINE1_VERSION` — explicit historical Engine 1
14
+ execution coordinate, `1.0.0`; not added to the frozen package-root exports.
15
+
11
16
  - `ENGINE_VERSION` — engine compatibility version recorded in manifests; for
12
17
  current manifests it remains 1.0.0 independently of distribution version.
13
18
  - `MISSING` — singleton semantic missing value, distinct from null.
@@ -58,6 +63,43 @@ checks recorded compatibility before returning a replayed `ScenarioResult`.
58
63
  `evaluate_scenario()` returns `OracleEvaluation` and optionally raises on an
59
64
  oracle mismatch.
60
65
 
66
+ ### Engine 2 explicit public workflow
67
+
68
+ These names are explicitly public from `scenario_engine.engine2` (execution and
69
+ replay) and `scenario_engine.compatibility` (classification). They are not added
70
+ to the compatibility-frozen package root.
71
+
72
+ ```python
73
+ validate_engine2(yaml_text: str) -> CompiledScenarioV2
74
+ execute_engine2(scenario: CompiledScenarioV2, root_seed: str | int, schedule_seed: int, *, run_index: int = 0, inputs: Mapping[str, Any] | None = None, plugins: PluginRegistry | None = None) -> tuple[Engine2Result, ScheduleArtifact]
75
+ replay_engine2(result: Engine2Result | bytes | str, schedule: ScheduleArtifact | bytes | str, scenario: CompiledScenarioV2, *, inputs: Mapping[str, Any] | None = None, plugins: PluginRegistry | None = None) -> Engine2Result
76
+ classify_engine_contract(*, dsl_version: int | None, engine_version: str | None, result_contract: str | None, operation: str) -> CompatibilityDecision
77
+ ```
78
+
79
+ `validate_engine2()` accepts only DSL 2. `execute_engine2()` requires both the
80
+ generation root seed and independent schedule seed and returns immutable,
81
+ canonically serializable Result/2 and Schedule/1 evidence. `replay_engine2()`
82
+ strictly reads supplied evidence when bytes or text are given, independently
83
+ executes every recorded scheduler choice, verifies all coordinates and final
84
+ observations, and returns the verified immutable Result/2. It never reconstructs
85
+ missing schedule evidence. Compatibility classification is explicit and does not
86
+ execute, migrate, or promote evidence. Existing Engine 1 functions are unchanged.
87
+
88
+ `schedule_seed` is a required independent unsigned 64-bit coordinate. It is not
89
+ derived from `root_seed`. Engine 2 writes Result/2, Manifest/2, and Schedule/1;
90
+ exact replay requires the matching result, schedule, scenario, and explicit
91
+ inputs. Actor-aware analysis is exposed through the existing inspection,
92
+ explanation, impact, and offline `scenario_engine.trace_view` surfaces.
93
+
94
+ The immutable Engine 2 evidence access names are also public from their explicit
95
+ modules: `Engine2Manifest`, `Engine2Result`, `ScheduleReference`,
96
+ `read_manifest2()`, `read_result2()`, and their canonical byte functions from
97
+ `scenario_engine.engine2`; and `ScheduleArtifact`, `read_schedule()`, and its
98
+ canonical byte functions from `scenario_engine.schedule`. `read_suite_run2()` is
99
+ schema/reader validation only and does not execute a suite. Errors remain in the
100
+ `Engine2EvidenceError`/`Engine2EvidenceBoundError`/`Engine2ReplayMismatch` and
101
+ `ScheduleError`/`ScheduleBoundError`/`ScheduleReplayMismatch` families.
102
+
61
103
  ## Canonical scenario functions
62
104
 
63
105
  ```python
@@ -0,0 +1,198 @@
1
+ # Scenario Engine 3.0 compatibility contract
2
+
3
+ This document is normative for the frozen DSL, deterministic result, manifest,
4
+ and plugin contracts. Distribution metadata remains a packaging concern.
5
+
6
+ ## Version roles
7
+
8
+ Distribution `VERSION` is 3.0.0 and public `ENGINE_VERSION` is 2.0.0. The
9
+ historical Engine 1 coordinate is independently fixed at 1.0.0: every
10
+ `scenario.manifest/1` produced by DSL 1 continues to record 1.0.0. Engine 2
11
+ Manifest/2 records 2.0.0. Package version is never inferred as an execution
12
+ coordinate.
13
+
14
+ ## Canonical compatibility matrix
15
+
16
+ | DSL | Engine | Execution/replay |
17
+ | --- | --- | --- |
18
+ | integer `1` | `1.0.0` | supported: Result/1, Manifest/1, Suite Run/1 |
19
+ | integer `2` | `2.0.0` | supported: Result/2, Manifest/2, Schedule/1 |
20
+ | integer `1` | `2.0.0` | unsupported cross-major |
21
+ | integer `2` | `1.0.0` | unsupported cross-major |
22
+
23
+ Unknown, mixed-major, missing, and incomplete tuples fail closed. Reading does
24
+ not silently migrate evidence. Suite Run/2 support is schema/reader-only and
25
+ does not provide Engine 2 suite orchestration.
26
+
27
+ Engine SemVer has these meanings:
28
+
29
+ * **Major:** breaks a public API, accepted DSL, result schema, manifest schema,
30
+ replay gate, or deterministic semantic contract.
31
+ * **Minor:** adds backward-compatible behavior or a newly and explicitly
32
+ versioned deterministic algorithm.
33
+ * **Patch:** makes backward-compatible corrections without silently changing
34
+ deterministic bytes inside the documented contract. A correctness or
35
+ security correction that must change such bytes requires an explicit
36
+ compatibility/version response.
37
+
38
+ ## DSL 1.0
39
+
40
+ DSL version 1 is the integer `1`, never a boolean. Unknown fields are errors.
41
+ Accepted syntax, defaults, order, and types are not silently reinterpreted;
42
+ breaking changes require a new DSL version and/or major engine contract.
43
+
44
+ Parsing uses safe YAML construction. Duplicate mapping keys at every depth,
45
+ aliases, merge keys, arbitrary tags, floats as semantic values, and non-string
46
+ semantic mapping keys are rejected. Plain `true` and `false` are booleans;
47
+ legacy YAML 1.1 words (`yes`, `no`, `on`, `off`) are strings. Decimal integer
48
+ syntax is accepted; ambiguous legacy integer forms are strings. Standard null
49
+ spellings resolve to null. Semantic decimal, datetime, duration, and missing
50
+ values use their explicit typed wrappers.
51
+
52
+ Arithmetic operators accept only integers (excluding booleans) and finite
53
+ `Decimal` values. Addition, subtraction, and multiplication return an integer
54
+ for two integer operands and a `Decimal` if either operand is decimal. Division
55
+ always returns `Decimal`; division by zero is an expression error. Decimal
56
+ operations use precision 28 with round-half-even and never the caller's ambient
57
+ decimal context. Strings, lists, booleans, null, missing, duration, and arbitrary
58
+ Python operator overloads are not arithmetic operands.
59
+
60
+ Optional empty-container behavior remains compatibility-frozen: `validators`,
61
+ `invariants`, and `faults` may be empty; `resources`, `constraints`, and
62
+ `subflows` may not be explicitly empty. Empty `oracle.expected.constraints` and
63
+ `oracle.expected.invariants` collections are accepted.
64
+
65
+ ## Result and manifest
66
+
67
+ `ScenarioResult` required stable normalized top-level fields are `artifacts`,
68
+ `clock`, `history`, `manifest`, `next`, `scenario_id`, `state`, and
69
+ `terminal_transition`. `provenance` is optional stable and appears only when it
70
+ has records. `next` is retained as a compatibility alias and is always identical
71
+ to `terminal_transition`. Runner, resources, and snapshot backing fields are
72
+ internal and not separately serialized.
73
+
74
+ Artifact fields are `address`, `id`, `name`, `type`, and `value`. History fields
75
+ are `address`, `artifacts`, `faults_applied`, `patch`, `post`, `pre`, `timestamp`,
76
+ and `transition`. Addresses are canonical JSON strings. Provenance and manifest
77
+ records use their normalized public mappings. Canonical result bytes are UTF-8,
78
+ semantic normalization, sorted keys, compact comma/colon separators, and no
79
+ trailing newline.
80
+
81
+ The stable manifest fields are `root_seed`, `scenario_canonical_hash`,
82
+ `engine_version`, `dsl_version`, `input_resource_hashes`,
83
+ `domain_pack_versions`, `generator_versions`, `rng_algorithm_version`,
84
+ `id_algorithm_version`, `locale`, `reference_clock_start`, and `run_index`.
85
+ Mappings normalize in key order. `domain_pack_versions` is reserved and must be
86
+ empty; replay rejects it otherwise. All other fields are active execution
87
+ coordinates or compatibility gates. A future additive field needs explicit
88
+ default and reader rules; unknown data is not silently treated as compatible.
89
+
90
+ Exact replay requires a compatible recorded engine contract, DSL version,
91
+ RNG/ID and generator/plugin algorithm versions, canonical scenario hash,
92
+ input/resource hashes, root seed, run index, locale, reference clock, and other
93
+ explicit execution context. Each engine requires its exact immutable execution
94
+ coordinate and compatibility-tuple match. Unsupported cross-version replay fails
95
+ explicitly; indefinite replay across incompatible future major versions is not
96
+ promised.
97
+
98
+ ## Cross-version assurance
99
+
100
+ Inspection support is intentionally independent from replay support: an artifact
101
+ may remain safely inspectable while exact replay is rejected. Migration is an
102
+ explicit, non-destructive operation and is available only for already-supported
103
+ routes; reading never silently migrates an artifact. Unsupported and unknown
104
+ contracts or versions fail closed rather than being treated as current-compatible.
105
+
106
+ These boundaries are tested against a small immutable corpus whose bytes,
107
+ provenance, SHA-256 values, and per-operation expectations are frozen under the
108
+ `scenario.compatibility-fixtures/1` manifest. The corpus represents selected
109
+ public states and synthetic negative cases; it is not a promise of universal
110
+ backward compatibility.
111
+
112
+ ### Consuming the compatibility fixture bundle
113
+
114
+ Starting only from an installed Scenario Engine, discover this workflow through
115
+ `scenario --help`, then export the complete frozen corpus to an absent absolute
116
+ local directory (no source checkout or network access is required):
117
+
118
+ ```sh
119
+ scenario compatibility-fixtures export --out /absolute/path/phase4_11
120
+ cd /absolute/path/phase4_11
121
+ ```
122
+
123
+ The fixture manifest's optional `scenario_resource` and `inputs_resource`
124
+ fields identify the immutable public resources needed to construct replay
125
+ commands. The bundle contains current, historical, and synthetic artifacts for
126
+ replay, inspect, migrate, and compatibility exercises. Its bytes are frozen.
127
+ `--inputs` takes a bounded JSON object, so the companion file is read as the
128
+ argument instead of copying a magic value into shell quoting.
129
+
130
+ The current fixture replays with its published scenario and inputs:
131
+
132
+ ```sh
133
+ scenario --json replay artifacts/current-2.1.2-suite-run-v1.json \
134
+ --scenario scenarios/compatibility_case.yaml \
135
+ --inputs "$(cat inputs/current-2.1.2-suite-run-v1.inputs.json)"
136
+ ```
137
+
138
+ The historical 2.0.0 suite fixture remains replayable with its own published
139
+ inputs:
140
+
141
+ ```sh
142
+ scenario --json replay artifacts/historical-2.0.0-suite-run-v1.json \
143
+ --scenario scenarios/compatibility_case.yaml \
144
+ --inputs "$(cat inputs/historical-2.0.0-suite-run-v1.inputs.json)"
145
+ ```
146
+
147
+ The historical 1.0.0 result is inspectable and migratable but is not a supported
148
+ replay artifact. This command fails closed with exit 5 and
149
+ `ENGINE_VERSION_UNSUPPORTED` in the `scenario.error/1` envelope:
150
+
151
+ ```sh
152
+ scenario --json replay artifacts/historical-1.0.0-result-v1.json \
153
+ --scenario scenarios/compatibility_case.yaml
154
+ ```
155
+
156
+ Omitting the current artifact's required inputs fails with
157
+ `REPLAY_DATA_INCOMPLETE`:
158
+
159
+ ```sh
160
+ scenario --json replay artifacts/current-2.1.2-suite-run-v1.json \
161
+ --scenario scenarios/compatibility_case.yaml
162
+ ```
163
+
164
+ An unknown engine compatibility value fails closed with
165
+ `ENGINE_VERSION_UNSUPPORTED`:
166
+
167
+ ```sh
168
+ scenario --json replay artifacts/synthetic-unknown-engine-suite-run-v1.json \
169
+ --scenario scenarios/compatibility_case.yaml --inputs '{"selected":7}'
170
+ ```
171
+
172
+ Its existing lossless migration route can be exercised without repository or
173
+ maintainer-local paths. The migration CLI requires absolute local source and
174
+ destination paths, so derive both from the fixture workspace:
175
+
176
+ ```sh
177
+ BUNDLE="$(pwd)"
178
+ scenario --json migrate "$BUNDLE/artifacts/historical-1.0.0-result-v1.json" \
179
+ "$BUNDLE/migrated-historical-1.0.0" --artifact-kind result \
180
+ --schema-version scenario.result/1 --product-version 1.0.0 \
181
+ --source-sha256 ea7068eac7888857800c2784eb1e662dbe7de4bb62f89e2e26f23b9150dc3a67
182
+ ```
183
+
184
+ Replay input values are external execution data, not recoverable from their
185
+ recorded fingerprints. When an artifact records required external inputs,
186
+ omitting them or supplying data that cannot be resolved fails closed with exit
187
+ 5, `REPLAY_DATA_INCOMPLETE`, and the next action
188
+ `PROVIDE_REQUIRED_REPLAY_INPUTS`; it never reveals a hash preimage.
189
+
190
+ ## Plugins
191
+
192
+ A plugin name identifies a generator family. Its version is an exact,
193
+ immutable deterministic algorithm-contract identifier and is recorded under
194
+ `plugin:<name>` in `generator_versions`. Behavior-changing implementations must
195
+ use another version. Replay requires an explicitly registered compatible name
196
+ and version; unavailable or incompatible versions fail and are never silently
197
+ substituted. Package-release and deterministic-algorithm versions may differ.
198
+ There is no discovery, migration, network retrieval, or global registry contract.
@@ -3,6 +3,10 @@
3
3
  This reference describes the frozen Scenario Engine DSL 1 grammar and semantics.
4
4
  Unknown keys are rejected in every schema-defined mapping.
5
5
 
6
+ DSL 1 remains bound to Engine 1.0.0, Result/1, Manifest/1, and Suite Run/1 in
7
+ distribution 3.0.0. Public Engine 2.0.0 does not promote or reinterpret DSL 1.
8
+ See [DSL 2](dsl2-reference.md) for logical actors.
9
+
6
10
  ## Root document
7
11
 
8
12
  Required root keys are: