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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. {deterministic_scenario_engine-2.1.0/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-2.1.1}/PKG-INFO +38 -35
  2. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/README.md +32 -34
  3. deterministic_scenario_engine-2.1.1/docs/product-evidence-gate.md +65 -0
  4. deterministic_scenario_engine-2.1.1/docs/release-process.md +63 -0
  5. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/pyproject.toml +7 -0
  6. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1/src/deterministic_scenario_engine.egg-info}/PKG-INFO +38 -35
  7. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +4 -1
  8. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/_version.py +1 -1
  9. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0e_packaging_release_candidate.py +23 -18
  10. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
  11. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_12_public_contract_docs_freeze.py +1 -1
  12. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_13_packaging_fresh_install_rc.py +4 -6
  13. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_1_v1_read_contract.py +1 -1
  14. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_2_composition.py +1 -1
  15. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_3_matrix.py +1 -1
  16. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_4_batch.py +1 -1
  17. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_5_inspect_explain.py +1 -1
  18. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_7_cli_product_surface.py +1 -1
  19. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_11_public_contract_docs_freeze.py +3 -1
  20. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_1_evidence_bundle_contract.py +1 -1
  21. deterministic_scenario_engine-2.1.1/tests/test_readme_pypi_portability.py +61 -0
  22. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/LICENSE +0 -0
  23. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/MANIFEST.in +0 -0
  24. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/api.md +0 -0
  25. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/compatibility.md +0 -0
  26. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/determinism.md +0 -0
  27. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/dsl-reference.md +0 -0
  28. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/hypothesis.md +0 -0
  29. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/phase2-architecture.md +0 -0
  30. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/phase2-public-contract.md +0 -0
  31. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/phase3-architecture.md +0 -0
  32. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/phase3-public-contract.md +0 -0
  33. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/plugins.md +0 -0
  34. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/quickstart.md +0 -0
  35. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/reproducibility.md +0 -0
  36. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/schemathesis.md +0 -0
  37. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/security-and-non-goals.md +0 -0
  38. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/sqlalchemy.md +0 -0
  39. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/docs/testing-oracle.md +0 -0
  40. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/api_scenario.yaml +0 -0
  41. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/cart.yaml +0 -0
  42. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/control_flow.yaml +0 -0
  43. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/ecommerce.yaml +0 -0
  44. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/openapi.yaml +0 -0
  45. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/oracle_fault.yaml +0 -0
  46. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_1b_cart.yaml +0 -0
  47. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_3_resources.yaml +0 -0
  48. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_4_control_flow.yaml +0 -0
  49. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_5_oracle_fault.yaml +0 -0
  50. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
  51. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
  52. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_8_api_scenario.yaml +0 -0
  53. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_8_openapi.yaml +0 -0
  54. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/phase3_ecommerce_evidence.py +0 -0
  55. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/resources.yaml +0 -0
  56. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/examples/sqlalchemy_rows.yaml +0 -0
  57. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/setup.cfg +0 -0
  58. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
  59. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
  60. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
  61. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
  62. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/__init__.py +0 -0
  63. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/adapters/__init__.py +0 -0
  64. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/adapters/json_file.py +0 -0
  65. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
  66. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/address.py +0 -0
  67. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/artifacts.py +0 -0
  68. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/__init__.py +0 -0
  69. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/canonical.py +0 -0
  70. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/errors.py +0 -0
  71. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/models.py +0 -0
  72. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/runtime.py +0 -0
  73. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/canonical.py +0 -0
  74. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/cli/__init__.py +0 -0
  75. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/cli/__main__.py +0 -0
  76. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/cli/main.py +0 -0
  77. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/clock.py +0 -0
  78. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/__init__.py +0 -0
  79. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/canonical.py +0 -0
  80. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/errors.py +0 -0
  81. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/models.py +0 -0
  82. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/parser.py +0 -0
  83. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/resolver.py +0 -0
  84. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/runtime.py +0 -0
  85. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/context.py +0 -0
  86. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/control_flow.py +0 -0
  87. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/__init__.py +0 -0
  88. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/compare.py +0 -0
  89. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/errors.py +0 -0
  90. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/models.py +0 -0
  91. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/render.py +0 -0
  92. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/serialization.py +0 -0
  93. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/__init__.py +0 -0
  94. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/canonical.py +0 -0
  95. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/errors.py +0 -0
  96. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/models.py +0 -0
  97. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/registry.py +0 -0
  98. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/__init__.py +0 -0
  99. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/compiler.py +0 -0
  100. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/errors.py +0 -0
  101. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/models.py +0 -0
  102. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/parser.py +0 -0
  103. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/runtime.py +0 -0
  104. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/errors.py +0 -0
  105. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/__init__.py +0 -0
  106. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/adapter.py +0 -0
  107. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/canonical.py +0 -0
  108. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/compatibility.py +0 -0
  109. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/errors.py +0 -0
  110. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/export.py +0 -0
  111. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/fixture.py +0 -0
  112. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/migration.py +0 -0
  113. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/models.py +0 -0
  114. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/evidence/read.py +0 -0
  115. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/expressions.py +0 -0
  116. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/faults.py +0 -0
  117. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/history.py +0 -0
  118. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/ids.py +0 -0
  119. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/__init__.py +0 -0
  120. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/errors.py +0 -0
  121. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/explain.py +0 -0
  122. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/inspect.py +0 -0
  123. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/models.py +0 -0
  124. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/redaction.py +0 -0
  125. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/serialization.py +0 -0
  126. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/integrations/__init__.py +0 -0
  127. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/integrations/hypothesis.py +0 -0
  128. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/integrations/schemathesis.py +0 -0
  129. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/invariants.py +0 -0
  130. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/manifest.py +0 -0
  131. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/__init__.py +0 -0
  132. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/canonical.py +0 -0
  133. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/errors.py +0 -0
  134. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/expand.py +0 -0
  135. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/filtering.py +0 -0
  136. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/models.py +0 -0
  137. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/runtime.py +0 -0
  138. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle.py +0 -0
  139. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
  140. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/errors.py +0 -0
  141. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
  142. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/models.py +0 -0
  143. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
  144. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/plugins.py +0 -0
  145. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/provenance.py +0 -0
  146. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/pytest_plugin.py +0 -0
  147. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/reference_packs/__init__.py +0 -0
  148. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
  149. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
  150. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/resources.py +0 -0
  151. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/result.py +0 -0
  152. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/rng.py +0 -0
  153. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/runner.py +0 -0
  154. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/state.py +0 -0
  155. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/__init__.py +0 -0
  156. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/errors.py +0 -0
  157. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/models.py +0 -0
  158. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/read.py +0 -0
  159. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/serialization.py +0 -0
  160. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/validation.py +0 -0
  161. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/values.py +0 -0
  162. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
  163. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1b_linear_dsl.py +0 -0
  164. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
  165. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
  166. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_2a_reproducible_results.py +0 -0
  167. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
  168. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_3_resources_constraints.py +0 -0
  169. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_4_control_flow.py +0 -0
  170. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_5_oracle_faults.py +0 -0
  171. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
  172. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
  173. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
  174. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
  175. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
  176. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0d_documentation_examples.py +0 -0
  177. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
  178. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_1_models_serialization.py +0 -0
  179. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
  180. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
  181. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_9_oracle_assertions.py +0 -0
  182. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
  183. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
  184. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
  185. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_3_ordered_export.py +0 -0
  186. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
  187. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
  188. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
  189. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_3_7_cli_interchange_surface.py +0 -0
  190. {deterministic_scenario_engine-2.1.0 → deterministic_scenario_engine-2.1.1}/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.1
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
@@ -35,11 +40,10 @@ Dynamic: license-file
35
40
 
