deterministic-scenario-engine 2.1.0__tar.gz → 2.1.2__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 (191) hide show
  1. {deterministic_scenario_engine-2.1.0/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-2.1.2}/PKG-INFO +39 -35
  2. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/README.md +32 -34
  3. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/phase2-architecture.md +1 -1
  4. deterministic_scenario_engine-2.1.2/docs/product-evidence-gate.md +65 -0
  5. deterministic_scenario_engine-2.1.2/docs/release-process.md +63 -0
  6. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/pyproject.toml +8 -1
  7. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2/src/deterministic_scenario_engine.egg-info}/PKG-INFO +39 -35
  8. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +5 -1
  9. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/deterministic_scenario_engine.egg-info/requires.txt +1 -0
  10. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/_version.py +1 -1
  11. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_2b_json_pytest_integration.py +9 -15
  12. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_4_control_flow.py +5 -2
  13. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_6_sqlalchemy_materializer.py +5 -3
  14. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_7_plugins_ecommerce.py +5 -2
  15. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_8_hypothesis_schemathesis.py +2 -2
  16. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_1_0c_dsl_compatibility_contract.py +2 -1
  17. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_1_0e_packaging_release_candidate.py +24 -19
  18. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
  19. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_12_public_contract_docs_freeze.py +1 -1
  20. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_13_packaging_fresh_install_rc.py +4 -6
  21. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_1_v1_read_contract.py +1 -1
  22. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_2_composition.py +1 -1
  23. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_3_matrix.py +1 -1
  24. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_4_batch.py +1 -1
  25. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_5_inspect_explain.py +1 -1
  26. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_7_cli_product_surface.py +1 -1
  27. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_11_public_contract_docs_freeze.py +3 -1
  28. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_1_evidence_bundle_contract.py +1 -1
  29. deterministic_scenario_engine-2.1.2/tests/test_readme_pypi_portability.py +85 -0
  30. deterministic_scenario_engine-2.1.2/tests/test_test_portability.py +26 -0
  31. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/LICENSE +0 -0
  32. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/MANIFEST.in +0 -0
  33. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/api.md +0 -0
  34. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/compatibility.md +0 -0
  35. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/determinism.md +0 -0
  36. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/dsl-reference.md +0 -0
  37. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/hypothesis.md +0 -0
  38. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/phase2-public-contract.md +0 -0
  39. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/phase3-architecture.md +0 -0
  40. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/phase3-public-contract.md +0 -0
  41. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/plugins.md +0 -0
  42. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/quickstart.md +0 -0
  43. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/reproducibility.md +0 -0
  44. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/schemathesis.md +0 -0
  45. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/security-and-non-goals.md +0 -0
  46. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/sqlalchemy.md +0 -0
  47. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/docs/testing-oracle.md +0 -0
  48. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/api_scenario.yaml +0 -0
  49. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/cart.yaml +0 -0
  50. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/control_flow.yaml +0 -0
  51. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/ecommerce.yaml +0 -0
  52. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/openapi.yaml +0 -0
  53. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/oracle_fault.yaml +0 -0
  54. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_1b_cart.yaml +0 -0
  55. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_3_resources.yaml +0 -0
  56. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_4_control_flow.yaml +0 -0
  57. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_5_oracle_fault.yaml +0 -0
  58. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
  59. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
  60. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_8_api_scenario.yaml +0 -0
  61. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase0_8_openapi.yaml +0 -0
  62. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/phase3_ecommerce_evidence.py +0 -0
  63. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/resources.yaml +0 -0
  64. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/examples/sqlalchemy_rows.yaml +0 -0
  65. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/setup.cfg +0 -0
  66. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
  67. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
  68. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
  69. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/__init__.py +0 -0
  70. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/adapters/__init__.py +0 -0
  71. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/adapters/json_file.py +0 -0
  72. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
  73. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/address.py +0 -0
  74. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/artifacts.py +0 -0
  75. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/batch/__init__.py +0 -0
  76. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/batch/canonical.py +0 -0
  77. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/batch/errors.py +0 -0
  78. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/batch/models.py +0 -0
  79. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/batch/runtime.py +0 -0
  80. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/canonical.py +0 -0
  81. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/cli/__init__.py +0 -0
  82. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/cli/__main__.py +0 -0
  83. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/cli/main.py +0 -0
  84. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/clock.py +0 -0
  85. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/__init__.py +0 -0
  86. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/canonical.py +0 -0
  87. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/errors.py +0 -0
  88. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/models.py +0 -0
  89. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/parser.py +0 -0
  90. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/resolver.py +0 -0
  91. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/composition/runtime.py +0 -0
  92. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/context.py +0 -0
  93. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/control_flow.py +0 -0
  94. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/diff/__init__.py +0 -0
  95. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/diff/compare.py +0 -0
  96. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/diff/errors.py +0 -0
  97. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/diff/models.py +0 -0
  98. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/diff/render.py +0 -0
  99. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/diff/serialization.py +0 -0
  100. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/domain_packs/__init__.py +0 -0
  101. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/domain_packs/canonical.py +0 -0
  102. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/domain_packs/errors.py +0 -0
  103. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/domain_packs/models.py +0 -0
  104. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/domain_packs/registry.py +0 -0
  105. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/dsl/__init__.py +0 -0
  106. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/dsl/compiler.py +0 -0
  107. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/dsl/errors.py +0 -0
  108. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/dsl/models.py +0 -0
  109. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/dsl/parser.py +0 -0
  110. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/dsl/runtime.py +0 -0
  111. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/errors.py +0 -0
  112. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/__init__.py +0 -0
  113. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/adapter.py +0 -0
  114. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/canonical.py +0 -0
  115. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/compatibility.py +0 -0
  116. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/errors.py +0 -0
  117. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/export.py +0 -0
  118. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/fixture.py +0 -0
  119. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/migration.py +0 -0
  120. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/models.py +0 -0
  121. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/evidence/read.py +0 -0
  122. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/expressions.py +0 -0
  123. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/faults.py +0 -0
  124. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/history.py +0 -0
  125. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/ids.py +0 -0
  126. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/__init__.py +0 -0
  127. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/errors.py +0 -0
  128. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/explain.py +0 -0
  129. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/inspect.py +0 -0
  130. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/models.py +0 -0
  131. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/redaction.py +0 -0
  132. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/inspection/serialization.py +0 -0
  133. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/integrations/__init__.py +0 -0
  134. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/integrations/hypothesis.py +0 -0
  135. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/integrations/schemathesis.py +0 -0
  136. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/invariants.py +0 -0
  137. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/manifest.py +0 -0
  138. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/__init__.py +0 -0
  139. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/canonical.py +0 -0
  140. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/errors.py +0 -0
  141. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/expand.py +0 -0
  142. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/filtering.py +0 -0
  143. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/models.py +0 -0
  144. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/matrix/runtime.py +0 -0
  145. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/oracle.py +0 -0
  146. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
  147. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/oracle_assertions/errors.py +0 -0
  148. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
  149. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/oracle_assertions/models.py +0 -0
  150. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
  151. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/plugins.py +0 -0
  152. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/provenance.py +0 -0
  153. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/pytest_plugin.py +0 -0
  154. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/reference_packs/__init__.py +0 -0
  155. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
  156. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
  157. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/resources.py +0 -0
  158. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/result.py +0 -0
  159. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/rng.py +0 -0
  160. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/runner.py +0 -0
  161. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/state.py +0 -0
  162. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/suite/__init__.py +0 -0
  163. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/suite/errors.py +0 -0
  164. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/suite/models.py +0 -0
  165. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/suite/read.py +0 -0
  166. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/suite/serialization.py +0 -0
  167. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/validation.py +0 -0
  168. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/src/scenario_engine/values.py +0 -0
  169. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
  170. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_1b_linear_dsl.py +0 -0
  171. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
  172. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
  173. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_2a_reproducible_results.py +0 -0
  174. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_3_resources_constraints.py +0 -0
  175. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_0_5_oracle_faults.py +0 -0
  176. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
  177. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_1_0d_documentation_examples.py +0 -0
  178. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
  179. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_1_models_serialization.py +0 -0
  180. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
  181. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
  182. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_2_9_oracle_assertions.py +0 -0
  183. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
  184. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
  185. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
  186. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_3_ordered_export.py +0 -0
  187. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
  188. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
  189. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
  190. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_7_cli_interchange_surface.py +0 -0
  191. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.2}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
