deterministic-scenario-engine 3.0.0__tar.gz → 3.0.1__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 (272) hide show
  1. {deterministic_scenario_engine-3.0.0/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-3.0.1}/PKG-INFO +24 -9
  2. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/README.md +23 -8
  3. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/api.md +3 -2
  4. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/dsl2-reference.md +2 -1
  5. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/quickstart.md +7 -2
  6. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/release-notes-3.0.0.md +12 -8
  7. deterministic_scenario_engine-3.0.1/docs/release-notes-3.0.1.md +38 -0
  8. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1/src/deterministic_scenario_engine.egg-info}/PKG-INFO +24 -9
  9. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +1 -0
  10. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/_version.py +1 -1
  11. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/cli/main.py +31 -2
  12. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0e_packaging_release_candidate.py +1 -1
  13. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
  14. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_12_public_contract_docs_freeze.py +1 -1
  15. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_13_packaging_fresh_install_rc.py +1 -1
  16. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_1_v1_read_contract.py +18 -2
  17. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_2_composition.py +1 -1
  18. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_3_matrix.py +1 -1
  19. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_4_batch.py +1 -1
  20. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_5_inspect_explain.py +1 -1
  21. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_7_cli_product_surface.py +1 -1
  22. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_11_public_contract_docs_freeze.py +1 -1
  23. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_1_evidence_bundle_contract.py +1 -1
  24. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_10_canonical_workflow_help.py +11 -0
  25. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_12a_r2_quickstart_installed_consumer.py +49 -2
  26. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_12b_1_version_promotion.py +13 -3
  27. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_6_public_cli_python_execution.py +66 -1
  28. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/LICENSE +0 -0
  29. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/MANIFEST.in +0 -0
  30. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/compatibility.md +0 -0
  31. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/determinism.md +0 -0
  32. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/dsl-reference.md +0 -0
  33. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/hypothesis.md +0 -0
  34. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/phase2-architecture.md +0 -0
  35. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/phase2-public-contract.md +0 -0
  36. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/phase3-architecture.md +0 -0
  37. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/phase3-public-contract.md +0 -0
  38. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/phase4-architecture.md +0 -0
  39. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/phase5-architecture.md +0 -0
  40. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/plugins.md +0 -0
  41. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/product-evidence-gate.md +0 -0
  42. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/release-notes-2.2.0.md +0 -0
  43. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/release-process.md +0 -0
  44. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/reproducibility.md +0 -0
  45. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/schemathesis.md +0 -0
  46. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/security-and-non-goals.md +0 -0
  47. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/sqlalchemy.md +0 -0
  48. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/docs/testing-oracle.md +0 -0
  49. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/api_scenario.yaml +0 -0
  50. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/cart.yaml +0 -0
  51. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/control_flow.yaml +0 -0
  52. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/ecommerce.yaml +0 -0
  53. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/openapi.yaml +0 -0
  54. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/oracle_fault.yaml +0 -0
  55. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_1b_cart.yaml +0 -0
  56. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_3_resources.yaml +0 -0
  57. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_4_control_flow.yaml +0 -0
  58. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_5_oracle_fault.yaml +0 -0
  59. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
  60. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
  61. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_8_api_scenario.yaml +0 -0
  62. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_8_openapi.yaml +0 -0
  63. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/phase3_ecommerce_evidence.py +0 -0
  64. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/resources.yaml +0 -0
  65. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/examples/sqlalchemy_rows.yaml +0 -0
  66. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/pyproject.toml +0 -0
  67. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/setup.cfg +0 -0
  68. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/setup.py +0 -0
  69. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
  70. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
  71. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
  72. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
  73. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/__init__.py +0 -0
  74. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/adapters/__init__.py +0 -0
  75. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/adapters/json_file.py +0 -0
  76. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
  77. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/address.py +0 -0
  78. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/artifacts.py +0 -0
  79. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/__init__.py +0 -0
  80. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/canonical.py +0 -0
  81. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/errors.py +0 -0
  82. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/models.py +0 -0
  83. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/runtime.py +0 -0
  84. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/canonical.py +0 -0
  85. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/cli/__init__.py +0 -0
  86. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/cli/__main__.py +0 -0
  87. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/clock.py +0 -0
  88. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/compatibility.py +0 -0
  89. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/compatibility_fixtures.py +0 -0
  90. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/__init__.py +0 -0
  91. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/canonical.py +0 -0
  92. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/errors.py +0 -0
  93. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/models.py +0 -0
  94. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/parser.py +0 -0
  95. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/resolver.py +0 -0
  96. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/runtime.py +0 -0
  97. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/context.py +0 -0
  98. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/control_flow.py +0 -0
  99. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/current-2.1.2-suite-run-v1.json +0 -0
  100. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-1.0.0-result-v1.json +0 -0
  101. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-2.0.0-suite-run-v1.json +0 -0
  102. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-incomplete-suite-run-v1.json +0 -0
  103. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-scenario-mismatch-suite-run-v1.json +0 -0
  104. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-engine-suite-run-v1.json +0 -0
  105. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-manifest-suite-run-v9.json +0 -0
  106. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unsupported-contract.json +0 -0
  107. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/compatibility-fixtures.json +0 -0
  108. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/inputs/current-2.1.2-suite-run-v1.inputs.json +0 -0
  109. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/inputs/historical-2.0.0-suite-run-v1.inputs.json +0 -0
  110. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/scenarios/compatibility_case.yaml +0 -0
  111. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/scenarios/mismatch_case.yaml +0 -0
  112. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/artifacts/manifest-v2.json +0 -0
  113. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/artifacts/result-v2.json +0 -0
  114. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/artifacts/schedule-v1.json +0 -0
  115. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/artifacts/suite-run-v2.json +0 -0
  116. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/compatibility-fixtures.json +0 -0
  117. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/references/legacy-result1.json +0 -0
  118. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/corrupt-result-hash.json +0 -0
  119. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/duplicate-key.json +0 -0
  120. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/incomplete-coordinates.json +0 -0
  121. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/invalid-type.json +0 -0
  122. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/missing-field.json +0 -0
  123. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/mixed-contract-tuple.json +0 -0
  124. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/noncanonical-address.json +0 -0
  125. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-contract.json +0 -0
  126. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-engine.json +0 -0
  127. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-field.json +0 -0
  128. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-input-hashes.json +0 -0
  129. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-root-seed.json +0 -0
  130. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-scenario-hash.json +0 -0
  131. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-schedule-hash.json +0 -0
  132. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-schedule-seed.json +0 -0
  133. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-scheduler-contract.json +0 -0
  134. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase5_10/scenarios/scenario-v2.yaml +0 -0
  135. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/definition_diff.py +0 -0
  136. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diagnostics.py +0 -0
  137. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/__init__.py +0 -0
  138. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/compare.py +0 -0
  139. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/errors.py +0 -0
  140. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/models.py +0 -0
  141. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/render.py +0 -0
  142. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/serialization.py +0 -0
  143. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/__init__.py +0 -0
  144. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/canonical.py +0 -0
  145. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/errors.py +0 -0
  146. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/models.py +0 -0
  147. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/registry.py +0 -0
  148. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/__init__.py +0 -0
  149. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/actor_runtime.py +0 -0
  150. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/compiler.py +0 -0
  151. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/errors.py +0 -0
  152. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/models.py +0 -0
  153. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/parser.py +0 -0
  154. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/runtime.py +0 -0
  155. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/engine2.py +0 -0
  156. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/errors.py +0 -0
  157. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/__init__.py +0 -0
  158. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/adapter.py +0 -0
  159. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/canonical.py +0 -0
  160. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/compatibility.py +0 -0
  161. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/errors.py +0 -0
  162. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/export.py +0 -0
  163. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/fixture.py +0 -0
  164. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/migration.py +0 -0
  165. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/models.py +0 -0
  166. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/read.py +0 -0
  167. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/expressions.py +0 -0
  168. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/faults.py +0 -0
  169. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/history.py +0 -0
  170. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/ids.py +0 -0
  171. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/impact.py +0 -0
  172. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/__init__.py +0 -0
  173. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/errors.py +0 -0
  174. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/explain.py +0 -0
  175. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/inspect.py +0 -0
  176. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/models.py +0 -0
  177. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/redaction.py +0 -0
  178. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/serialization.py +0 -0
  179. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/integrations/__init__.py +0 -0
  180. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/integrations/hypothesis.py +0 -0
  181. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/integrations/schemathesis.py +0 -0
  182. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/invariants.py +0 -0
  183. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/manifest.py +0 -0
  184. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/__init__.py +0 -0
  185. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/canonical.py +0 -0
  186. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/errors.py +0 -0
  187. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/expand.py +0 -0
  188. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/filtering.py +0 -0
  189. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/models.py +0 -0
  190. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/runtime.py +0 -0
  191. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle.py +0 -0
  192. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
  193. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/errors.py +0 -0
  194. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
  195. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/models.py +0 -0
  196. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
  197. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/plugins.py +0 -0
  198. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/provenance.py +0 -0
  199. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/pytest_plugin.py +0 -0
  200. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/reference_packs/__init__.py +0 -0
  201. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
  202. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
  203. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/resources.py +0 -0
  204. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/result.py +0 -0
  205. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/rng.py +0 -0
  206. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/runner.py +0 -0
  207. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/scaffolding.py +0 -0
  208. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/schedule.py +0 -0
  209. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/scheduler.py +0 -0
  210. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/state.py +0 -0
  211. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/__init__.py +0 -0
  212. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/errors.py +0 -0
  213. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/models.py +0 -0
  214. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/publication.py +0 -0
  215. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/read.py +0 -0
  216. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/serialization.py +0 -0
  217. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/trace_view.py +0 -0
  218. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/validation.py +0 -0
  219. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/values.py +0 -0
  220. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
  221. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1b_linear_dsl.py +0 -0
  222. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
  223. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
  224. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_2a_reproducible_results.py +0 -0
  225. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
  226. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_3_resources_constraints.py +0 -0
  227. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_4_control_flow.py +0 -0
  228. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_5_oracle_faults.py +0 -0
  229. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
  230. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
  231. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
  232. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
  233. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
  234. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0d_documentation_examples.py +0 -0
  235. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
  236. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_1_models_serialization.py +0 -0
  237. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
  238. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
  239. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_9_oracle_assertions.py +0 -0
  240. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
  241. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
  242. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
  243. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_3_ordered_export.py +0 -0
  244. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
  245. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
  246. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
  247. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_7_cli_interchange_surface.py +0 -0
  248. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
  249. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_11_cross_version_fixtures.py +0 -0
  250. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_12_hardening.py +0 -0
  251. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_12r2_public_fixture_packaging.py +0 -0
  252. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_12r3_consumer_secret_redaction.py +0 -0
  253. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_1_cli_replay_workflow.py +0 -0
  254. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_2_replay_compatibility_diagnostics.py +0 -0
  255. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_3_filesystem_trust_boundary.py +0 -0
  256. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_4_actionable_human_diagnostics.py +0 -0
  257. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_5_machine_readable_error_envelope.py +0 -0
  258. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_6_author_time_scaffolding.py +0 -0
  259. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_7_scenario_definition_structural_diff.py +0 -0
  260. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_8_conservative_impact_analysis.py +0 -0
  261. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_9_static_trace_viewer.py +0 -0
  262. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_10_public_api_cli_compatibility_fixtures.py +0 -0
  263. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_11_performance_security_contract_freeze.py +0 -0
  264. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_1_dsl2_actor_lane_foundation.py +0 -0
  265. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_2_scheduler_kernel.py +0 -0
  266. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_3_actor_execution_shared_state.py +0 -0
  267. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_4_schedule_identity_replay.py +0 -0
  268. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_5_result2_engine2_compatibility.py +0 -0
  269. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_7_actor_aware_analysis.py +0 -0
  270. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_5_9_actor_aware_static_trace_viewer.py +0 -0
  271. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_readme_pypi_portability.py +0 -0
  272. {deterministic_scenario_engine-3.0.0 → deterministic_scenario_engine-3.0.1}/tests/test_test_portability.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deterministic-scenario-engine
