deterministic-scenario-engine 2.1.1__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/MANIFEST.in +2 -0
  2. {deterministic_scenario_engine-2.1.1/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-2.2.0}/PKG-INFO +44 -43
  3. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/README.md +42 -42
  4. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/compatibility.md +92 -0
  5. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/phase2-architecture.md +1 -1
  6. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/phase3-public-contract.md +2 -2
  7. deterministic_scenario_engine-2.2.0/docs/phase4-architecture.md +815 -0
  8. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/product-evidence-gate.md +29 -9
  9. deterministic_scenario_engine-2.2.0/docs/quickstart.md +179 -0
  10. deterministic_scenario_engine-2.2.0/docs/release-notes-2.2.0.md +44 -0
  11. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/pyproject.toml +4 -1
  12. deterministic_scenario_engine-2.2.0/setup.py +44 -0
  13. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0/src/deterministic_scenario_engine.egg-info}/PKG-INFO +44 -43
  14. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +39 -1
  15. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/requires.txt +1 -0
  16. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/_version.py +1 -1
  17. deterministic_scenario_engine-2.2.0/src/scenario_engine/cli/main.py +1270 -0
  18. deterministic_scenario_engine-2.2.0/src/scenario_engine/compatibility_fixtures.py +94 -0
  19. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/current-2.1.2-suite-run-v1.json +1 -0
  20. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-1.0.0-result-v1.json +1 -0
  21. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-2.0.0-suite-run-v1.json +1 -0
  22. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-incomplete-suite-run-v1.json +1 -0
  23. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-scenario-mismatch-suite-run-v1.json +1 -0
  24. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-engine-suite-run-v1.json +1 -0
  25. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-manifest-suite-run-v9.json +1 -0
  26. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unsupported-contract.json +1 -0
  27. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/compatibility-fixtures.json +1 -0
  28. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/inputs/current-2.1.2-suite-run-v1.inputs.json +1 -0
  29. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/inputs/historical-2.0.0-suite-run-v1.inputs.json +1 -0
  30. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/compatibility_case.yaml +10 -0
  31. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/mismatch_case.yaml +10 -0
  32. deterministic_scenario_engine-2.2.0/src/scenario_engine/definition_diff.py +210 -0
  33. deterministic_scenario_engine-2.2.0/src/scenario_engine/diagnostics.py +130 -0
  34. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/compiler.py +13 -2
  35. deterministic_scenario_engine-2.2.0/src/scenario_engine/dsl/errors.py +52 -0
  36. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/parser.py +63 -10
  37. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/runtime.py +31 -4
  38. deterministic_scenario_engine-2.2.0/src/scenario_engine/impact.py +343 -0
  39. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/explain.py +4 -0
  40. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/inspect.py +3 -0
  41. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/redaction.py +3 -2
  42. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/manifest.py +49 -1
  43. deterministic_scenario_engine-2.2.0/src/scenario_engine/scaffolding.py +224 -0
  44. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/__init__.py +2 -1
  45. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/errors.py +8 -2
  46. deterministic_scenario_engine-2.2.0/src/scenario_engine/suite/publication.py +33 -0
  47. deterministic_scenario_engine-2.2.0/src/scenario_engine/trace_view.py +203 -0
  48. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_2b_json_pytest_integration.py +9 -15
  49. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_4_control_flow.py +5 -2
  50. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_6_sqlalchemy_materializer.py +5 -3
  51. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_7_plugins_ecommerce.py +5 -2
  52. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_8_hypothesis_schemathesis.py +2 -2
  53. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0c_dsl_compatibility_contract.py +2 -1
  54. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0d_documentation_examples.py +1 -1
  55. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0e_packaging_release_candidate.py +2 -2
  56. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
  57. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_12_public_contract_docs_freeze.py +3 -2
  58. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_13_packaging_fresh_install_rc.py +4 -3
  59. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_1_v1_read_contract.py +1 -1
  60. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_2_composition.py +1 -1
  61. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_3_matrix.py +1 -1
  62. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_4_batch.py +1 -1
  63. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_5_inspect_explain.py +1 -1
  64. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_7_cli_product_surface.py +7 -3
  65. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_11_public_contract_docs_freeze.py +7 -3
  66. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_1_evidence_bundle_contract.py +1 -1
  67. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_7_cli_interchange_surface.py +4 -1
  68. deterministic_scenario_engine-2.2.0/tests/test_phase_4_10_canonical_workflow_help.py +76 -0
  69. deterministic_scenario_engine-2.2.0/tests/test_phase_4_11_cross_version_fixtures.py +207 -0
  70. deterministic_scenario_engine-2.2.0/tests/test_phase_4_12_hardening.py +134 -0
  71. deterministic_scenario_engine-2.2.0/tests/test_phase_4_12r2_public_fixture_packaging.py +94 -0
  72. deterministic_scenario_engine-2.2.0/tests/test_phase_4_12r3_consumer_secret_redaction.py +181 -0
  73. deterministic_scenario_engine-2.2.0/tests/test_phase_4_1_cli_replay_workflow.py +150 -0
  74. deterministic_scenario_engine-2.2.0/tests/test_phase_4_2_replay_compatibility_diagnostics.py +142 -0
  75. deterministic_scenario_engine-2.2.0/tests/test_phase_4_3_filesystem_trust_boundary.py +107 -0
  76. deterministic_scenario_engine-2.2.0/tests/test_phase_4_4_actionable_human_diagnostics.py +98 -0
  77. deterministic_scenario_engine-2.2.0/tests/test_phase_4_5_machine_readable_error_envelope.py +99 -0
  78. deterministic_scenario_engine-2.2.0/tests/test_phase_4_6_author_time_scaffolding.py +110 -0
  79. deterministic_scenario_engine-2.2.0/tests/test_phase_4_7_scenario_definition_structural_diff.py +151 -0
  80. deterministic_scenario_engine-2.2.0/tests/test_phase_4_8_conservative_impact_analysis.py +110 -0
  81. deterministic_scenario_engine-2.2.0/tests/test_phase_4_9_static_trace_viewer.py +162 -0
  82. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_readme_pypi_portability.py +24 -0
  83. deterministic_scenario_engine-2.2.0/tests/test_test_portability.py +26 -0
  84. deterministic_scenario_engine-2.1.1/docs/quickstart.md +0 -133
  85. deterministic_scenario_engine-2.1.1/src/scenario_engine/cli/main.py +0 -593
  86. deterministic_scenario_engine-2.1.1/src/scenario_engine/dsl/errors.py +0 -23
  87. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/LICENSE +0 -0
  88. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/api.md +0 -0
  89. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/determinism.md +0 -0
  90. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/dsl-reference.md +0 -0
  91. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/hypothesis.md +0 -0
  92. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/phase2-public-contract.md +0 -0
  93. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/phase3-architecture.md +0 -0
  94. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/plugins.md +0 -0
  95. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/release-process.md +0 -0
  96. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/reproducibility.md +0 -0
  97. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/schemathesis.md +0 -0
  98. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/security-and-non-goals.md +0 -0
  99. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/sqlalchemy.md +0 -0
  100. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/docs/testing-oracle.md +0 -0
  101. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/api_scenario.yaml +0 -0
  102. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/cart.yaml +0 -0
  103. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/control_flow.yaml +0 -0
  104. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/ecommerce.yaml +0 -0
  105. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/openapi.yaml +0 -0
  106. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/oracle_fault.yaml +0 -0
  107. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_1b_cart.yaml +0 -0
  108. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_3_resources.yaml +0 -0
  109. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_4_control_flow.yaml +0 -0
  110. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_5_oracle_fault.yaml +0 -0
  111. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
  112. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
  113. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_8_api_scenario.yaml +0 -0
  114. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase0_8_openapi.yaml +0 -0
  115. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/phase3_ecommerce_evidence.py +0 -0
  116. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/resources.yaml +0 -0
  117. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/examples/sqlalchemy_rows.yaml +0 -0
  118. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/setup.cfg +0 -0
  119. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
  120. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
  121. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
  122. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/__init__.py +0 -0
  123. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/__init__.py +0 -0
  124. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/json_file.py +0 -0
  125. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
  126. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/address.py +0 -0
  127. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/artifacts.py +0 -0
  128. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/__init__.py +0 -0
  129. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/canonical.py +0 -0
  130. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/errors.py +0 -0
  131. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/models.py +0 -0
  132. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/runtime.py +0 -0
  133. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/canonical.py +0 -0
  134. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/cli/__init__.py +0 -0
  135. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/cli/__main__.py +0 -0
  136. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/clock.py +0 -0
  137. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/__init__.py +0 -0
  138. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/canonical.py +0 -0
  139. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/errors.py +0 -0
  140. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/models.py +0 -0
  141. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/parser.py +0 -0
  142. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/resolver.py +0 -0
  143. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/runtime.py +0 -0
  144. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/context.py +0 -0
  145. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/control_flow.py +0 -0
  146. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/__init__.py +0 -0
  147. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/compare.py +0 -0
  148. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/errors.py +0 -0
  149. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/models.py +0 -0
  150. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/render.py +0 -0
  151. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/serialization.py +0 -0
  152. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/__init__.py +0 -0
  153. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/canonical.py +0 -0
  154. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/errors.py +0 -0
  155. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/models.py +0 -0
  156. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/registry.py +0 -0
  157. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/__init__.py +0 -0
  158. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/models.py +0 -0
  159. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/errors.py +0 -0
  160. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/__init__.py +0 -0
  161. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/adapter.py +0 -0
  162. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/canonical.py +0 -0
  163. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/compatibility.py +0 -0
  164. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/errors.py +0 -0
  165. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/export.py +0 -0
  166. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/fixture.py +0 -0
  167. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/migration.py +0 -0
  168. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/models.py +0 -0
  169. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/read.py +0 -0
  170. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/expressions.py +0 -0
  171. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/faults.py +0 -0
  172. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/history.py +0 -0
  173. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/ids.py +0 -0
  174. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/__init__.py +0 -0
  175. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/errors.py +0 -0
  176. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/models.py +0 -0
  177. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/serialization.py +0 -0
  178. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/__init__.py +0 -0
  179. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/hypothesis.py +0 -0
  180. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/schemathesis.py +0 -0
  181. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/invariants.py +0 -0
  182. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/__init__.py +0 -0
  183. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/canonical.py +0 -0
  184. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/errors.py +0 -0
  185. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/expand.py +0 -0
  186. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/filtering.py +0 -0
  187. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/models.py +0 -0
  188. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/runtime.py +0 -0
  189. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle.py +0 -0
  190. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
  191. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/errors.py +0 -0
  192. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
  193. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/models.py +0 -0
  194. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
  195. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/plugins.py +0 -0
  196. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/provenance.py +0 -0
  197. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/pytest_plugin.py +0 -0
  198. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/__init__.py +0 -0
  199. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
  200. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
  201. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/resources.py +0 -0
  202. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/result.py +0 -0
  203. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/rng.py +0 -0
  204. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/runner.py +0 -0
  205. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/state.py +0 -0
  206. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/models.py +0 -0
  207. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/read.py +0 -0
  208. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/serialization.py +0 -0
  209. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/validation.py +0 -0
  210. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/values.py +0 -0
  211. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
  212. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1b_linear_dsl.py +0 -0
  213. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
  214. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
  215. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_2a_reproducible_results.py +0 -0
  216. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_3_resources_constraints.py +0 -0
  217. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_5_oracle_faults.py +0 -0
  218. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
  219. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
  220. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_1_models_serialization.py +0 -0
  221. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
  222. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
  223. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_9_oracle_assertions.py +0 -0
  224. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
  225. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
  226. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
  227. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_3_ordered_export.py +0 -0
  228. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
  229. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
  230. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
  231. {deterministic_scenario_engine-2.1.1 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
@@ -1,7 +1,9 @@
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 *
5
7
  recursive-include docs *.md
6
8
  recursive-include examples *.yaml
7
9
  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.1
3
+ Version: 2.2.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
@@ -25,6 +25,7 @@ License-File: LICENSE
25
25
  Requires-Dist: PyYAML==6.0.3
26
26
  Provides-Extra: pytest
27
27
  Requires-Dist: pytest<10,>=9.1; extra == "pytest"
28
+ Requires-Dist: build<2,>=1; extra == "pytest"
28
29
  Provides-Extra: sqlalchemy
29
30
  Requires-Dist: SQLAlchemy<3,>=2.0; extra == "sqlalchemy"
30
31
  Provides-Extra: hypothesis
@@ -40,7 +41,7 @@ Dynamic: license-file
40
41
 
41
42
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
42
43
  business histories and deterministic scenario suites with ground truth for
43
- testing. The source-tree distribution version is 2.1.1. Distribution release
44
+ testing. The source-tree distribution version is 2.2.0. Distribution release
44
45
  identity and deterministic compatibility identity are separate:
45
46
  `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
46
47
  public-release availability and history, see PyPI and GitHub Releases.
@@ -71,12 +72,20 @@ make expected behavior explicit.
71
72
  - ordered Cartesian matrices with stable case IDs and original indexes
72
73
  - immutable ordered batch plans and worker-independent results
73
74
  - structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
74
- - twelve-command `scenario` CLI for local and CI workflows, including bounded
75
+ - validated scenario-definition structural diff with canonical semantic addresses
76
+ - self-contained, deterministic offline HTML trace views of local result evidence
77
+ - `scenario` CLI for local and CI workflows, including bounded
75
78
  local evidence export, verification, and lossless migration
76
79
  - explicit immutable Domain Pack registries and pure Oracle Assertions
77
80
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
78
81
  explicit adapters, closed lossless migrations, and fixture-directory export
79
82
 
83
+ Release 2.2.0 adds first-class run → replay artifacts and fail-closed replay
84
+ diagnostics, actionable human and machine-readable errors, author-time
85
+ scaffolding, scenario-definition diff, conservative impact analysis, offline
86
+ trace views, and an installed compatibility-fixture export. See the
87
+ [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md).
88
+
80
89
  Core execution does not require a database, network service, plugin, or property
81
90
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
82
91
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
@@ -86,57 +95,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
86
95
 
87
96
  ## Installation
88
97
 
89
- From a source checkout, use a virtual environment and install the checkout:
98
+ Supported Python versions are 3.11, 3.12, 3.13, and 3.14.
99
+
100
+ Install the published package and use its `scenario` entry point:
90
101
 
91
102
  ```console
92
- python3 -m venv /tmp/scenario-engine-docs-venv
93
- /tmp/scenario-engine-docs-venv/bin/python -m pip install .
103
+ python3 -m pip install deterministic-scenario-engine
104
+ scenario --help
94
105
  ```
95
106
 
96
107
  Install only the named optional integrations you need:
97
108
 
98
109
  ```console
99
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[pytest]'
100
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[sqlalchemy]'
101
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[hypothesis]'
102
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
110
+ python3 -m pip install 'deterministic-scenario-engine[pytest]'
111
+ python3 -m pip install 'deterministic-scenario-engine[sqlalchemy]'
112
+ python3 -m pip install 'deterministic-scenario-engine[hypothesis]'
113
+ python3 -m pip install 'deterministic-scenario-engine[schemathesis]'
103
114
  ```
104
115
 
105
- Install the package with `pip install deterministic-scenario-engine`, or select
106
- an optional integration with a command such as
107
- `pip install 'deterministic-scenario-engine[pytest]'`.
116
+ Installing the current checkout with `python3 -m pip install .` is a
117
+ source-development-only alternative.
108
118
 
109
119
  ## Minimal quickstart
110
120
 
111
- The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
112
- Run it from the repository root:
113
-
114
- ```python
115
- from pathlib import Path
116
-
117
- from scenario_engine import (
118
- compile_document,
119
- parse_yaml,
120
- replay_scenario,
121
- run_scenario,
122
- )
123
-
124
- yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
125
- document = parse_yaml(yaml_text)
126
- scenario = compile_document(document)
127
- result = run_scenario(scenario, root_seed="quickstart", run_index=0)
128
-
129
- print(result.final_state["checkout_complete"])
130
- print(result.trace())
131
- stable_bytes = result.to_json_bytes()
132
- manifest = result.manifest
133
-
134
- replayed = replay_scenario(yaml_text, manifest)
135
- assert replayed.to_json_bytes() == stable_bytes
136
- ```
137
-
138
- `ScenarioResult.final_state` is the supported state-reading property; the stable
139
- normalized result contains the same data under its `state` field.
121
+ The [canonical installed-package workflows](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
122
+ start by creating a complete portable DSL file under `/tmp/dse-demo`; they do
123
+ not require a source checkout or files from this repository. The guide covers
124
+ validate, run → replay, inspect/explain, both diff commands, conservative impact
125
+ analysis, export → verify, the static trace viewer, scaffold → validate, and the
126
+ human/machine diagnostic contract.
140
127
 
141
128
  ## Determinism contract
142
129
 
@@ -147,6 +134,19 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
147
134
  [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
148
135
  [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
149
136
 
137
+ The installed public compatibility corpus can be discovered with
138
+ `scenario --help` and exported without a source checkout using
139
+ `scenario compatibility-fixtures export --out /absolute/path`.
140
+
141
+ ## Canonical command workflows
142
+
143
+ Use the [quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md#canonical-installed-package-workflows)
144
+ as the single canonical workflow document. In particular, `scenario diff`
145
+ compares execution artifacts, while `scenario diff-definition` structurally
146
+ compares validated scenario definitions. `scenario impact` is a separate,
147
+ conservative static may-impact analysis. `scenario trace-view` creates one
148
+ self-contained offline HTML file from supported result/evidence.
149
+
150
150
  ## Documentation
151
151
 
152
152
  - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
@@ -161,13 +161,14 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
161
161
  - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
162
162
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
163
163
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
164
+ - [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
164
165
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
165
166
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
166
167
 
167
168
  ## Status
168
169
 
169
170
  Distribution release identity and deterministic engine compatibility are
170
- separate contracts. This source tree reports distribution version 2.1.1;
171
+ separate contracts. This source tree reports distribution version 2.2.0;
171
172
  generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
172
173
  GitHub Releases are the authoritative sources for public-release availability
173
174
  and history. The project is licensed under Apache-2.0.
@@ -4,7 +4,7 @@
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.1. Distribution release
7
+ testing. The source-tree distribution version is 2.2.0. Distribution release
8
8
  identity and deterministic compatibility identity are separate:
9
9
  `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
10
10
  public-release availability and history, see PyPI and GitHub Releases.
@@ -35,12 +35,20 @@ make expected behavior explicit.
35
35
  - ordered Cartesian matrices with stable case IDs and original indexes
36
36
  - immutable ordered batch plans and worker-independent results
37
37
  - structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
38
- - twelve-command `scenario` CLI for local and CI workflows, including bounded
38
+ - validated scenario-definition structural diff with canonical semantic addresses
39
+ - self-contained, deterministic offline HTML trace views of local result evidence
40
+ - `scenario` CLI for local and CI workflows, including bounded
39
41
  local evidence export, verification, and lossless migration
40
42
  - explicit immutable Domain Pack registries and pure Oracle Assertions
41
43
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
42
44
  explicit adapters, closed lossless migrations, and fixture-directory export
43
45
 
46
+ Release 2.2.0 adds first-class run → replay artifacts and fail-closed replay
47
+ diagnostics, actionable human and machine-readable errors, author-time
48
+ scaffolding, scenario-definition diff, conservative impact analysis, offline
49
+ trace views, and an installed compatibility-fixture export. See the
50
+ [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md).
51
+
44
52
  Core execution does not require a database, network service, plugin, or property
45
53
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
46
54
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
@@ -50,57 +58,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
50
58
 
51
59
  ## Installation
52
60
 
53
- From a source checkout, use a virtual environment and install the checkout:
61
+ Supported Python versions are 3.11, 3.12, 3.13, and 3.14.
62
+
63
+ Install the published package and use its `scenario` entry point:
54
64
 
55
65
  ```console
56
- python3 -m venv /tmp/scenario-engine-docs-venv
57
- /tmp/scenario-engine-docs-venv/bin/python -m pip install .
66
+ python3 -m pip install deterministic-scenario-engine
67
+ scenario --help
58
68
  ```
59
69
 
60
70
  Install only the named optional integrations you need:
61
71
 
62
72
  ```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]'
73
+ python3 -m pip install 'deterministic-scenario-engine[pytest]'
74
+ python3 -m pip install 'deterministic-scenario-engine[sqlalchemy]'
75
+ python3 -m pip install 'deterministic-scenario-engine[hypothesis]'
76
+ python3 -m pip install 'deterministic-scenario-engine[schemathesis]'
67
77
  ```
68
78
 
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]'`.
79
+ Installing the current checkout with `python3 -m pip install .` is a
80
+ source-development-only alternative.
72
81
 