@@ -1,8 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deterministic-scenario-engine
3
- Version: 2.1.0
3
+ Version: 2.1.2
4
4
  Summary: Reproducible, state-consistent business scenarios with deterministic ground truth
5
5
  License-Expression: Apache-2.0
6
+ Project-URL: Homepage, https://github.com/imshahinul/deterministic-scenario-engine
7
+ Project-URL: Documentation, https://github.com/imshahinul/deterministic-scenario-engine/tree/main/docs
8
+ Project-URL: Source, https://github.com/imshahinul/deterministic-scenario-engine
9
+ Project-URL: Issues, https://github.com/imshahinul/deterministic-scenario-engine/issues
10
+ Project-URL: Release Notes, https://github.com/imshahinul/deterministic-scenario-engine/releases
6
11
  Keywords: deterministic,scenario,testing,fixtures,replay
7
12
  Classifier: Development Status :: 5 - Production/Stable
8
13
  Classifier: Intended Audience :: Developers
@@ -20,6 +25,7 @@ License-File: LICENSE
20
25
  Requires-Dist: PyYAML==6.0.3
21
26
  Provides-Extra: pytest
22
27
  Requires-Dist: pytest<10,>=9.1; extra == "pytest"
28
+ Requires-Dist: build<2,>=1; extra == "pytest"
23
29
  Provides-Extra: sqlalchemy