36
41
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
37
42
  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.
43
+ testing. The source-tree distribution version is 2.1.1. Distribution release
44
+ identity and deterministic compatibility identity are separate:
45
+ `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
46
+ public-release availability and history, see PyPI and GitHub Releases.
43
47
 
44
48
  ## Why it exists
45
49
 
@@ -74,11 +78,11 @@ make expected behavior explicit.
74
78
  explicit adapters, closed lossless migrations, and fixture-directory export
75
79
 
76
80
  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).
81
+ testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
78
82
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
79
83
  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).
84
+ is frozen in the [Phase 2 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md); the
85
+ 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
86
 
83
87
  ## Installation
84
88
 
@@ -98,13 +102,13 @@ Install only the named optional integrations you need:
98
102
  /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
99
103
  ```
100
104
 
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]'`.
105
+ Install the package with `pip install deterministic-scenario-engine`, or select
106
+ an optional integration with a command such as
107
+ `pip install 'deterministic-scenario-engine[pytest]'`.
104
108
 
105
109
  ## Minimal quickstart
106
110
 
107
- The public [cart scenario](examples/cart.yaml) is an executable DSL 1 document.
111
+ The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
108
112
  Run it from the repository root:
109
113
 
110
114
  ```python
@@ -139,32 +143,31 @@ normalized result contains the same data under its `state` field.
139
143
  Generation derives from semantic `ExecutionAddress` values, not consumption of
140
144
  a mutable global random stream. Exact replay requires the same canonical
141
145
  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).
146
+ Unsupported cross-version replay fails explicitly. See the [determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md),
147
+ [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
148
+ [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
145
149
 
146
150
  ## Documentation
147
151
 
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)
152
+ - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
153
+ - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
154
+ - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
155
+ - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
156
+ - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
157
+ - [Plugins](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/plugins.md)
158
+ - [SQLAlchemy adapter](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/sqlalchemy.md)
159
+ - [Hypothesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/hypothesis.md)
160
+ - [Schemathesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/schemathesis.md)
161
+ - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
162
+ - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
163
+ - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
164
+ - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
165
+ - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
162
166
 
163
167
  ## Status
164
168
 
165
169
  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.
170
+ separate contracts. This source tree reports distribution version 2.1.1;
171
+ generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
172
+ GitHub Releases are the authoritative sources for public-release availability
173
+ 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.1. 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.1;
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.
@@ -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,6 +25,13 @@ 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
 
@@ -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.1
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
@@ -35,11 +40,10 @@ Dynamic: license-file
35
40
 
36
41
  Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
37
42
  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.
43
+ testing. The source-tree distribution version is 2.1.1. Distribution release
44
+ identity and deterministic compatibility identity are separate:
45
+ `ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
46
+ public-release availability and history, see PyPI and GitHub Releases.
43
47
 