3
- Version: 3.0.0
3
+ Version: 3.0.1
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,11 +41,13 @@ 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. This source tree is the prepublication distribution 3.0.0 candidate.
44
+ testing. Distribution 3.0.0 was published on October 9, 2026, on
45
+ [PyPI](https://pypi.org/project/deterministic-scenario-engine/3.0.0/) and as a
46
+ [GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
45
47
  Distribution and execution compatibility identities are separate: public
46
48
  `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.
49
+ PyPI and GitHub Releases remain authoritative for public-release availability
50
+ and history.
49
51
 
50
52
  ## Why it exists
51
53
 
@@ -84,9 +86,9 @@ make expected behavior explicit.
84
86
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
85
87
  explicit adapters, closed lossless migrations, and fixture-directory export
86
88
 
87
- The 3.0.0 candidate adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
89
+ The 3.0.0 release adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
88
90
  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).
91
+ [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
90
92
 
91
93
  Core execution does not require a database, network service, plugin, or property
92
94
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
@@ -106,6 +108,18 @@ python3 -m pip install deterministic-scenario-engine
106
108
  scenario --help
107
109
  ```
108
110
 
111
+ Verify that the same active Python interpreter sees the expected distribution
112
+ and observe the module location it actually imports:
113
+
114
+ ```console
115
+ python3 -c 'from importlib.metadata import version; from pathlib import Path; import scenario_engine; print("DSE distribution:", version("deterministic-scenario-engine")); print("Imported module:", Path(scenario_engine.__file__).resolve())'
116
+ ```
117
+
118
+ For this release the distribution is `3.0.1`; a source-development editable
119
+ install resolves the module under its `src/scenario_engine` directory. The DSE
120
+ distribution version is distinct from Engine 1 (`1.0.0`) and Engine 2 (`2.0.0`)
121
+ compatibility versions.
122
+
109
123
  Install only the named optional integrations you need:
110
124
 
111
125
  ```console
@@ -165,15 +179,16 @@ self-contained offline HTML file from supported result/evidence.
165
179
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
166
180
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
167
181
  - [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)
182
+ - [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
183
+ - [3.0.1 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.1.md)
169
184
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
170
185
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
171
186
 
172
187
  ## Status
173
188
 
174
189
  Distribution release identity and deterministic engine compatibility are
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
190
+ separate contracts. This source tree reports published distribution version
191
+ 3.0.1 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
177
192
  with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
178
193
  Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
179
194
  2 suite orchestration, cross-major promotion, remote URI input, and implicit
@@ -4,11 +4,13 @@
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. This source tree is the prepublication distribution 3.0.0 candidate.
7
+ testing. Distribution 3.0.0 was published on October 9, 2026, on
8
+ [PyPI](https://pypi.org/project/deterministic-scenario-engine/3.0.0/) and as a
9
+ [GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
8
10
  Distribution and execution compatibility identities are separate: public
9
11
  `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.
12
+ PyPI and GitHub Releases remain authoritative for public-release availability
13
+ and history.
12
14
 
13
15
  ## Why it exists
14
16
 
@@ -47,9 +49,9 @@ make expected behavior explicit.
47
49
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
48
50
  explicit adapters, closed lossless migrations, and fixture-directory export
49
51
 
50
- The 3.0.0 candidate adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
52
+ The 3.0.0 release adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
51
53
  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).
54
+ [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
53
55
 
54
56
  Core execution does not require a database, network service, plugin, or property
55
57
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
@@ -69,6 +71,18 @@ python3 -m pip install deterministic-scenario-engine
69
71
  scenario --help
70
72
  ```
71
73
 
74
+ Verify that the same active Python interpreter sees the expected distribution
75
+ and observe the module location it actually imports:
76
+
77
+ ```console
78
+ python3 -c 'from importlib.metadata import version; from pathlib import Path; import scenario_engine; print("DSE distribution:", version("deterministic-scenario-engine")); print("Imported module:", Path(scenario_engine.__file__).resolve())'
79
+ ```
80
+
81
+ For this release the distribution is `3.0.1`; a source-development editable
82
+ install resolves the module under its `src/scenario_engine` directory. The DSE
83
+ distribution version is distinct from Engine 1 (`1.0.0`) and Engine 2 (`2.0.0`)
84
+ compatibility versions.
85
+
72
86
  Install only the named optional integrations you need:
73
87
 
74
88
  ```console
@@ -128,15 +142,16 @@ self-contained offline HTML file from supported result/evidence.
128
142
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
129
143
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
130
144
  - [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)
145
+ - [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
146
+ - [3.0.1 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.1.md)
132
147
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
133
148
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
134
149
 
135
150
  ## Status
136
151
 
137
152
  Distribution release identity and deterministic engine compatibility are
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
153
+ separate contracts. This source tree reports published distribution version
154
+ 3.0.1 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
140
155
  with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
141
156
  Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
142
157
  2 suite orchestration, cross-major promotion, remote URI input, and implicit
@@ -13,8 +13,9 @@ exports.
13
13
  - `scenario_engine._version.ENGINE1_VERSION` — explicit historical Engine 1
14
14
  execution coordinate, `1.0.0`; not added to the frozen package-root exports.
15
15
 
16
- - `ENGINE_VERSION` — engine compatibility version recorded in manifests; for
17
- current manifests it remains 1.0.0 independently of distribution version.
16
+ - `ENGINE_VERSION` — engine compatibility version recorded in manifests:
17
+ Engine 1 Manifest/1 records 1.0.0, while Engine 2 Manifest/2 records 2.0.0;
18
+ both are independent of the distribution version.
18
19
  - `MISSING` — singleton semantic missing value, distinct from null.
19
20
  - `LogicalID(value: str)` — deterministic logical identifier value; users
20
21
  normally receive it from `$id` generation.
@@ -1,6 +1,7 @@
1
1
  # DSL 2 logical-actor reference
2
2
 
3
- **Status: PREPUBLICATION — DSE distribution 3.0.0 candidate.**
3
+ **Status: RELEASED — DSE distribution 3.0.0, published October 9, 2026.** See
4
+ the [GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
4
5
 
5
6
  DSL 2 is selected only by integer `dsl_version: 2` and executes with Engine
6
7
  2.0.0. It preserves DSL 1 expression, deterministic value, resource, plugin,
@@ -1,7 +1,6 @@
1
1
  # Canonical installed-package workflows
2
2
 
3
- **3.0.0 candidate documentation — PREPUBLICATION.** These commands apply to a
4
- qualified candidate installation and do not assert that 3.0.0 is on PyPI.
3
+ **3.0.1 release documentation.** These commands apply to distribution 3.0.1.
5
4
 
6
5
  This is the canonical DSE user workflow document. Every ordinary command below
7
6
  uses the installed package and portable files created here; no source checkout,
@@ -16,6 +15,7 @@ example, a symlinked temporary-directory prefix) at filesystem trust boundaries.
16
15
 
17
16
  ```console
18
17
  python3 -m pip install deterministic-scenario-engine
18
+ python3 -c 'from importlib.metadata import version; from pathlib import Path; import scenario_engine; print("DSE distribution:", version("deterministic-scenario-engine")); print("Imported module:", Path(scenario_engine.__file__).resolve())'
19
19
  export DSE_DEMO="$(cd "${TMPDIR:-/tmp}" && pwd -P)/dse-demo"
20
20
  rm -rf "$DSE_DEMO"
21
21
  mkdir -p "$DSE_DEMO"
@@ -37,6 +37,11 @@ sed 's/{$literal: 1}/{$literal: 2}/' "$DSE_DEMO/scenario.yaml" > "$DSE_DEMO/scen
37
37
  scenario --help
38
38
  ```
39
39
 
40
+ The identity check uses the same active Python interpreter as installation. It
41
+ should report DSE distribution `3.0.1`; the resolved module path shows the code
42
+ Python actually imports. This distribution version is distinct from Engine 1
43
+ (`1.0.0`) and Engine 2 (`2.0.0`) compatibility versions.
44
+
40
45
  Installing a checkout with `python3 -m pip install .` is
41
46
  **source-development-only**. Installed-package workflows are primary.
42
47
 
@@ -1,7 +1,11 @@
1
- # Deterministic Scenario Engine 3.0.0 candidate
1
+ # Deterministic Scenario Engine 3.0.0
2
2
 
3
- **Status: PREPUBLICATION.** This document describes qualified candidate scope;
4
- it does not assert PyPI publication, a 3.0.0 tag, or a GitHub Release.
3
+ **Status: RELEASED October 9, 2026.** Distribution 3.0.0 is published on
4
+ [PyPI](https://pypi.org/project/deterministic-scenario-engine/3.0.0/) and as a
5
+ [GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
6
+
7
+ This copy on `main` records the post-release publication state. The original
8
+ published 3.0.0 tag retains the historical prepublication release-notes bytes.
5
9
 
6
10
  ## Added
7
11
 
@@ -38,8 +42,8 @@ promotion is supported.
38
42
 
39
43
  ## Publication verification
40
44
 
41
- Publication, if separately authorized, must use the exact retained reproducible
42
- wheel and sdist. Verify index hashes against qualification evidence, install the
43
- published artifacts outside the source tree on every supported Python, rerun
44
- DSL 1 and DSL 2 run/replay and hostile-input smokes, and inspect rendered
45
- metadata and links before recording release completion.
45
+ The published release uses the exact retained reproducible wheel and sdist.
46
+ Their production PyPI and GitHub Release SHA256 digests match the qualification
47
+ evidence. Release verification installed the published artifacts outside the
48
+ source tree on every supported Python, reran DSL 1 and DSL 2 run/replay and
49
+ hostile-input smokes, and inspected rendered metadata and links.
@@ -0,0 +1,38 @@
1
+ # Deterministic Scenario Engine 3.0.1
2
+
3
+ DSE 3.0.1 is a compatibility-preserving patch release. The distribution version
4
+ advances from 3.0.0 to 3.0.1; Engine 1/Manifest 1 remains 1.0.0 and Engine
5
+ 2/Manifest 2 remains 2.0.0. DSL, schema, canonical serialization, CLI grammar,
6
+ and public Python API contracts are unchanged.
7
+
8
+ ## Changes since 3.0.0
9
+
10
+ - Clarifies Engine 2 replay help, including the required Schedule/1 input.
11
+ - Makes missing-schedule human diagnostics actionable while preserving the
12
+ machine-readable error contract.
13
+ - Includes safe, allowlisted failing-field identifiers in relevant diagnostics
14
+ without exposing arbitrary input values.
15
+ - Improves installed-distribution identity onboarding so users can verify both
16
+ package metadata and the module path imported by the active interpreter.
17
+ - Clarifies the distinction between distribution, engine, and manifest versions.
18
+ - Extends regression and release-maintenance coverage, including permanent
19
+ verification of authentic historical release tags.
20
+
21
+ The earlier TRACK-A4 repair aligned a maintainer's local editable environment;
22
+ it is not a shipped runtime feature of this release.
23
+
24
+ ## Compatibility and upgrade guidance
25
+
26
+ Python 3.11, 3.12, 3.13, and 3.14 remain declared as supported. The runtime
27
+ dependency remains `PyYAML==6.0.3`. Upgrade the distribution through the same
28
+ Python interpreter used to run DSE, then verify `importlib.metadata.version` and
29
+ `scenario_engine.__file__` as shown in the quickstart. Existing Engine 1 and
30
+ Engine 2 evidence retains its established compatibility and fail-closed replay
31
+ checks.
32
+
33
+ ## Known limits
34
+
35
+ Engine 2 suite orchestration, cross-major promotion, remote URI input, implicit
36
+ schedule-seed derivation, distributed execution, and evidence federation remain
37
+ unsupported. This patch does not introduce new engine algorithms, performance
38
+ claims, scientific benchmarks, or security certification.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deterministic-scenario-engine
3
- Version: 3.0.0
3
+ Version: 3.0.1
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,11 +41,13 @@ 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. This source tree is the prepublication distribution 3.0.0 candidate.
44
+ testing. Distribution 3.0.0 was published on October 9, 2026, on
45
+ [PyPI](https://pypi.org/project/deterministic-scenario-engine/3.0.0/) and as a
46
+ [GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
45
47
  Distribution and execution compatibility identities are separate: public
46
48
  `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.
49
+ PyPI and GitHub Releases remain authoritative for public-release availability
50
+ and history.
49
51
 
50
52
  ## Why it exists
51
53
 
@@ -84,9 +86,9 @@ make expected behavior explicit.
84
86
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
85
87
  explicit adapters, closed lossless migrations, and fixture-directory export
86
88
 
87
- The 3.0.0 candidate adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
89
+ The 3.0.0 release adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
88
90
  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).
91
+ [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
90
92
 
91
93
  Core execution does not require a database, network service, plugin, or property
92
94
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
@@ -106,6 +108,18 @@ python3 -m pip install deterministic-scenario-engine
106
108
  scenario --help
107
109
  ```
108
110
 
111
+ Verify that the same active Python interpreter sees the expected distribution
112
+ and observe the module location it actually imports:
113
+
114
+ ```console
115
+ python3 -c 'from importlib.metadata import version; from pathlib import Path; import scenario_engine; print("DSE distribution:", version("deterministic-scenario-engine")); print("Imported module:", Path(scenario_engine.__file__).resolve())'
116
+ ```
117
+
118
+ For this release the distribution is `3.0.1`; a source-development editable
119
+ install resolves the module under its `src/scenario_engine` directory. The DSE
120
+ distribution version is distinct from Engine 1 (`1.0.0`) and Engine 2 (`2.0.0`)
121
+ compatibility versions.
122
+
109
123
  Install only the named optional integrations you need:
110
124
 
111
125
  ```console
@@ -165,15 +179,16 @@ self-contained offline HTML file from supported result/evidence.
165
179
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
166
180
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
167
181
  - [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)
182
+ - [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
183
+ - [3.0.1 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.1.md)
169
184
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
170
185
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
171
186
 
172
187
  ## Status
173
188
 
174
189
  Distribution release identity and deterministic engine compatibility are
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
190
+ separate contracts. This source tree reports published distribution version
191
+ 3.0.1 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
177
192
  with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
178
193
  Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
179
194
  2 suite orchestration, cross-major promotion, remote URI input, and implicit
@@ -20,6 +20,7 @@ docs/product-evidence-gate.md
20
20
  docs/quickstart.md
21
21
  docs/release-notes-2.2.0.md
22
22
  docs/release-notes-3.0.0.md
23
+ docs/release-notes-3.0.1.md
23
24
  docs/release-process.md
24
25
  docs/reproducibility.md
25
26
  docs/schemathesis.md
@@ -1,5 +1,5 @@
1
1
  """Authoritative distribution and deterministic compatibility versions."""
2
2
 
3
- VERSION = "3.0.0"
3
+ VERSION = "3.0.1"
4
4
  ENGINE_VERSION = "2.0.0"
5
5
  ENGINE1_VERSION = "1.0.0"
@@ -220,7 +220,11 @@ def _parser() -> argparse.ArgumentParser:
220
220
  "Missing required replay data fails closed with exit 5."
221
221
  ),
222
222
  )
223
- replay.add_argument("source", help="local suite.run/1 replay artifact path or - for stdin")
223
+ replay.add_argument(
224
+ "source",
225
+ help=("local suite.run/1 or scenario.result/2 artifact path (or - for stdin); "
226
+ "scenario.result/2 replay requires scenario.schedule/1 via --schedule"),
227
+ )
224
228
  replay.add_argument("--scenario", required=True, help="explicit local scenario YAML path")
225
229
  replay.add_argument(
226
230
  "--inputs",
@@ -1290,6 +1294,29 @@ def _render_replay_human(diagnostic: HumanDiagnostic) -> None:
1290
1294
  _diagnostic("; ".join(fields))
1291
1295
 
1292
1296
 
1297
+ _SAFE_ENGINE2_EVIDENCE_FIELDS = frozenset({
1298
+ "actors", "artifacts", "classification", "contract", "dsl_version", "engine_version",
1299
+ "evidence", "execution", "execution.dsl_version", "execution.engine_version",
1300
+ "execution.generator_versions", "execution.id_algorithm_version", "execution.locale",
1301
+ "execution.reference_clock_start", "execution.rng_algorithm_version", "execution.root_seed",
1302
+ "failure", "final_logical_clock", "final_state", "generator_versions", "history",
1303
+ "input_resource_hashes", "json", "manifest", "manifest_hash", "members", "outcome",
1304
+ "outcome.schedule", "records", "records.outcome", "records.ready_actors",
1305
+ "records.selected_actor", "reference_clock_start", "result", "result_hash", "root_seed",
1306
+ "run_index", "scenario_hash", "scenario_id", "schedule", "schedule_hash",
1307
+ "schedule_reference", "schedule_reference.contract", "schedule_reference.scenario_hash",
1308
+ "schedule_reference.schedule_hash", "schedule_seed", "scheduler_contract", "semantic value",
1309
+ "suite", "suite_hash", "terminal", "terminal.classification", "terminal.failure",
1310
+ })
1311
+
1312
+
1313
+ def _render_engine2_evidence_human(diagnostic: HumanDiagnostic, field: str) -> None:
1314
+ """Render one source-defined field identifier without reflecting supplied values."""
1315
+ sys.stderr.write(render_human_diagnostic(diagnostic))
1316
+ if field in _SAFE_ENGINE2_EVIDENCE_FIELDS:
1317
+ sys.stderr.write(f"field:\n{field}\n")
1318
+
1319
+
1293
1320
  def _path_reason(error: Exception) -> PathReason | None:
1294
1321
  """Classify existing path-security failures without replacing their checks."""
1295
1322
  if isinstance(error, _CLIError):
@@ -1435,6 +1462,8 @@ def main(argv: Sequence[str] | None = None) -> int:
1435
1462
  )
1436
1463
  if json_mode:
1437
1464
  _emit_machine(diagnostic, error.code)
1465
+ elif error.diagnostic_code == "SCHEDULE_EVIDENCE_REQUIRED":
1466
+ sys.stderr.write(render_human_diagnostic(diagnostic))
1438
1467
  else:
1439
1468
  _diagnostic(str(error))
1440
1469
  return int(error.code)
@@ -1489,7 +1518,7 @@ def main(argv: Sequence[str] | None = None) -> int:
1489
1518
  if json_mode:
1490
1519
  _emit_machine(diagnostic, code)
1491
1520
  else:
1492
- sys.stderr.write(render_human_diagnostic(diagnostic))
1521
+ _render_engine2_evidence_human(diagnostic, error.field)
1493
1522
  return int(code)
1494
1523
  if code is CLIExitCode.INTERNAL:
1495
1524
  message = "unexpected internal error"
@@ -54,7 +54,7 @@ class Phase10EPackagingReleaseCandidateTests(unittest.TestCase):
54
54
  "scenario_engine._version.VERSION",
55
55
  )
56
56
  # Phase 2 changes package identity, not the frozen deterministic contract.
57
- self.assertEqual(VERSION, "3.0.0")
57
+ self.assertEqual(VERSION, "3.0.1")
58
58
  self.assertEqual(ENGINE_VERSION, "2.0.0")
59
59
 
60
60
  def test_license_readme_and_build_backend_metadata(self):
@@ -148,7 +148,7 @@ def test_fresh_tree_wheel_supports_workflow_public_commands(tmp_path: Path) -> N
148
148
  check=True,
149
149
  )
150
150
  wheels = list(wheelhouse.glob(f"deterministic_scenario_engine-{VERSION}-*.whl"))
151
- assert VERSION == "3.0.0"
151
+ assert VERSION == "3.0.1"
152
152
  assert len(wheels) == 1
153
153
  wheel = wheels[0]
154
154
  installed = tmp_path / "installed"
@@ -175,7 +175,7 @@ def test_fresh_tree_wheel_supports_workflow_public_commands(tmp_path: Path) -> N
175
175
  text=True,
176
176
  )
177
177
  distribution_version, import_path = identity.stdout.splitlines()
178
- assert distribution_version == VERSION == "3.0.0"
178
+ assert distribution_version == VERSION == "3.0.1"
179
179
  assert Path(import_path).is_relative_to(installed)
180
180
  validate = subprocess.run(
181
181
  [sys.executable, "-m", "scenario_engine.cli", "--json", "validate", "examples/cart.yaml"],
@@ -63,7 +63,7 @@ def test_versions_errors_commands_and_entry_points_are_frozen() -> None:
63
63
  from scenario_engine.oracle_assertions import ORACLE_ASSERTION_SCHEMA_VERSION
64
64
  from scenario_engine.suite import READ_SCHEMA_VERSION, SUITE_SCHEMA_VERSION
65
65
 
66
- assert VERSION == "3.0.0"
66
+ assert VERSION == "3.0.1"
67
67
  assert (COMPOSITION_CONTRACT_VERSION, MATRIX_PLAN_CONTRACT_VERSION) == (
68
68
  "composition.modules/1", "matrix.plan/1")
69
69
  assert (READ_SCHEMA_VERSION, SUITE_SCHEMA_VERSION) == (
@@ -59,7 +59,7 @@ def _cases():
59
59
  def test_version_roles_are_explicit_and_dsl_remains_one() -> None:
60
60
  config = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
61
61
  assert config["tool"]["setuptools"]["dynamic"]["version"]["attr"] == "scenario_engine._version.VERSION"
62
- assert VERSION == "3.0.0"
62
+ assert VERSION == "3.0.1"
63
63
  assert ENGINE_VERSION == scenario_engine.ENGINE_VERSION == "2.0.0"
64
64
  assert ENGINE1_VERSION == "1.0.0"
65
65
  _, result = _result("cart.yaml", "s")
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from hashlib import sha256
4
4
  import importlib
5
+ import inspect
5
6
  import json
6
7
  from pathlib import Path
7
8
  import unittest
@@ -100,12 +101,27 @@ class V1ReadTests(unittest.TestCase):
100
101
 
101
102
  def test_suite_import_has_no_runtime_side_effects(self):
102
103
  import scenario_engine.suite as suite
103
- with patch("builtins.open", side_effect=AssertionError("file attempted")):
104
+
105
+ real_open = open
106
+
107
+ def reject_module_file_io(*args, **kwargs):
108
+ frame = inspect.currentframe().f_back
109
+ while frame is not None and frame.f_globals.get("__name__") == "unittest.mock":
110
+ frame = frame.f_back
111
+ if (
112
+ frame is not None
113
+ and frame.f_globals.get("__name__") == "_pytest.assertion.rewrite"
114
+ and frame.f_code.co_name == "_read_pyc"
115
+ ):
116
+ return real_open(*args, **kwargs)
117
+ raise AssertionError("file attempted")
118
+
119
+ with patch("builtins.open", side_effect=reject_module_file_io):
104
120
  self.assertIs(importlib.reload(suite), suite)
105
121
 
106
122
  def test_v1_api_version_and_three_result_goldens_remain_unchanged(self):
107
123
  expected = scenario_engine.__all__
108
- self.assertEqual(VERSION, "3.0.0")
124
+ self.assertEqual(VERSION, "3.0.1")
109
125
  self.assertEqual(scenario_engine.__all__, expected)
110
126
  cart_source = (ROOT / "examples" / "phase0_1b_cart.yaml").read_text()
111
127
  cart = run_scenario(compile_document(parse_yaml(cart_source)), "s")
@@ -376,7 +376,7 @@ def test_suite_manifest_identity_order_child_reference_and_v1_preservation(tmp_p
376
376
 
377
377
  def test_top_level_api_and_v1_parser_are_unchanged(tmp_path: Path) -> None:
378
378
  assert "load_composed_suite" not in scenario_engine.__all__
379
- assert VERSION == "3.0.0"
379
+ assert VERSION == "3.0.1"
380
380
  root_without_composition = _root(" alpha: alpha.yaml").replace(
381
381
  "composition:\n modules:\n alpha: alpha.yaml\n", "",
382
382
  )
@@ -235,7 +235,7 @@ steps:
235
235
 
236
236
  def test_top_level_api_and_package_version_are_unchanged() -> None:
237
237
  assert "MatrixPlan" not in scenario_engine.__all__
238
- assert VERSION == "3.0.0"
238
+ assert VERSION == "3.0.1"
239
239
 
240
240
 
241
241
  def test_static_matrix_package_has_no_nondeterministic_or_unsafe_imports() -> None:
@@ -277,7 +277,7 @@ def test_public_boundary_version_preservation_and_static_safety() -> None:
277
277
  from scenario_engine._version import VERSION
278
278
 
279
279
  assert "BatchPlan" not in scenario_engine.__all__
280
- assert VERSION == "3.0.0"
280
+ assert VERSION == "3.0.1"
281
281
  forbidden = {"random", "secrets", "socket", "subprocess", "importlib", "os", "time", "urllib"}
282
282
  root = Path(__file__).parents[1] / "src/scenario_engine/batch"
283
283
  for path in root.glob("*.py"):
@@ -151,4 +151,4 @@ def test_bounds_are_exact_and_fail_deterministically(monkeypatch) -> None:
151
151
 
152
152
  def test_root_api_and_package_version_remain_frozen() -> None:
153
153
  assert "inspect_result" not in scenario_engine.__all__
154
- assert VERSION == "3.0.0"
154
+ assert VERSION == "3.0.1"
@@ -250,4 +250,4 @@ def test_cli_static_purity_version_and_console_script_contract() -> None:
250
250
  assert imported.isdisjoint(forbidden)
251
251
  pyproject = (ROOT / "pyproject.toml").read_text(encoding="utf-8")
252
252
  assert 'scenario = "scenario_engine.cli:main"' in pyproject
253
- assert 'VERSION = "3.0.0"' in (ROOT / "src/scenario_engine/_version.py").read_text(encoding="utf-8")
253
+ assert 'VERSION = "3.0.1"' in (ROOT / "src/scenario_engine/_version.py").read_text(encoding="utf-8")
@@ -166,7 +166,7 @@ def test_versions_publication_security_reference_and_links_are_frozen(tmp_path:
166
166
  from scenario_engine.reference_packs import ecommerce_domain_pack, export_ecommerce_evidence
167
167
 
168
168
  result = run_scenario(compile_document(parse_yaml((ROOT / "examples/cart.yaml").read_text())), "phase3.11")
169
- assert VERSION == "3.0.0" and ENGINE_VERSION == "2.0.0"
169
+ assert VERSION == "3.0.1" and ENGINE_VERSION == "2.0.0"
170
170
  assert result.manifest.engine_version == "1.0.0" and result.manifest.dsl_version == 1
171
171
  contract = CONTRACT.read_text()
172
172
  assert "current source distribution version=2.1.0" in contract
@@ -253,7 +253,7 @@ def test_phase2_root_api_and_version_roles_remain_frozen() -> None:
253
253
  from scenario_engine.suite import RUN_SCHEMA_VERSION, SUITE_SCHEMA_VERSION
254
254
 
255
255
  assert tuple(scenario_engine.__all__) == FROZEN_ROOT_EXPORTS
256
- assert VERSION == "3.0.0"
256
+ assert VERSION == "3.0.1"
257
257
  assert ENGINE_VERSION == "2.0.0"
258
258
  assert RUN_SCHEMA_VERSION == "suite.run/1"
259
259
  assert SUITE_SCHEMA_VERSION == "suite.manifest/1"
@@ -65,6 +65,17 @@ def test_top_level_and_phase4_command_help_are_coherent() -> None:
65
65
  assert all(phrase in result.stdout for phrase in phrases)
66
66
 
67
67
 
68
+ def test_replay_help_identifies_engine1_and_engine2_evidence() -> None:
69
+ result = invoke("replay", "--help")
70
+ assert result.returncode == 0
71
+ help_text = " ".join(result.stdout.decode("utf-8").split())
72
+ for phrase in (
73
+ "suite.run/1", "scenario.result/2", "- for stdin", "--scenario", "--inputs",
74
+ "--schedule", "scenario.result/2 replay requires scenario.schedule/1 via --schedule",
75
+ ):
76
+ assert phrase in help_text
77
+
78
+
68
79
  def test_public_docs_have_no_checkpoint_or_checkout_dependency() -> None:
69
80
  docs = (ROOT / "README.md").read_text() + QUICKSTART.read_text()
70
81
  forbidden = (