24
30
  Requires-Dist: SQLAlchemy<3,>=2.0; extra == "sqlalchemy"
25
31
  Provides-Extra: hypothesis
@@ -35,11 +41,10 @@ Dynamic: license-file
35
41
 
36
42
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
37
43
  business histories and deterministic scenario suites with ground truth for
38
- testing. The published distribution is `deterministic-scenario-engine` 2.0.0.
39
- Phase 3 evidence-interchange capabilities are implemented on `main` and the
40
- current source release candidate reports distribution version 2.1.0, while 2.1.0
41
- is not published. Its deterministic compatibility version remains
42
- `ENGINE_VERSION == "1.0.0"`, and its DSL version remains integer 1.
44
+ testing. The source-tree distribution version is 2.1.2. Distribution release
45
+ identity and deterministic compatibility identity are separate:
46
+ `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
47
+ public-release availability and history, see PyPI and GitHub Releases.
43
48
 
44
49
  ## Why it exists
45
50
 
@@ -74,11 +79,11 @@ make expected behavior explicit.
74
79
  explicit adapters, closed lossless migrations, and fixture-directory export
75
80
 
76
81
  Core execution does not require a database, network service, plugin, or property
77
- testing framework. See [security assumptions and non-goals](docs/security-and-non-goals.md).
82
+ testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
78
83
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
79
84
  wall-clock, or ambient environment semantics. The historical Phase 2 contract
80
- is frozen in the [Phase 2 public contract](docs/phase2-public-contract.md); the
81
- additive evidence surface is frozen in the [Phase 3 public contract](docs/phase3-public-contract.md).
85
+ is frozen in the [Phase 2 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md); the
86
+ additive evidence surface is frozen in the [Phase 3 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md).
82
87
 
83
88
  ## Installation
84
89
 
@@ -98,13 +103,13 @@ Install only the named optional integrations you need:
98
103
  /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
99
104
  ```
100
105
 
101
- The published distribution is `deterministic-scenario-engine` 2.0.0. Install the package
102
- with `pip install deterministic-scenario-engine`, or select an optional integration
103
- with a command such as `pip install 'deterministic-scenario-engine[pytest]'`.
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]'`.
104
109
 
105
110
  ## Minimal quickstart
106
111
 
107
- The public [cart scenario](examples/cart.yaml) is an executable DSL 1 document.
112
+ The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
108
113
  Run it from the repository root:
109
114
 
110
115
  ```python
@@ -139,32 +144,31 @@ normalized result contains the same data under its `state` field.
139
144
  Generation derives from semantic `ExecutionAddress` values, not consumption of
140
145
  a mutable global random stream. Exact replay requires the same canonical
141
146
  scenario, explicit inputs, algorithms/plugins, and recorded execution context.
142
- Unsupported cross-version replay fails explicitly. See the [determinism model](docs/determinism.md),
143
- [reproducibility guide](docs/reproducibility.md), and normative
144
- [compatibility contract](docs/compatibility.md).
147
+ Unsupported cross-version replay fails explicitly. See the [determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md),
148
+ [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
149
+ [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
145
150
 
146
151
  ## Documentation
147
152
 
148
- - [Quickstart](docs/quickstart.md)
149
- - [DSL 1 reference](docs/dsl-reference.md)
150
- - [Determinism model](docs/determinism.md)
151
- - [Reproducibility and replay](docs/reproducibility.md)
152
- - [Testing, faults, and oracle](docs/testing-oracle.md)
153
- - [Plugins](docs/plugins.md)
154
- - [SQLAlchemy adapter](docs/sqlalchemy.md)
155
- - [Hypothesis integration](docs/hypothesis.md)
156
- - [Schemathesis integration](docs/schemathesis.md)
157
- - [Public Python API](docs/api.md)
158
- - [Security assumptions and non-goals](docs/security-and-non-goals.md)
159
- - [Compatibility contract](docs/compatibility.md)
160
- - [Phase 2 public contract, CLI, and hard bounds](docs/phase2-public-contract.md)
161
- - [Phase 3 public contract and evidence interchange](docs/phase3-public-contract.md)
153
+ - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
154
+ - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
155
+ - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
156
+ - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
157
+ - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
158
+ - [Plugins](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/plugins.md)
159
+ - [SQLAlchemy adapter](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/sqlalchemy.md)
160
+ - [Hypothesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/hypothesis.md)
161
+ - [Schemathesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/schemathesis.md)
162
+ - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
163
+ - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
164
+ - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
165
+ - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
166
+ - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
162
167
 
163
168
  ## Status
164
169
 
165
170
  Distribution release identity and deterministic engine compatibility are
166
- separate contracts. Version 2.0.0 has been published to PyPI and as a GitHub
167
- Release. This source tree reports the unpublished 2.1.0 release candidate;
168
- generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. No 2.1.0 tag,
169
- GitHub Release, or package-index publication exists. The project is licensed
170
- under Apache-2.0.
171
+ separate contracts. This source tree reports distribution version 2.1.2;
172
+ generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
173
+ GitHub Releases are the authoritative sources for public-release availability
174
+ and history. The project is licensed under Apache-2.0.
@@ -4,11 +4,10 @@
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 published distribution is `deterministic-scenario-engine` 2.0.0.
8
- Phase 3 evidence-interchange capabilities are implemented on `main` and the
9
- current source release candidate reports distribution version 2.1.0, while 2.1.0
10
- is not published. Its deterministic compatibility version remains
11
- `ENGINE_VERSION == "1.0.0"`, and its DSL version remains integer 1.
7
+ testing. The source-tree distribution version is 2.1.2. Distribution release
8
+ identity and deterministic compatibility identity are separate:
9
+ `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
10
+ public-release availability and history, see PyPI and GitHub Releases.
12
11
 