44
48
  ## Why it exists
45
49
 
@@ -74,11 +78,11 @@ make expected behavior explicit.
74
78
  explicit adapters, closed lossless migrations, and fixture-directory export
75
79
 
76
80
  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).
81
+ testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
78
82
  Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
79
83
  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).
84
+ is frozen in the [Phase 2 public contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md); the
85
+ 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
86
 
83
87
  ## Installation
84
88
 
@@ -98,13 +102,13 @@ Install only the named optional integrations you need:
98
102
  /tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
99
103
  ```
100
104
 
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]'`.
105
+ Install the package with `pip install deterministic-scenario-engine`, or select
106
+ an optional integration with a command such as
107
+ `pip install 'deterministic-scenario-engine[pytest]'`.
104
108
 
105
109
  ## Minimal quickstart
106
110
 
107
- The public [cart scenario](examples/cart.yaml) is an executable DSL 1 document.
111
+ The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
108
112
  Run it from the repository root:
109
113
 
110
114
  ```python
@@ -139,32 +143,31 @@ normalized result contains the same data under its `state` field.
139
143
  Generation derives from semantic `ExecutionAddress` values, not consumption of
140
144
  a mutable global random stream. Exact replay requires the same canonical
141
145
  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).
146
+ Unsupported cross-version replay fails explicitly. See the [determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md),
147
+ [reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
148
+ [compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
145
149
 
146
150
  ## Documentation
147
151
 
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)
152
+ - [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
153
+ - [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
154
+ - [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
155
+ - [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
156
+ - [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
157
+ - [Plugins](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/plugins.md)
158
+ - [SQLAlchemy adapter](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/sqlalchemy.md)
159
+ - [Hypothesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/hypothesis.md)
160
+ - [Schemathesis integration](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/schemathesis.md)
161
+ - [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
162
+ - [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
163
+ - [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
164
+ - [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
165
+ - [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
162
166
 
163
167
  ## Status
164
168
 
165
169
  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.
170
+ separate contracts. This source tree reports distribution version 2.1.1;
171
+ generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
172
+ GitHub Releases are the authoritative sources for public-release availability
173
+ 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,5 @@ 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
@@ -1,4 +1,4 @@
1
1
  """Authoritative distribution and deterministic compatibility versions."""
2
2
 
3
- VERSION = "2.1.0"
3
+ VERSION = "2.1.1"
4
4
  ENGINE_VERSION = "1.0.0"
@@ -5,6 +5,7 @@ from hashlib import sha256
5
5
  from importlib.metadata import EntryPoint
6
6
  import json
7
7
  from pathlib import Path
8
+ import re
8
9
  import sys
9
10
  import tomllib
10
11
  import unittest
@@ -53,13 +54,20 @@ class Phase10EPackagingReleaseCandidateTests(unittest.TestCase):
53
54
  "scenario_engine._version.VERSION",
54
55
  )
55
56
  # Phase 2 changes package identity, not the frozen deterministic contract.
56
- self.assertEqual(VERSION, "2.1.0")
57
+ self.assertEqual(VERSION, "2.1.1")
57
58
  self.assertEqual(ENGINE_VERSION, "1.0.0")
58
59
 
59
60
  def test_license_readme_and_build_backend_metadata(self):
60
61
  self.assertEqual(self.project["license"], "Apache-2.0")
61
62
  self.assertEqual(self.project["license-files"], ["LICENSE"])
62
63
  self.assertEqual(self.project["readme"], "README.md")
64
+ self.assertEqual(self.project["urls"], {
65
+ "Homepage": "https://github.com/imshahinul/deterministic-scenario-engine",
66
+ "Documentation": "https://github.com/imshahinul/deterministic-scenario-engine/tree/main/docs",
67
+ "Source": "https://github.com/imshahinul/deterministic-scenario-engine",
68
+ "Issues": "https://github.com/imshahinul/deterministic-scenario-engine/issues",
69
+ "Release Notes": "https://github.com/imshahinul/deterministic-scenario-engine/releases",
70
+ })
63
71
  self.assertIn("Apache License\n", (ROOT / "LICENSE").read_text(encoding="utf-8"))
64
72
  self.assertEqual(self.config["build-system"]["build-backend"], "setuptools.build_meta")
65
73
  self.assertEqual(self.config["build-system"]["requires"], ["setuptools>=77"])
@@ -120,29 +128,26 @@ class Phase10EPackagingReleaseCandidateTests(unittest.TestCase):
120
128
  historical_payload["manifest"].pop("engine_version")
121
129
  self.assertEqual(current_payload, historical_payload)
122
130
 
123
- def test_docs_are_publication_ready_without_temporal_or_host_claims(self):
131
+ def test_package_readme_is_release_state_neutral(self):
124
132
  readme = (ROOT / "README.md").read_text(encoding="utf-8")
125
133
  quickstart = (ROOT / "docs" / "quickstart.md").read_text(encoding="utf-8")
126
134
  combined = f"{readme}\n{quickstart}".lower()
127
135
  self.assertIn("pip install deterministic-scenario-engine", combined)
128
- # HISTORICAL_CHECKPOINT_FACT: this test predates publication of 2.0.0.
129
- # CURRENT_DOCUMENTATION_CONTRACT: stable release facts may be stated, but
130
- # stale future-publication claims and transient local-RC guidance may not.
131
- for stale_claim in (
132
- "future publication",
133
- "not currently available from pypi",
134
- "has not been published",
135
- "unpublished 2.0.0",
136
- "no pypi or github release has occurred yet",
137
- ):
138
- with self.subTest(stale_claim=stale_claim):
139
- self.assertNotIn(stale_claim, combined)
140
- self.assertNotIn("github.com/", combined)
141
136
  self.assertNotIn("/users/", combined)
142
137
  self.assertNotIn("phase3_2_validation_venv", combined)
143
- self.assertIn("2.0.0 has been published", combined)
144
- self.assertIn("2.1.0", combined)
145
- self.assertIn("not published", combined)
138
+
139
+ current_version = re.escape(VERSION.lower())
140
+ forbidden_patterns = (
141
+ rf"(?:unpublished|not\s+published)[^\n]{{0,80}}{current_version}",
142
+ rf"{current_version}[^\n]{{0,80}}(?:unpublished|not\s+published)",
143
+ rf"no\s+{current_version}\s+tag(?:\s+exists)?",
144
+ r"no\s+github\s+release(?:\s+exists)?",
145
+ r"no\s+(?:package-index|pypi)\s+publication(?:\s+exists)?",
146
+ r"publication\s+has\s+not\s+occurred",
147
+ )
148
+ for pattern in forbidden_patterns:
149
+ with self.subTest(pattern=pattern):
150
+ self.assertIsNone(re.search(pattern, readme.lower()))
146
151
 
147
152
  def test_top_level_api_is_unchanged_by_version_authority_module(self):
148
153
  self.assertNotIn("VERSION", scenario_engine.__all__)
@@ -148,7 +148,7 @@ def test_fresh_tree_wheel_supports_workflow_public_commands(tmp_path: Path) -> N
148
148
  check=True,
149
149
  )
150
150
  wheels = list(wheelhouse.glob(f"deterministic_scenario_engine-{VERSION}-*.whl"))
151
- assert VERSION == "2.1.0"
151
+ assert VERSION == "2.1.1"
152
152
  assert len(wheels) == 1
153
153
  wheel = wheels[0]
154
154
  installed = tmp_path / "installed"
@@ -175,7 +175,7 @@ def test_fresh_tree_wheel_supports_workflow_public_commands(tmp_path: Path) -> N
175
175
  text=True,
176
176
  )
177
177
  distribution_version, import_path = identity.stdout.splitlines()
178
- assert distribution_version == VERSION == "2.1.0"
178
+ assert distribution_version == VERSION == "2.1.1"
179
179
  assert Path(import_path).is_relative_to(installed)
180
180
  validate = subprocess.run(
181
181
  [sys.executable, "-m", "scenario_engine.cli", "--json", "validate", "examples/cart.yaml"],
@@ -62,7 +62,7 @@ def test_versions_errors_commands_and_entry_points_are_frozen() -> None:
62
62
  from scenario_engine.oracle_assertions import ORACLE_ASSERTION_SCHEMA_VERSION
63
63
  from scenario_engine.suite import READ_SCHEMA_VERSION, SUITE_SCHEMA_VERSION
64
64
 
65
- assert VERSION == "2.1.0"
65
+ assert VERSION == "2.1.1"
66
66
  assert (COMPOSITION_CONTRACT_VERSION, MATRIX_PLAN_CONTRACT_VERSION) == (
67
67
  "composition.modules/1", "matrix.plan/1")
68
68
  assert (READ_SCHEMA_VERSION, SUITE_SCHEMA_VERSION) == (