73
82
  ## Minimal quickstart
74
83
 
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.
84
+ The [canonical installed-package workflows](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
85
+ start by creating a complete portable DSL file under `/tmp/dse-demo`; they do
86
+ not require a source checkout or files from this repository. The guide covers
87
+ validate, run → replay, inspect/explain, both diff commands, conservative impact
88
+ analysis, export → verify, the static trace viewer, scaffold → validate, and the
89
+ human/machine diagnostic contract.
104
90
 
105
91
  ## Determinism contract
106
92
 
@@ -111,6 +97,19 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
111
97
  [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
112
98
  [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
113
99
 
100
+ The installed public compatibility corpus can be discovered with
101
+ `scenario --help` and exported without a source checkout using
102
+ `scenario compatibility-fixtures export --out /absolute/path`.
103
+
104
+ ## Canonical command workflows
105
+
106
+ Use the [quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md#canonical-installed-package-workflows)
107
+ as the single canonical workflow document. In particular, `scenario diff`
108
+ compares execution artifacts, while `scenario diff-definition` structurally
109
+ compares validated scenario definitions. `scenario impact` is a separate,
110
+ conservative static may-impact analysis. `scenario trace-view` creates one
111
+ self-contained offline HTML file from supported result/evidence.
112
+
114
113
  ## Documentation
115
114
 
116
115
  - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
@@ -125,13 +124,14 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
125
124
  - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
126
125
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
127
126
  - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
127
+ - [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
128
128
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
129
129
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
130
130
 
131
131
  ## Status
132
132
 
133
133
  Distribution release identity and deterministic engine compatibility are
134
- separate contracts. This source tree reports distribution version 2.1.1;
134
+ separate contracts. This source tree reports distribution version 2.2.0;
135
135
  generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
136
136
  GitHub Releases are the authoritative sources for public-release availability
137
137
  and history. The project is licensed under Apache-2.0.
@@ -80,6 +80,98 @@ and exact compatibility-tuple matches. Unsupported cross-version replay fails
80
80
  explicitly; indefinite replay across incompatible future major versions is not
81
81
  promised.
82
82
 
83
+ ## Cross-version assurance
84
+
85
+ Inspection support is intentionally independent from replay support: an artifact
86
+ may remain safely inspectable while exact replay is rejected. Migration is an
87
+ explicit, non-destructive operation and is available only for already-supported
88
+ routes; reading never silently migrates an artifact. Unsupported and unknown
89
+ contracts or versions fail closed rather than being treated as current-compatible.
90
+
91
+ These boundaries are tested against a small immutable corpus whose bytes,
92
+ provenance, SHA-256 values, and per-operation expectations are frozen under the
93
+ `scenario.compatibility-fixtures/1` manifest. The corpus represents selected
94
+ public states and synthetic negative cases; it is not a promise of universal
95
+ backward compatibility.
96
+
97
+ ### Consuming the compatibility fixture bundle
98
+
99
+ Starting only from an installed Scenario Engine, discover this workflow through
100
+ `scenario --help`, then export the complete frozen corpus to an absent absolute
101
+ local directory (no source checkout or network access is required):
102
+
103
+ ```sh
104
+ scenario compatibility-fixtures export --out /absolute/path/phase4_11
105
+ cd /absolute/path/phase4_11
106
+ ```
107
+
108
+ The fixture manifest's optional `scenario_resource` and `inputs_resource`
109
+ fields identify the immutable public resources needed to construct replay
110
+ commands. The bundle contains current, historical, and synthetic artifacts for
111
+ replay, inspect, migrate, and compatibility exercises. Its bytes are frozen.
112
+ `--inputs` takes a bounded JSON object, so the companion file is read as the
113
+ argument instead of copying a magic value into shell quoting.
114
+
115
+ The current fixture replays with its published scenario and inputs:
116
+
117
+ ```sh
118
+ scenario --json replay artifacts/current-2.1.2-suite-run-v1.json \
119
+ --scenario scenarios/compatibility_case.yaml \
120
+ --inputs "$(cat inputs/current-2.1.2-suite-run-v1.inputs.json)"
121
+ ```
122
+
123
+ The historical 2.0.0 suite fixture remains replayable with its own published
124
+ inputs:
125
+
126
+ ```sh
127
+ scenario --json replay artifacts/historical-2.0.0-suite-run-v1.json \
128
+ --scenario scenarios/compatibility_case.yaml \
129
+ --inputs "$(cat inputs/historical-2.0.0-suite-run-v1.inputs.json)"
130
+ ```
131
+
132
+ The historical 1.0.0 result is inspectable and migratable but is not a supported
133
+ replay artifact. This command fails closed with exit 5 and
134
+ `ENGINE_VERSION_UNSUPPORTED` in the `scenario.error/1` envelope:
135
+
136
+ ```sh
137
+ scenario --json replay artifacts/historical-1.0.0-result-v1.json \
138
+ --scenario scenarios/compatibility_case.yaml
139
+ ```
140
+
141
+ Omitting the current artifact's required inputs fails with
142
+ `REPLAY_DATA_INCOMPLETE`:
143
+
144
+ ```sh
145
+ scenario --json replay artifacts/current-2.1.2-suite-run-v1.json \
146
+ --scenario scenarios/compatibility_case.yaml
147
+ ```
148
+
149
+ An unknown engine compatibility value fails closed with
150
+ `ENGINE_VERSION_UNSUPPORTED`:
151
+
152
+ ```sh
153
+ scenario --json replay artifacts/synthetic-unknown-engine-suite-run-v1.json \
154
+ --scenario scenarios/compatibility_case.yaml --inputs '{"selected":7}'
155
+ ```
156
+
157
+ Its existing lossless migration route can be exercised without repository or
158
+ maintainer-local paths. The migration CLI requires absolute local source and
159
+ destination paths, so derive both from the fixture workspace:
160
+
161
+ ```sh
162
+ BUNDLE="$(pwd)"
163
+ scenario --json migrate "$BUNDLE/artifacts/historical-1.0.0-result-v1.json" \
164
+ "$BUNDLE/migrated-historical-1.0.0" --artifact-kind result \
165
+ --schema-version scenario.result/1 --product-version 1.0.0 \
166
+ --source-sha256 ea7068eac7888857800c2784eb1e662dbe7de4bb62f89e2e26f23b9150dc3a67
167
+ ```
168
+
169
+ Replay input values are external execution data, not recoverable from their
170
+ recorded fingerprints. When an artifact records required external inputs,
171
+ omitting them or supplying data that cannot be resolved fails closed with exit
172
+ 5, `REPLAY_DATA_INCOMPLETE`, and the next action
173
+ `PROVIDE_REQUIRED_REPLAY_INPUTS`; it never reveals a hash preimage.
174
+
83
175
  ## Plugins
84
176
 
85
177
  A plugin name identifies a generator family. Its version is an exact,
@@ -275,7 +275,7 @@ From the 2026-09-03 freeze, the likely range is roughly late October through lat
275
275
 
276
276
  ## V1 Contract Validation
277
277
 
278
- Pre-mutation validation ran from repository root `/Users/smshahinulislam/Developer/scenario-engine` on branch `main`. HEAD/main/origin-main were `ee29f52f714e84f17e1048ce24192fcf1c69345a`, tree `2a61915d578dcb1c4ec94049350a24d2cabdf721`, divergence `0/0`, with zero staged, unstaged, or untracked paths. The sole remote was `origin`, resolving to public `imshahinul/deterministic-scenario-engine`; tag `1.0.0` peeled to the baseline and its tree.
278
+ Pre-mutation validation ran from `<repository-root>` on branch `main`. HEAD/main/origin-main were `ee29f52f714e84f17e1048ce24192fcf1c69345a`, tree `2a61915d578dcb1c4ec94049350a24d2cabdf721`, divergence `0/0`, with zero staged, unstaged, or untracked paths. The sole remote was `origin`, resolving to public `imshahinul/deterministic-scenario-engine`; tag `1.0.0` peeled to the baseline and its tree.
279
279
 
280
280
  Validation used CPython 3.14.6 in isolated environment `/tmp/dse-phase2-0a-venv`, pytest 9.1.1, PyYAML 6.0.3, SQLAlchemy 2.0.52, Hypothesis 6.167.1, and Schemathesis 4.25.2, with repository `src` on `PYTHONPATH`. Canonical validation is `python -m pytest -q`; collection is `python -m pytest --collect-only -q`. It collected 280 tests and the full run passed: `280 passed, 136 subtests passed` in 41.94 seconds. Focused golden enforcement passed 4 tests and 3 subtests.
281
281
 
@@ -23,8 +23,8 @@ intentionally internal.
23
23
  ```text
24
24
  scenario_engine count=33
25
25
  scenario_engine sha256=f19f9c8ebe3fd5574550fea1fdefc5a20fa004a4913978e8bf5ab1e447278a50
26
- scenario_engine.suite count=44
27
- scenario_engine.suite sha256=7db8a4edf260d1d16960203dfa43672d1d9cb8e4eed1624be87a9201ded59512
26
+ scenario_engine.suite count=45
27
+ scenario_engine.suite sha256=2aa92ef099e841092afdfac9d8fbf7f2b5bd48898383b8810afdd85ed3116e98
28
28
  scenario_engine.composition count=29
29
29
  scenario_engine.composition sha256=689f1fecb3bbbe4822ce523e09084857f9da625a31b4b1e9bbc447d3bc425fe7
30
30
  scenario_engine.matrix count=25