13
12
  ## Why it exists
14
13
 
@@ -43,11 +42,11 @@ make expected behavior explicit.
43
42
  explicit adapters, closed lossless migrations, and fixture-directory export
44
43
 
45
44
  Core execution does not require a database, network service, plugin, or property
46
- testing framework. See [security assumptions and non-goals](docs/security-and-non-goals.md).
45
+ testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
47
46
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
48
47
  wall-clock, or ambient environment semantics. The historical Phase 2 contract
49
- is frozen in the [Phase 2 public contract](docs/phase2-public-contract.md); the
50
- additive evidence surface is frozen in the [Phase 3 public contract](docs/phase3-public-contract.md).
48
+ is frozen in the [Phase 2 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md); the
49
+ additive evidence surface is frozen in the [Phase 3 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md).
51
50
 
52
51
  ## Installation
53
52
 
@@ -67,13 +66,13 @@ Install only the named optional integrations you need:
67
66
  /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
68
67
  ```
69
68
 
70
- The published distribution is `deterministic-scenario-engine` 2.0.0. Install the package
71
- with `pip install deterministic-scenario-engine`, or select an optional integration
72
- with a command such as `pip install 'deterministic-scenario-engine[pytest]'`.
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]'`.
73
72
 
74
73
  ## Minimal quickstart
75
74
 
76
- The public [cart scenario](examples/cart.yaml) is an executable DSL 1 document.
75
+ The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
77
76
  Run it from the repository root:
78
77
 
