deterministic-scenario-engine 2.1.2__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.2 → deterministic_scenario_engine-2.2.0}/MANIFEST.in +2 -0
  2. {deterministic_scenario_engine-2.1.2/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-2.2.0}/PKG-INFO +43 -43
  3. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/README.md +42 -42
  4. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/compatibility.md +92 -0
  5. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase3-public-contract.md +2 -2
  6. deterministic_scenario_engine-2.2.0/docs/phase4-architecture.md +815 -0
  7. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/product-evidence-gate.md +29 -9
  8. deterministic_scenario_engine-2.2.0/docs/quickstart.md +179 -0
  9. deterministic_scenario_engine-2.2.0/docs/release-notes-2.2.0.md +44 -0
  10. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/pyproject.toml +3 -0
  11. deterministic_scenario_engine-2.2.0/setup.py +44 -0
  12. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0/src/deterministic_scenario_engine.egg-info}/PKG-INFO +43 -43
  13. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +37 -0
  14. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/_version.py +1 -1
  15. deterministic_scenario_engine-2.2.0/src/scenario_engine/cli/main.py +1270 -0
  16. deterministic_scenario_engine-2.2.0/src/scenario_engine/compatibility_fixtures.py +94 -0
  17. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/current-2.1.2-suite-run-v1.json +1 -0
  18. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-1.0.0-result-v1.json +1 -0
  19. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-2.0.0-suite-run-v1.json +1 -0
  20. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-incomplete-suite-run-v1.json +1 -0
  21. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-scenario-mismatch-suite-run-v1.json +1 -0
  22. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-engine-suite-run-v1.json +1 -0
  23. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-manifest-suite-run-v9.json +1 -0
  24. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unsupported-contract.json +1 -0
  25. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/compatibility-fixtures.json +1 -0
  26. 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
  27. 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
  28. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/compatibility_case.yaml +10 -0
  29. deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/mismatch_case.yaml +10 -0
  30. deterministic_scenario_engine-2.2.0/src/scenario_engine/definition_diff.py +210 -0
  31. deterministic_scenario_engine-2.2.0/src/scenario_engine/diagnostics.py +130 -0
  32. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/compiler.py +13 -2
  33. deterministic_scenario_engine-2.2.0/src/scenario_engine/dsl/errors.py +52 -0
  34. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/parser.py +63 -10
  35. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/runtime.py +31 -4
  36. deterministic_scenario_engine-2.2.0/src/scenario_engine/impact.py +343 -0
  37. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/explain.py +4 -0
  38. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/inspect.py +3 -0
  39. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/redaction.py +3 -2
  40. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/manifest.py +49 -1
  41. deterministic_scenario_engine-2.2.0/src/scenario_engine/scaffolding.py +224 -0
  42. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/__init__.py +2 -1
  43. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/errors.py +8 -2
  44. deterministic_scenario_engine-2.2.0/src/scenario_engine/suite/publication.py +33 -0
  45. deterministic_scenario_engine-2.2.0/src/scenario_engine/trace_view.py +203 -0
  46. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0d_documentation_examples.py +1 -1
  47. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0e_packaging_release_candidate.py +1 -1
  48. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
  49. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_12_public_contract_docs_freeze.py +3 -2
  50. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_13_packaging_fresh_install_rc.py +4 -3
  51. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_1_v1_read_contract.py +1 -1
  52. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_2_composition.py +1 -1
  53. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_3_matrix.py +1 -1
  54. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_4_batch.py +1 -1
  55. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_5_inspect_explain.py +1 -1
  56. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_7_cli_product_surface.py +7 -3
  57. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_11_public_contract_docs_freeze.py +7 -3
  58. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_1_evidence_bundle_contract.py +1 -1
  59. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_7_cli_interchange_surface.py +4 -1
  60. deterministic_scenario_engine-2.2.0/tests/test_phase_4_10_canonical_workflow_help.py +76 -0
  61. deterministic_scenario_engine-2.2.0/tests/test_phase_4_11_cross_version_fixtures.py +207 -0
  62. deterministic_scenario_engine-2.2.0/tests/test_phase_4_12_hardening.py +134 -0
  63. deterministic_scenario_engine-2.2.0/tests/test_phase_4_12r2_public_fixture_packaging.py +94 -0
  64. deterministic_scenario_engine-2.2.0/tests/test_phase_4_12r3_consumer_secret_redaction.py +181 -0
  65. deterministic_scenario_engine-2.2.0/tests/test_phase_4_1_cli_replay_workflow.py +150 -0
  66. deterministic_scenario_engine-2.2.0/tests/test_phase_4_2_replay_compatibility_diagnostics.py +142 -0
  67. deterministic_scenario_engine-2.2.0/tests/test_phase_4_3_filesystem_trust_boundary.py +107 -0
  68. deterministic_scenario_engine-2.2.0/tests/test_phase_4_4_actionable_human_diagnostics.py +98 -0
  69. deterministic_scenario_engine-2.2.0/tests/test_phase_4_5_machine_readable_error_envelope.py +99 -0
  70. deterministic_scenario_engine-2.2.0/tests/test_phase_4_6_author_time_scaffolding.py +110 -0
  71. deterministic_scenario_engine-2.2.0/tests/test_phase_4_7_scenario_definition_structural_diff.py +151 -0
  72. deterministic_scenario_engine-2.2.0/tests/test_phase_4_8_conservative_impact_analysis.py +110 -0
  73. deterministic_scenario_engine-2.2.0/tests/test_phase_4_9_static_trace_viewer.py +162 -0
  74. deterministic_scenario_engine-2.1.2/docs/quickstart.md +0 -133
  75. deterministic_scenario_engine-2.1.2/src/scenario_engine/cli/main.py +0 -593
  76. deterministic_scenario_engine-2.1.2/src/scenario_engine/dsl/errors.py +0 -23
  77. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/LICENSE +0 -0
  78. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/api.md +0 -0
  79. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/determinism.md +0 -0
  80. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/dsl-reference.md +0 -0
  81. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/hypothesis.md +0 -0
  82. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase2-architecture.md +0 -0
  83. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase2-public-contract.md +0 -0
  84. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase3-architecture.md +0 -0
  85. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/plugins.md +0 -0
  86. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/release-process.md +0 -0
  87. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/reproducibility.md +0 -0
  88. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/schemathesis.md +0 -0
  89. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/security-and-non-goals.md +0 -0
  90. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/sqlalchemy.md +0 -0
  91. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/testing-oracle.md +0 -0
  92. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/api_scenario.yaml +0 -0
  93. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/cart.yaml +0 -0
  94. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/control_flow.yaml +0 -0
  95. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/ecommerce.yaml +0 -0
  96. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/openapi.yaml +0 -0
  97. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/oracle_fault.yaml +0 -0
  98. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_1b_cart.yaml +0 -0
  99. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_3_resources.yaml +0 -0
  100. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_4_control_flow.yaml +0 -0
  101. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_5_oracle_fault.yaml +0 -0
  102. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
  103. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
  104. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_8_api_scenario.yaml +0 -0
  105. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_8_openapi.yaml +0 -0
  106. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase3_ecommerce_evidence.py +0 -0
  107. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/resources.yaml +0 -0
  108. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/sqlalchemy_rows.yaml +0 -0
  109. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/setup.cfg +0 -0
  110. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
  111. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
  112. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
  113. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
  114. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/__init__.py +0 -0
  115. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/__init__.py +0 -0
  116. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/json_file.py +0 -0
  117. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
  118. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/address.py +0 -0
  119. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/artifacts.py +0 -0
  120. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/__init__.py +0 -0
  121. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/canonical.py +0 -0
  122. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/errors.py +0 -0
  123. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/models.py +0 -0
  124. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/runtime.py +0 -0
  125. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/canonical.py +0 -0
  126. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/cli/__init__.py +0 -0
  127. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/cli/__main__.py +0 -0
  128. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/clock.py +0 -0
  129. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/__init__.py +0 -0
  130. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/canonical.py +0 -0
  131. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/errors.py +0 -0
  132. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/models.py +0 -0
  133. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/parser.py +0 -0
  134. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/resolver.py +0 -0
  135. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/runtime.py +0 -0
  136. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/context.py +0 -0
  137. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/control_flow.py +0 -0
  138. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/__init__.py +0 -0
  139. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/compare.py +0 -0
  140. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/errors.py +0 -0
  141. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/models.py +0 -0
  142. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/render.py +0 -0
  143. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/serialization.py +0 -0
  144. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/__init__.py +0 -0
  145. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/canonical.py +0 -0
  146. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/errors.py +0 -0
  147. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/models.py +0 -0
  148. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/registry.py +0 -0
  149. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/__init__.py +0 -0
  150. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/models.py +0 -0
  151. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/errors.py +0 -0
  152. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/__init__.py +0 -0
  153. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/adapter.py +0 -0
  154. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/canonical.py +0 -0
  155. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/compatibility.py +0 -0
  156. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/errors.py +0 -0
  157. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/export.py +0 -0
  158. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/fixture.py +0 -0
  159. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/migration.py +0 -0
  160. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/models.py +0 -0
  161. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/read.py +0 -0
  162. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/expressions.py +0 -0
  163. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/faults.py +0 -0
  164. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/history.py +0 -0
  165. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/ids.py +0 -0
  166. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/__init__.py +0 -0
  167. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/errors.py +0 -0
  168. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/models.py +0 -0
  169. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/serialization.py +0 -0
  170. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/__init__.py +0 -0
  171. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/hypothesis.py +0 -0
  172. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/schemathesis.py +0 -0
  173. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/invariants.py +0 -0
  174. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/__init__.py +0 -0
  175. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/canonical.py +0 -0
  176. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/errors.py +0 -0
  177. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/expand.py +0 -0
  178. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/filtering.py +0 -0
  179. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/models.py +0 -0
  180. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/runtime.py +0 -0
  181. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle.py +0 -0
  182. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
  183. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/errors.py +0 -0
  184. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
  185. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/models.py +0 -0
  186. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
  187. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/plugins.py +0 -0
  188. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/provenance.py +0 -0
  189. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/pytest_plugin.py +0 -0
  190. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/__init__.py +0 -0
  191. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
  192. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
  193. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/resources.py +0 -0
  194. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/result.py +0 -0
  195. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/rng.py +0 -0
  196. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/runner.py +0 -0
  197. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/state.py +0 -0
  198. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/models.py +0 -0
  199. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/read.py +0 -0
  200. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/serialization.py +0 -0
  201. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/validation.py +0 -0
  202. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/values.py +0 -0
  203. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
  204. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1b_linear_dsl.py +0 -0
  205. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
  206. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
  207. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_2a_reproducible_results.py +0 -0
  208. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
  209. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_3_resources_constraints.py +0 -0
  210. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_4_control_flow.py +0 -0
  211. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_5_oracle_faults.py +0 -0
  212. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
  213. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
  214. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
  215. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
  216. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
  217. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
  218. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_1_models_serialization.py +0 -0
  219. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
  220. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
  221. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_9_oracle_assertions.py +0 -0
  222. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
  223. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
  224. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
  225. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_3_ordered_export.py +0 -0
  226. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
  227. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
  228. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
  229. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
  230. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_readme_pypi_portability.py +0 -0
  231. {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_test_portability.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.2
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
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
 
42
42
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
43
43
  business histories and deterministic scenario suites with ground truth for
44
- testing. The source-tree distribution version is 2.1.2. Distribution release
44
+ testing. The source-tree distribution version is 2.2.0. Distribution release
45
45
  identity and deterministic compatibility identity are separate:
46
46
  `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
47
47
  public-release availability and history, see PyPI and GitHub Releases.
@@ -72,12 +72,20 @@ make expected behavior explicit.
72
72
  - ordered Cartesian matrices with stable case IDs and original indexes
73
73
  - immutable ordered batch plans and worker-independent results
74
74
  - structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
75
- - 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
76
78
  local evidence export, verification, and lossless migration
77
79
  - explicit immutable Domain Pack registries and pure Oracle Assertions
78
80
  - canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
79
81
  explicit adapters, closed lossless migrations, and fixture-directory export
80
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
+
81
89
  Core execution does not require a database, network service, plugin, or property
82
90
  testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
83
91
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
@@ -87,57 +95,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
87
95
 
88
96
  ## Installation
89
97
 
90
- 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:
91
101
 
92
102
  ```console
93
- python3 -m venv /tmp/scenario-engine-docs-venv
94
- /tmp/scenario-engine-docs-venv/bin/python -m pip install .
103
+ python3 -m pip install deterministic-scenario-engine
104
+ scenario --help
95
105
  ```
96
106
 
97
107
  Install only the named optional integrations you need:
98
108
 
99
109
  ```console
100
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[pytest]'
101
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[sqlalchemy]'
102
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[hypothesis]'
103
- /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
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]'
104
114
  ```
105
115
 
106
- Install the package with `pip install deterministic-scenario-engine`, or select
107
- an optional integration with a command such as
108
- `pip install 'deterministic-scenario-engine[pytest]'`.
116
+ Installing the current checkout with `python3 -m pip install .` is a
117
+ source-development-only alternative.
109
118
 
110
119
  ## Minimal quickstart
111
120
 
112
- The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
113
- Run it from the repository root:
114
-
115
- ```python
116
- from pathlib import Path
117
-
118
- from scenario_engine import (
119
- compile_document,
120
- parse_yaml,
121
- replay_scenario,
122
- run_scenario,
123
- )
124
-
125
- yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
126
- document = parse_yaml(yaml_text)
127
- scenario = compile_document(document)
128
- result = run_scenario(scenario, root_seed="quickstart", run_index=0)
129
-
130
- print(result.final_state["checkout_complete"])
131
- print(result.trace())
132
- stable_bytes = result.to_json_bytes()
133
- manifest = result.manifest
134
-
135
- replayed = replay_scenario(yaml_text, manifest)
136
- assert replayed.to_json_bytes() == stable_bytes
137
- ```
138
-
139
- `ScenarioResult.final_state` is the supported state-reading property; the stable
140
- normalized result contains the same data under its `state` field.
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.
141
127
 
142
128
  ## Determinism contract
143
129
 
@@ -148,6 +134,19 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
148
134
  [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
149
135
  [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
150
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
+
151
150
  ## Documentation
152
151
 
153
152
  - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
@@ -162,13 +161,14 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
162
161
  - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
163
162
  - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
164
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)
165
165
  - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
166
166
  - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
167
167
 
168
168
  ## Status
169
169
 
170
170
  Distribution release identity and deterministic engine compatibility are
171
- separate contracts. This source tree reports distribution version 2.1.2;
171
+ separate contracts. This source tree reports distribution version 2.2.0;
172
172
  generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
173
173
  GitHub Releases are the authoritative sources for public-release availability
174
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.2. 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.2;
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,
@@ -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