79
78
  ```python
@@ -108,32 +107,31 @@ normalized result contains the same data under its `state` field.
108
107
  Generation derives from semantic `ExecutionAddress` values, not consumption of
109
108
  a mutable global random stream. Exact replay requires the same canonical
110
109
  scenario, explicit inputs, algorithms/plugins, and recorded execution context.
111
- Unsupported cross-version replay fails explicitly. See the [determinism model](docs/determinism.md),
112
- [reproducibility guide](docs/reproducibility.md), and normative
113
- [compatibility contract](docs/compatibility.md).
110
+ Unsupported cross-version replay fails explicitly. See the [determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md),
111
+ [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
112
+ [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
114
113
 
115
114
  ## Documentation
116
115
 
117
- - [Quickstart](docs/quickstart.md)
118
- - [DSL 1 reference](docs/dsl-reference.md)
119
- - [Determinism model](docs/determinism.md)
120
- - [Reproducibility and replay](docs/reproducibility.md)
121
- - [Testing, faults, and oracle](docs/testing-oracle.md)
122
- - [Plugins](docs/plugins.md)
123
- - [SQLAlchemy adapter](docs/sqlalchemy.md)
124
- - [Hypothesis integration](docs/hypothesis.md)
125
- - [Schemathesis integration](docs/schemathesis.md)
126
- - [Public Python API](docs/api.md)
127
- - [Security assumptions and non-goals](docs/security-and-non-goals.md)
128
- - [Compatibility contract](docs/compatibility.md)
129
- - [Phase 2 public contract, CLI, and hard bounds](docs/phase2-public-contract.md)
130
- - [Phase 3 public contract and evidence interchange](docs/phase3-public-contract.md)
116
+ - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
117
+ - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
118
+ - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
119
+ - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
120
+ - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
121
+ - [Plugins](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/plugins.md)
122
+ - [SQLAlchemy adapter](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/sqlalchemy.md)
123
+ - [Hypothesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/hypothesis.md)
124
+ - [Schemathesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/schemathesis.md)
125
+ - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
126
+ - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
127
+ - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
128
+ - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
129
+ - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
131
130
 
132
131
  ## Status
133
132
 
134
133
  Distribution release identity and deterministic engine compatibility are
135
- separate contracts. Version 2.0.0 has been published to PyPI and as a GitHub
136
- Release. This source tree reports the unpublished 2.1.0 release candidate;
137
- generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. No 2.1.0 tag,
138
- GitHub Release, or package-index publication exists. The project is licensed
139
- under Apache-2.0.
134
+ separate contracts. This source tree reports distribution version 2.1.2;
135
+ generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
136
+ GitHub Releases are the authoritative sources for public-release availability
137
+ and history. The project is licensed under Apache-2.0.
@@ -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
 
@@ -0,0 +1,65 @@
1
+ # Product evidence gate
2
+
3
+ A successfully shipped phase does not automatically authorize design or
4
+ implementation of the next feature phase.
5
+
6
+ ## Demand evidence requirement
7
+
8
+ Before Phase 4 product scope can be frozen, every proposed substantial
9
+ capability must trace to credible evidence of an actual problem. Acceptable
10
+ evidence includes:
11
+
12
+ - an external user report or request;
13
+ - a public issue or discussion describing real friction;
14
+ - observed integration failure or friction;
15
+ - a repeated support question;
16
+ - a real downstream implementation needing the capability;
17
+ - credible usage or adoption evidence combined with a specific observed
18
+ problem.
19
+
20
+ The following is insufficient by itself: ability to build something,
21
+ architectural fit or elegance, previous deferral, download counts, GitHub stars,
22
+ benchmark opportunities, or feature parity with another tool.
23
+
24
+ ## Maintenance exceptions
25
+
26
+ Product-demand evidence is not required before addressing a confirmed bug,
27
+ security vulnerability, compatibility regression, release-integrity defect,
28
+ dependency or platform breakage, data-loss or correctness issue, or maintenance
29
+ needed to preserve an existing public contract. Such work instead requires
30
+ evidence of the defect or risk.
31
+
32
+ ## Phase 4 evidence packet
33
+
34
+ No Phase 4 architecture freeze or implementation prompt is authorized until an
35
+ evidence packet exists. For every candidate substantial feature, it must record:
36
+
37
+ - problem statement;
38
+ - evidence source and date;
39
+ - affected user or workflow;
40
+ - observed current workaround or failure;
41
+ - why DSE itself should solve the problem;
42
+ - why external tooling is insufficient;
43
+ - minimum useful outcome;
44
+ - evidence strength.
45
+
46
+ Classify each candidate as `SUPPORTED_BY_EVIDENCE`, `WEAK_EVIDENCE`, or
47
+ `NO_EVIDENCE`. Only supported items may enter MUST or SHOULD scope. Weak items
48
+ remain observational; unsupported items go to the parking lot or are deferred.
49
+ This policy does not itself create a Phase 4 feature list.
50
+
51
+ ## Adoption observation
52
+
53
+ Downloads, stars, forks, clones, and traffic may be recorded as context but do
54
+ not prove a feature need. Preferred evidence combines a specific observed
55
+ problem, credible user/workflow context, and repeatability or consequence.
56
+ Quantitative adoption data is supporting evidence, not the product requirement.
57
+
58
+ Until qualifying external problem evidence and the required packet exist:
59
+
60
+ ```text
61
+ PHASE4_AUTHORIZED=NO
62
+ PHASE4_ARCHITECTURE_STARTED=NO
63
+ PHASE4_IMPLEMENTATION_STARTED=NO
64
+ NEXT_ACTIVITY=ADOPTION_AND_PROBLEM_OBSERVATION
65
+ ```
@@ -0,0 +1,63 @@
1
+ # Release process
2
+
3
+ The package README is the PyPI long description. It must describe durable
4
+ product and version semantics, not transient publication state. Statements such
5
+ as "unpublished", "no current-version tag", "no GitHub Release", or "no
6
+ package-index publication" belong only in checkpoint evidence, release audits,
7
+ or temporary release-candidate reports.
8
+
9
+ ## Pre-RC
10
+
11
+ Before building artifacts:
12
+
13
+ - run the README release-state-neutrality test;
14
+ - require `PRE_RC_PYPI_LINK_PORTABILITY=PASS` by rejecting repository-relative
15
+ file links in the package README and checking internal anchors separately;
16
+ - confirm the configured package long-description material passes the same
17
+ neutrality test.
18
+
19
+ ## RC
20
+
21
+ Release-candidate evidence may record that publication, a tag, or a release is
22
+ absent. Package long-description material may not encode those transient facts.
23
+
24
+ ## Pre-upload
25
+
26
+ Immediately before `twine upload`, rerun the source README neutrality test and
27
+ inspect the accepted wheel and sdist metadata to confirm their packaged
28
+ README/long description is release-state neutral. Require
29
+ `PREUPLOAD_PYPI_LINK_PORTABILITY=PASS` for both artifact descriptions, run
30
+ `twine check` and record `TWINE_RENDER_CHECK=PASS`, and resolve every important
31
+ absolute documentation target to record `PYPI_LINK_TARGET_CHECK=PASS`.
32
+
33
+ ## Publication
34
+
35
+ Publish the exact accepted artifacts. Do not rebuild between acceptance and
36
+ publication.
37
+
38
+ ## Post-publication completion gate
39
+
40
+ Using fresh public observations rather than pre-upload text, verify:
41
+
42
+ - the PyPI version exists and its hashes exactly match the accepted artifacts;
43
+ - a production installation passes;
44
+ - the release tag targets the exact accepted commit;
45
+ - the GitHub Release exists and its asset hashes exactly match;
46
+ - the canonical README remains consistent with durable version semantics;
47
+ - package documentation still satisfies the release-state policy;
48
+ - fresh inspection of the rendered PyPI project page proves that documentation,
49
+ examples, security, compatibility, license, and repository links resolve to
50
+ their intended destinations, recording `POSTPUBLICATION_PYPI_LINK_SMOKE=PASS`.
51
+
52
+ `twine check` alone is not sufficient for link portability. The post-publication
53
+ gate must inspect the live PyPI description and its rendered link targets.
54
+
55
+ Only after every post-publication check passes may checkpoint evidence record
56
+ `PHASE_COMPLETE=YES`. A post-publication check must never rely solely on text
57
+ prepared before upload.
58
+
59
+ Published wheel and sdist metadata is immutable. If stale long-description text
60
+ has already shipped, record it as a known published-artifact limitation; do not
61
+ rewrite, rebuild, republish, or yank an otherwise accepted release merely to
62
+ alter that text. The durable correction applies to canonical `main` and future
63
+ artifacts.
@@ -25,11 +25,18 @@ classifiers = [
25
25
  ]
26
26
  dependencies = ["PyYAML==6.0.3"]
27
27
 
28
+ [project.urls]
29
+ Homepage = "https://github.com/imshahinul/deterministic-scenario-engine"
30
+ Documentation = "https://github.com/imshahinul/deterministic-scenario-engine/tree/main/docs"
31
+ Source = "https://github.com/imshahinul/deterministic-scenario-engine"
32
+ Issues = "https://github.com/imshahinul/deterministic-scenario-engine/issues"
33
+ "Release Notes" = "https://github.com/imshahinul/deterministic-scenario-engine/releases"
34
+
28
35
  [project.scripts]
29
36
  scenario = "scenario_engine.cli:main"
30
37
 
31
38
  [project.optional-dependencies]
32
- pytest = ["pytest>=9.1,<10"]
39
+ pytest = ["pytest>=9.1,<10", "build>=1,<2"]
33
40
  sqlalchemy = ["SQLAlchemy>=2.0,<3"]
34
41
  hypothesis = ["hypothesis>=6,<7"]
35
42
  schemathesis = ["hypothesis>=6,<7", "schemathesis>=4,<5"]
@@ -1,8 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deterministic-scenario-engine
3
- Version: 2.1.0
3
+ Version: 2.1.2
4
4
  Summary: Reproducible, state-consistent business scenarios with deterministic ground truth
5
5
  License-Expression: Apache-2.0
6
+ Project-URL: Homepage, https://github.com/imshahinul/deterministic-scenario-engine
7
+ Project-URL: Documentation, https://github.com/imshahinul/deterministic-scenario-engine/tree/main/docs
8
+ Project-URL: Source, https://github.com/imshahinul/deterministic-scenario-engine
9
+ Project-URL: Issues, https://github.com/imshahinul/deterministic-scenario-engine/issues
10
+ Project-URL: Release Notes, https://github.com/imshahinul/deterministic-scenario-engine/releases
6
11
  Keywords: deterministic,scenario,testing,fixtures,replay
7
12
  Classifier: Development Status :: 5 - Production/Stable
8
13
  Classifier: Intended Audience :: Developers
@@ -20,6 +25,7 @@ License-File: LICENSE
20
25
  Requires-Dist: PyYAML==6.0.3
21
26
  Provides-Extra: pytest
22
27
  Requires-Dist: pytest<10,>=9.1; extra == "pytest"
28
+ Requires-Dist: build<2,>=1; extra == "pytest"
23
29
  Provides-Extra: sqlalchemy
24
30
  Requires-Dist: SQLAlchemy<3,>=2.0; extra == "sqlalchemy"
25
31
  Provides-Extra: hypothesis
@@ -35,11 +41,10 @@ Dynamic: license-file
35
41
 
36
42
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
37
43
  business histories and deterministic scenario suites with ground truth for
38
- testing. The published distribution is `deterministic-scenario-engine` 2.0.0.
39
- Phase 3 evidence-interchange capabilities are implemented on `main` and the
40
- current source release candidate reports distribution version 2.1.0, while 2.1.0
41
- is not published. Its deterministic compatibility version remains
42
- `ENGINE_VERSION == "1.0.0"`, and its DSL version remains integer 1.
44
+ testing. The source-tree distribution version is 2.1.2. Distribution release
45
+ identity and deterministic compatibility identity are separate:
46
+ `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
47
+ public-release availability and history, see PyPI and GitHub Releases.
43
48
 
44
49
  ## Why it exists
45
50
 
@@ -74,11 +79,11 @@ make expected behavior explicit.
74
79
  explicit adapters, closed lossless migrations, and fixture-directory export
75
80
 
76
81
  Core execution does not require a database, network service, plugin, or property
77
- testing framework. See [security assumptions and non-goals](docs/security-and-non-goals.md).
82
+ testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
78
83
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
79
84
  wall-clock, or ambient environment semantics. The historical Phase 2 contract
80
- is frozen in the [Phase 2 public contract](docs/phase2-public-contract.md); the
81
- additive evidence surface is frozen in the [Phase 3 public contract](docs/phase3-public-contract.md).
85
+ is frozen in the [Phase 2 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md); the
86
+ additive evidence surface is frozen in the [Phase 3 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md).
82
87
 
83
88
  ## Installation
84
89
 
@@ -98,13 +103,13 @@ Install only the named optional integrations you need:
98
103
  /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
99
104
  ```
100
105
 
101
- The published distribution is `deterministic-scenario-engine` 2.0.0. Install the package
102
- with `pip install deterministic-scenario-engine`, or select an optional integration
103
- with a command such as `pip install 'deterministic-scenario-engine[pytest]'`.
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]'`.
104
109
 
105
110
  ## Minimal quickstart
106
111
 
107
- The public [cart scenario](examples/cart.yaml) is an executable DSL 1 document.
112
+ The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
108
113
  Run it from the repository root:
109
114
 
110
115
  ```python
@@ -139,32 +144,31 @@ normalized result contains the same data under its `state` field.
139
144
  Generation derives from semantic `ExecutionAddress` values, not consumption of
140
145
  a mutable global random stream. Exact replay requires the same canonical
141
146
  scenario, explicit inputs, algorithms/plugins, and recorded execution context.
142
- Unsupported cross-version replay fails explicitly. See the [determinism model](docs/determinism.md),
143
- [reproducibility guide](docs/reproducibility.md), and normative
144
- [compatibility contract](docs/compatibility.md).
147
+ Unsupported cross-version replay fails explicitly. See the [determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md),
148
+ [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
149
+ [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
145
150
 
146
151
  ## Documentation
147
152
 
148
- - [Quickstart](docs/quickstart.md)
149
- - [DSL 1 reference](docs/dsl-reference.md)
150
- - [Determinism model](docs/determinism.md)
151
- - [Reproducibility and replay](docs/reproducibility.md)
152
- - [Testing, faults, and oracle](docs/testing-oracle.md)
153
- - [Plugins](docs/plugins.md)
154
- - [SQLAlchemy adapter](docs/sqlalchemy.md)
155
- - [Hypothesis integration](docs/hypothesis.md)
156
- - [Schemathesis integration](docs/schemathesis.md)
157
- - [Public Python API](docs/api.md)
158
- - [Security assumptions and non-goals](docs/security-and-non-goals.md)
159
- - [Compatibility contract](docs/compatibility.md)
160
- - [Phase 2 public contract, CLI, and hard bounds](docs/phase2-public-contract.md)
161
- - [Phase 3 public contract and evidence interchange](docs/phase3-public-contract.md)
153
+ - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
154
+ - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
155
+ - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
156
+ - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
157
+ - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
158
+ - [Plugins](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/plugins.md)
159
+ - [SQLAlchemy adapter](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/sqlalchemy.md)
160
+ - [Hypothesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/hypothesis.md)
161
+ - [Schemathesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/schemathesis.md)
162
+ - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
163
+ - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
164
+ - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
165
+ - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
166
+ - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
162
167
 
163
168
  ## Status
164
169
 
165
170
  Distribution release identity and deterministic engine compatibility are
166
- separate contracts. Version 2.0.0 has been published to PyPI and as a GitHub
167
- Release. This source tree reports the unpublished 2.1.0 release candidate;
168
- generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. No 2.1.0 tag,
169
- GitHub Release, or package-index publication exists. The project is licensed
170
- under Apache-2.0.
171
+ separate contracts. This source tree reports distribution version 2.1.2;
172
+ generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
173
+ GitHub Releases are the authoritative sources for public-release availability
174
+ and history. The project is licensed under Apache-2.0.
@@ -12,7 +12,9 @@ docs/phase2-public-contract.md
12
12
  docs/phase3-architecture.md
13
13
  docs/phase3-public-contract.md
14
14
  docs/plugins.md
15
+ docs/product-evidence-gate.md
15
16
  docs/quickstart.md
17
+ docs/release-process.md
16
18
  docs/reproducibility.md
17
19
  docs/schemathesis.md
18
20
  docs/security-and-non-goals.md
@@ -182,4 +184,6 @@ tests/test_phase_3_4_evidence_adapter_contract.py
182
184
  tests/test_phase_3_5_compatibility_migration_planner.py
183
185
  tests/test_phase_3_6_lossless_migrations_fixture_export.py
184
186
  tests/test_phase_3_7_cli_interchange_surface.py
185
- tests/test_phase_3_8_ecommerce_evidence_workflow.py
187
+ tests/test_phase_3_8_ecommerce_evidence_workflow.py
188
+ tests/test_readme_pypi_portability.py
189
+ tests/test_test_portability.py
@@ -5,6 +5,7 @@ hypothesis<7,>=6
5
5
 
6
6
  [pytest]
7
7
  pytest<10,>=9.1
8
+ build<2,>=1
8
9
 
9
10
  [schemathesis]
10
11
  hypothesis<7,>=6
@@ -1,4 +1,4 @@
1
1
  """Authoritative distribution and deterministic compatibility versions."""
2
2
 
3
- VERSION = "2.1.0"
3
+ VERSION = "2.1.2"
4
4
  ENGINE_VERSION = "1.0.0"
@@ -17,9 +17,6 @@ from scenario_engine.result import ScenarioResult
17
17
 
18
18
  ROOT = Path(__file__).parents[1]
19
19
  SRC = ROOT / "src"
20
- AUDIT_PYTHON = Path(
21
- "/Users/smshahinulislam/Developer/scenario-engine-audit/runtime-venv/bin/python"
22
- )
23
20
  SCENARIO = """
24
21
  dsl_version: 1
25
22
  scenario: phase02b
@@ -47,11 +44,12 @@ def run_result(seed: str = "seed", run_index: int = 0) -> ScenarioResult:
47
44
  )
48
45
 
49
46
 
50
- def subprocess_environment() -> dict[str, str]:
51
- environment = os.environ.copy()
52
- existing = environment.get("PYTHONPATH")
53
- environment["PYTHONPATH"] = str(SRC) + (os.pathsep + existing if existing else "")
54
- return environment
47
+ def pytest_command(test_file: Path) -> list[str]:
48
+ command = [sys.executable, "-m", "pytest", "-q"]
49
+ if os.environ.get("PYTEST_DISABLE_PLUGIN_AUTOLOAD"):
50
+ command.extend(("-p", "scenario_engine"))
51
+ command.append(str(test_file))
52
+ return command
55
53
 
56
54
 
57
55
  class Phase02BJsonPytestIntegrationTests(unittest.TestCase):
@@ -161,7 +159,7 @@ class Phase02BJsonPytestIntegrationTests(unittest.TestCase):
161
159
  document = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
162
160
  self.assertEqual(document["project"]["dependencies"], ["PyYAML==6.0.3"])
163
161
  self.assertEqual(document["project"]["optional-dependencies"]["pytest"],
164
- ["pytest>=9.1,<10"])
162
+ ["pytest>=9.1,<10", "build>=1,<2"])
165
163
  self.assertEqual(document["project"]["entry-points"]["pytest11"]["scenario_engine"],
166
164
  "scenario_engine.pytest_plugin")
167
165
 
@@ -169,7 +167,6 @@ class Phase02BJsonPytestIntegrationTests(unittest.TestCase):
169
167
  with tempfile.TemporaryDirectory() as directory:
170
168
  test_file = Path(directory) / "test_fixture.py"
171
169
  test_file.write_text(textwrap.dedent(f'''\
172
- pytest_plugins = ["scenario_engine.pytest_plugin"]
173
170
  from scenario_engine.result import ScenarioResult
174
171
  SCENARIO = {SCENARIO!r}
175
172
  def test_fixture(scenario_engine):
@@ -180,8 +177,7 @@ class Phase02BJsonPytestIntegrationTests(unittest.TestCase):
180
177
  assert first.manifest.run_index == 4
181
178
  '''), encoding="utf-8")
182
179
  completed = subprocess.run(
183
- [str(AUDIT_PYTHON), "-m", "pytest", "-q", str(test_file)],
184
- cwd=directory, env=subprocess_environment(), capture_output=True, text=True,
180
+ pytest_command(test_file), cwd=directory, capture_output=True, text=True,
185
181
  )
186
182
  self.assertEqual(completed.returncode, 0, completed.stdout + completed.stderr)
187
183
 
@@ -191,7 +187,6 @@ class Phase02BJsonPytestIntegrationTests(unittest.TestCase):
191
187
  source.write_text(SCENARIO, encoding="utf-8")
192
188
  test_file = Path(directory) / "test_file_fixture.py"
193
189
  test_file.write_text(textwrap.dedent(f'''\
194
- pytest_plugins = ["scenario_engine.pytest_plugin"]
195
190
  from pathlib import Path
196
191
  from scenario_engine.result import ScenarioResult
197
192
  def test_file_fixture(scenario_engine):
@@ -201,8 +196,7 @@ class Phase02BJsonPytestIntegrationTests(unittest.TestCase):
201
196
  assert result.final_state["money"].as_tuple().exponent == -2
202
197
  '''), encoding="utf-8")
203
198
  completed = subprocess.run(
204
- [str(AUDIT_PYTHON), "-m", "pytest", "-q", str(test_file)],
205
- cwd=directory, env=subprocess_environment(), capture_output=True, text=True,
199
+ pytest_command(test_file), cwd=directory, capture_output=True, text=True,
206
200
  )
207
201
  self.assertEqual(completed.returncode, 0, completed.stdout + completed.stderr)
208
202