deterministic-scenario-engine 2.2.0__tar.gz → 3.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/MANIFEST.in +1 -0
- {deterministic_scenario_engine-2.2.0/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-3.0.1}/PKG-INFO +35 -14
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/README.md +34 -13
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/api.md +45 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/compatibility.md +21 -6
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/dsl-reference.md +4 -0
- deterministic_scenario_engine-3.0.1/docs/dsl2-reference.md +41 -0
- deterministic_scenario_engine-3.0.1/docs/phase5-architecture.md +1149 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/quickstart.md +82 -1
- deterministic_scenario_engine-3.0.1/docs/release-notes-3.0.0.md +49 -0
- deterministic_scenario_engine-3.0.1/docs/release-notes-3.0.1.md +38 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/release-process.md +16 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/pyproject.toml +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1/src/deterministic_scenario_engine.egg-info}/PKG-INFO +35 -14
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +44 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/__init__.py +2 -3
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/_version.py +3 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/address.py +16 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/canonical.py +23 -3
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/cli/main.py +289 -23
- deterministic_scenario_engine-3.0.1/src/scenario_engine/compatibility.py +50 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/compatibility_fixtures.py +223 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/artifacts/manifest-v2.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/artifacts/result-v2.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/artifacts/schedule-v1.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/artifacts/suite-run-v2.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/compatibility-fixtures.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/references/legacy-result1.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/corrupt-result-hash.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/duplicate-key.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/incomplete-coordinates.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/invalid-type.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/missing-field.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/mixed-contract-tuple.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/noncanonical-address.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-contract.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-engine.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/unknown-field.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-input-hashes.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-root-seed.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-scenario-hash.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-schedule-hash.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-schedule-seed.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/rejections/wrong-scheduler-contract.json +1 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/data/compatibility/phase5_10/scenarios/scenario-v2.yaml +15 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/definition_diff.py +59 -6
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diagnostics.py +7 -3
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/__init__.py +6 -5
- deterministic_scenario_engine-3.0.1/src/scenario_engine/dsl/actor_runtime.py +433 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/compiler.py +17 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/errors.py +16 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/models.py +39 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/parser.py +119 -6
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/dsl/runtime.py +12 -4
- deterministic_scenario_engine-3.0.1/src/scenario_engine/engine2.py +618 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/compatibility.py +2 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/impact.py +81 -16
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/__init__.py +3 -1
- deterministic_scenario_engine-3.0.1/src/scenario_engine/inspection/explain.py +142 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/inspect.py +94 -3
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/models.py +4 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/manifest.py +4 -1
- deterministic_scenario_engine-3.0.1/src/scenario_engine/schedule.py +415 -0
- deterministic_scenario_engine-3.0.1/src/scenario_engine/scheduler.py +175 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/trace_view.py +159 -6
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_2a_reproducible_results.py +3 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0d_documentation_examples.py +2 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0e_packaging_release_candidate.py +2 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_12_public_contract_docs_freeze.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_13_packaging_fresh_install_rc.py +4 -3
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_1_v1_read_contract.py +18 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_2_composition.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_3_matrix.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_4_batch.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_5_inspect_explain.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_7_cli_product_surface.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_11_public_contract_docs_freeze.py +1 -1
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_1_evidence_bundle_contract.py +2 -2
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_10_canonical_workflow_help.py +11 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_10_public_api_cli_compatibility_fixtures.py +139 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_11_performance_security_contract_freeze.py +148 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_12a_r2_quickstart_installed_consumer.py +217 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_12b_1_version_promotion.py +117 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_1_dsl2_actor_lane_foundation.py +133 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_2_scheduler_kernel.py +151 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_3_actor_execution_shared_state.py +170 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_4_schedule_identity_replay.py +217 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_5_result2_engine2_compatibility.py +217 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_6_public_cli_python_execution.py +187 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_7_actor_aware_analysis.py +215 -0
- deterministic_scenario_engine-3.0.1/tests/test_phase_5_9_actor_aware_static_trace_viewer.py +156 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/compatibility_fixtures.py +0 -94
- deterministic_scenario_engine-2.2.0/src/scenario_engine/inspection/explain.py +0 -79
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/LICENSE +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/determinism.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/hypothesis.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/phase2-architecture.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/phase2-public-contract.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/phase3-architecture.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/phase3-public-contract.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/phase4-architecture.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/plugins.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/product-evidence-gate.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/release-notes-2.2.0.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/reproducibility.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/schemathesis.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/security-and-non-goals.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/sqlalchemy.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/testing-oracle.md +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/api_scenario.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/cart.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/control_flow.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/ecommerce.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/openapi.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/oracle_fault.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_1b_cart.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_3_resources.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_4_control_flow.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_5_oracle_fault.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_8_api_scenario.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase0_8_openapi.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/phase3_ecommerce_evidence.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/resources.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/examples/sqlalchemy_rows.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/setup.cfg +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/setup.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/adapters/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/adapters/json_file.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/artifacts.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/canonical.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/batch/runtime.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/cli/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/cli/__main__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/clock.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/canonical.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/parser.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/resolver.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/composition/runtime.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/context.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/control_flow.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/current-2.1.2-suite-run-v1.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-1.0.0-result-v1.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-2.0.0-suite-run-v1.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-incomplete-suite-run-v1.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-scenario-mismatch-suite-run-v1.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-engine-suite-run-v1.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-manifest-suite-run-v9.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unsupported-contract.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/compatibility-fixtures.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/inputs/current-2.1.2-suite-run-v1.inputs.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/inputs/historical-2.0.0-suite-run-v1.inputs.json +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/scenarios/compatibility_case.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/data/compatibility/phase4_11/scenarios/mismatch_case.yaml +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/compare.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/render.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/diff/serialization.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/canonical.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/domain_packs/registry.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/adapter.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/canonical.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/export.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/fixture.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/migration.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/evidence/read.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/expressions.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/faults.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/history.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/ids.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/redaction.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/inspection/serialization.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/integrations/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/integrations/hypothesis.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/integrations/schemathesis.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/invariants.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/canonical.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/expand.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/filtering.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/matrix/runtime.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/plugins.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/provenance.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/pytest_plugin.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/reference_packs/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/resources.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/result.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/rng.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/runner.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/scaffolding.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/state.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/__init__.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/errors.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/models.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/publication.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/read.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/suite/serialization.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/validation.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/src/scenario_engine/values.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1b_linear_dsl.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_3_resources_constraints.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_4_control_flow.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_5_oracle_faults.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_1_models_serialization.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_2_9_oracle_assertions.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_3_ordered_export.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_7_cli_interchange_surface.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_11_cross_version_fixtures.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_12_hardening.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_12r2_public_fixture_packaging.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_12r3_consumer_secret_redaction.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_1_cli_replay_workflow.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_2_replay_compatibility_diagnostics.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_3_filesystem_trust_boundary.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_4_actionable_human_diagnostics.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_5_machine_readable_error_envelope.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_6_author_time_scaffolding.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_7_scenario_definition_structural_diff.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_8_conservative_impact_analysis.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_phase_4_9_static_trace_viewer.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_readme_pypi_portability.py +0 -0
- {deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/tests/test_test_portability.py +0 -0
|
@@ -4,6 +4,7 @@ include setup.py
|
|
|
4
4
|
include pyproject.toml
|
|
5
5
|
recursive-include src *.py
|
|
6
6
|
recursive-include src/scenario_engine/data/compatibility/phase4_11 *
|
|
7
|
+
recursive-include src/scenario_engine/data/compatibility/phase5_10 *
|
|
7
8
|
recursive-include docs *.md
|
|
8
9
|
recursive-include examples *.yaml
|
|
9
10
|
include examples/phase3_ecommerce_evidence.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deterministic-scenario-engine
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.1
|
|
4
4
|
Summary: Reproducible, state-consistent business scenarios with deterministic ground truth
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/imshahinul/deterministic-scenario-engine
|
|
@@ -41,10 +41,13 @@ Dynamic: license-file
|
|
|
41
41
|
|
|
42
42
|
Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
|
|
43
43
|
business histories and deterministic scenario suites with ground truth for
|
|
44
|
-
testing.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
testing. Distribution 3.0.0 was published on October 9, 2026, on
|
|
45
|
+
[PyPI](https://pypi.org/project/deterministic-scenario-engine/3.0.0/) and as a
|
|
46
|
+
[GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
|
|
47
|
+
Distribution and execution compatibility identities are separate: public
|
|
48
|
+
`ENGINE_VERSION` is 2.0.0, while the preserved DSL 1 path records Engine 1.0.0.
|
|
49
|
+
PyPI and GitHub Releases remain authoritative for public-release availability
|
|
50
|
+
and history.
|
|
48
51
|
|
|
49
52
|
## Why it exists
|
|
50
53
|
|
|
@@ -58,6 +61,9 @@ make expected behavior explicit.
|
|
|
58
61
|
## Core capabilities
|
|
59
62
|
|
|
60
63
|
- DSL 1 parsing, compilation, and deterministic execution
|
|
64
|
+
- DSL 2 logical-actor execution with an explicit independent schedule seed
|
|
65
|
+
- canonical Result/2, Manifest/2, and Schedule/1 evidence with exact replay
|
|
66
|
+
- actor-aware inspect/explain and deterministic offline trace viewing
|
|
61
67
|
- addressed randomness and logical IDs that do not depend on a shared stream
|
|
62
68
|
- current state plus append-only committed history and artifacts
|
|
63
69
|
- whole-step atomicity
|
|
@@ -80,11 +86,9 @@ make expected behavior explicit.
|
|
|
80
86
|
- canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
|
|
81
87
|
explicit adapters, closed lossless migrations, and fixture-directory export
|
|
82
88
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
trace views, and an installed compatibility-fixture export. See the
|
|
87
|
-
[2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md).
|
|
89
|
+
The 3.0.0 release adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
|
|
90
|
+
behavior and immutable evidence. See the
|
|
91
|
+
[3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
|
|
88
92
|
|
|
89
93
|
Core execution does not require a database, network service, plugin, or property
|
|
90
94
|
testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
|
|
@@ -104,6 +108,18 @@ python3 -m pip install deterministic-scenario-engine
|
|
|
104
108
|
scenario --help
|
|
105
109
|
```
|
|
106
110
|
|
|
111
|
+
Verify that the same active Python interpreter sees the expected distribution
|
|
112
|
+
and observe the module location it actually imports:
|
|
113
|
+
|
|
114
|
+
```console
|
|
115
|
+
python3 -c 'from importlib.metadata import version; from pathlib import Path; import scenario_engine; print("DSE distribution:", version("deterministic-scenario-engine")); print("Imported module:", Path(scenario_engine.__file__).resolve())'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
For this release the distribution is `3.0.1`; a source-development editable
|
|
119
|
+
install resolves the module under its `src/scenario_engine` directory. The DSE
|
|
120
|
+
distribution version is distinct from Engine 1 (`1.0.0`) and Engine 2 (`2.0.0`)
|
|
121
|
+
compatibility versions.
|
|
122
|
+
|
|
107
123
|
Install only the named optional integrations you need:
|
|
108
124
|
|
|
109
125
|
```console
|
|
@@ -151,6 +167,7 @@ self-contained offline HTML file from supported result/evidence.
|
|
|
151
167
|
|
|
152
168
|
- [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
|
|
153
169
|
- [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
|
|
170
|
+
- [DSL 2 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl2-reference.md)
|
|
154
171
|
- [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
|
|
155
172
|
- [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
|
|
156
173
|
- [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
|
|
@@ -162,13 +179,17 @@ self-contained offline HTML file from supported result/evidence.
|
|
|
162
179
|
- [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
|
|
163
180
|
- [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
|
|
164
181
|
- [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
|
|
182
|
+
- [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
|
|
183
|
+
- [3.0.1 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.1.md)
|
|
165
184
|
- [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
|
|
166
185
|
- [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
|
|
167
186
|
|
|
168
187
|
## Status
|
|
169
188
|
|
|
170
189
|
Distribution release identity and deterministic engine compatibility are
|
|
171
|
-
separate contracts. This source tree reports distribution version
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
190
|
+
separate contracts. This source tree reports published distribution version
|
|
191
|
+
3.0.1 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
|
|
192
|
+
with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
|
|
193
|
+
Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
|
|
194
|
+
2 suite orchestration, cross-major promotion, remote URI input, and implicit
|
|
195
|
+
schedule-seed derivation are unsupported. The project is Apache-2.0 licensed.
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
|
|
6
6
|
business histories and deterministic scenario suites with ground truth for
|
|
7
|
-
testing.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
testing. Distribution 3.0.0 was published on October 9, 2026, on
|
|
8
|
+
[PyPI](https://pypi.org/project/deterministic-scenario-engine/3.0.0/) and as a
|
|
9
|
+
[GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
|
|
10
|
+
Distribution and execution compatibility identities are separate: public
|
|
11
|
+
`ENGINE_VERSION` is 2.0.0, while the preserved DSL 1 path records Engine 1.0.0.
|
|
12
|
+
PyPI and GitHub Releases remain authoritative for public-release availability
|
|
13
|
+
and history.
|
|
11
14
|
|
|
12
15
|
## Why it exists
|
|
13
16
|
|
|
@@ -21,6 +24,9 @@ make expected behavior explicit.
|
|
|
21
24
|
## Core capabilities
|
|
22
25
|
|
|
23
26
|
- DSL 1 parsing, compilation, and deterministic execution
|
|
27
|
+
- DSL 2 logical-actor execution with an explicit independent schedule seed
|
|
28
|
+
- canonical Result/2, Manifest/2, and Schedule/1 evidence with exact replay
|
|
29
|
+
- actor-aware inspect/explain and deterministic offline trace viewing
|
|
24
30
|
- addressed randomness and logical IDs that do not depend on a shared stream
|
|
25
31
|
- current state plus append-only committed history and artifacts
|
|
26
32
|
- whole-step atomicity
|
|
@@ -43,11 +49,9 @@ make expected behavior explicit.
|
|
|
43
49
|
- canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
|
|
44
50
|
explicit adapters, closed lossless migrations, and fixture-directory export
|
|
45
51
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
trace views, and an installed compatibility-fixture export. See the
|
|
50
|
-
[2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md).
|
|
52
|
+
The 3.0.0 release adds Engine 2.0.0 and DSL 2 while preserving Engine 1/DSL 1
|
|
53
|
+
behavior and immutable evidence. See the
|
|
54
|
+
[3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md).
|
|
51
55
|
|
|
52
56
|
Core execution does not require a database, network service, plugin, or property
|
|
53
57
|
testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
|
|
@@ -67,6 +71,18 @@ python3 -m pip install deterministic-scenario-engine
|
|
|
67
71
|
scenario --help
|
|
68
72
|
```
|
|
69
73
|
|
|
74
|
+
Verify that the same active Python interpreter sees the expected distribution
|
|
75
|
+
and observe the module location it actually imports:
|
|
76
|
+
|
|
77
|
+
```console
|
|
78
|
+
python3 -c 'from importlib.metadata import version; from pathlib import Path; import scenario_engine; print("DSE distribution:", version("deterministic-scenario-engine")); print("Imported module:", Path(scenario_engine.__file__).resolve())'
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For this release the distribution is `3.0.1`; a source-development editable
|
|
82
|
+
install resolves the module under its `src/scenario_engine` directory. The DSE
|
|
83
|
+
distribution version is distinct from Engine 1 (`1.0.0`) and Engine 2 (`2.0.0`)
|
|
84
|
+
compatibility versions.
|
|
85
|
+
|
|
70
86
|
Install only the named optional integrations you need:
|
|
71
87
|
|
|
72
88
|
```console
|
|
@@ -114,6 +130,7 @@ self-contained offline HTML file from supported result/evidence.
|
|
|
114
130
|
|
|
115
131
|
- [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
|
|
116
132
|
- [DSL 1 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl-reference.md)
|
|
133
|
+
- [DSL 2 reference](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/dsl2-reference.md)
|
|
117
134
|
- [Determinism model](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/determinism.md)
|
|
118
135
|
- [Reproducibility and replay](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md)
|
|
119
136
|
- [Testing, faults, and oracle](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/testing-oracle.md)
|
|
@@ -125,13 +142,17 @@ self-contained offline HTML file from supported result/evidence.
|
|
|
125
142
|
- [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
|
|
126
143
|
- [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
|
|
127
144
|
- [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
|
|
145
|
+
- [3.0.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.0.md)
|
|
146
|
+
- [3.0.1 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-3.0.1.md)
|
|
128
147
|
- [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
|
|
129
148
|
- [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
|
|
130
149
|
|
|
131
150
|
## Status
|
|
132
151
|
|
|
133
152
|
Distribution release identity and deterministic engine compatibility are
|
|
134
|
-
separate contracts. This source tree reports distribution version
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
153
|
+
separate contracts. This source tree reports published distribution version
|
|
154
|
+
3.0.1 and public Engine 2.0.0. Engine 1 manifests remain exactly 1.0.0
|
|
155
|
+
with integer DSL 1; Engine 2 manifests use 2.0.0 with integer DSL 2. Supported
|
|
156
|
+
Python versions are 3.11–3.14. Suite Run/2 is reader/schema support only; Engine
|
|
157
|
+
2 suite orchestration, cross-major promotion, remote URI input, and implicit
|
|
158
|
+
schedule-seed derivation are unsupported. The project is Apache-2.0 licensed.
|
|
@@ -8,8 +8,14 @@ exports.
|
|
|
8
8
|
|
|
9
9
|
## Constants and value objects
|
|
10
10
|
|
|
11
|
-
- `ENGINE_VERSION` —
|
|
12
|
-
|
|
11
|
+
- `scenario_engine.ENGINE_VERSION` — public current Engine coordinate, `2.0.0`.
|
|
12
|
+
- `scenario_engine._version.VERSION` — distribution coordinate, `3.0.0`.
|
|
13
|
+
- `scenario_engine._version.ENGINE1_VERSION` — explicit historical Engine 1
|
|
14
|
+
execution coordinate, `1.0.0`; not added to the frozen package-root exports.
|
|
15
|
+
|
|
16
|
+
- `ENGINE_VERSION` — engine compatibility version recorded in manifests:
|
|
17
|
+
Engine 1 Manifest/1 records 1.0.0, while Engine 2 Manifest/2 records 2.0.0;
|
|
18
|
+
both are independent of the distribution version.
|
|
13
19
|
- `MISSING` — singleton semantic missing value, distinct from null.
|
|
14
20
|
- `LogicalID(value: str)` — deterministic logical identifier value; users
|
|
15
21
|
normally receive it from `$id` generation.
|
|
@@ -58,6 +64,43 @@ checks recorded compatibility before returning a replayed `ScenarioResult`.
|
|
|
58
64
|
`evaluate_scenario()` returns `OracleEvaluation` and optionally raises on an
|
|
59
65
|
oracle mismatch.
|
|
60
66
|
|
|
67
|
+
### Engine 2 explicit public workflow
|
|
68
|
+
|
|
69
|
+
These names are explicitly public from `scenario_engine.engine2` (execution and
|
|
70
|
+
replay) and `scenario_engine.compatibility` (classification). They are not added
|
|
71
|
+
to the compatibility-frozen package root.
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
validate_engine2(yaml_text: str) -> CompiledScenarioV2
|
|
75
|
+
execute_engine2(scenario: CompiledScenarioV2, root_seed: str | int, schedule_seed: int, *, run_index: int = 0, inputs: Mapping[str, Any] | None = None, plugins: PluginRegistry | None = None) -> tuple[Engine2Result, ScheduleArtifact]
|
|
76
|
+
replay_engine2(result: Engine2Result | bytes | str, schedule: ScheduleArtifact | bytes | str, scenario: CompiledScenarioV2, *, inputs: Mapping[str, Any] | None = None, plugins: PluginRegistry | None = None) -> Engine2Result
|
|
77
|
+
classify_engine_contract(*, dsl_version: int | None, engine_version: str | None, result_contract: str | None, operation: str) -> CompatibilityDecision
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`validate_engine2()` accepts only DSL 2. `execute_engine2()` requires both the
|
|
81
|
+
generation root seed and independent schedule seed and returns immutable,
|
|
82
|
+
canonically serializable Result/2 and Schedule/1 evidence. `replay_engine2()`
|
|
83
|
+
strictly reads supplied evidence when bytes or text are given, independently
|
|
84
|
+
executes every recorded scheduler choice, verifies all coordinates and final
|
|
85
|
+
observations, and returns the verified immutable Result/2. It never reconstructs
|
|
86
|
+
missing schedule evidence. Compatibility classification is explicit and does not
|
|
87
|
+
execute, migrate, or promote evidence. Existing Engine 1 functions are unchanged.
|
|
88
|
+
|
|
89
|
+
`schedule_seed` is a required independent unsigned 64-bit coordinate. It is not
|
|
90
|
+
derived from `root_seed`. Engine 2 writes Result/2, Manifest/2, and Schedule/1;
|
|
91
|
+
exact replay requires the matching result, schedule, scenario, and explicit
|
|
92
|
+
inputs. Actor-aware analysis is exposed through the existing inspection,
|
|
93
|
+
explanation, impact, and offline `scenario_engine.trace_view` surfaces.
|
|
94
|
+
|
|
95
|
+
The immutable Engine 2 evidence access names are also public from their explicit
|
|
96
|
+
modules: `Engine2Manifest`, `Engine2Result`, `ScheduleReference`,
|
|
97
|
+
`read_manifest2()`, `read_result2()`, and their canonical byte functions from
|
|
98
|
+
`scenario_engine.engine2`; and `ScheduleArtifact`, `read_schedule()`, and its
|
|
99
|
+
canonical byte functions from `scenario_engine.schedule`. `read_suite_run2()` is
|
|
100
|
+
schema/reader validation only and does not execute a suite. Errors remain in the
|
|
101
|
+
`Engine2EvidenceError`/`Engine2EvidenceBoundError`/`Engine2ReplayMismatch` and
|
|
102
|
+
`ScheduleError`/`ScheduleBoundError`/`ScheduleReplayMismatch` families.
|
|
103
|
+
|
|
61
104
|
## Canonical scenario functions
|
|
62
105
|
|
|
63
106
|
```python
|
{deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/compatibility.md
RENAMED
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
# Scenario Engine
|
|
1
|
+
# Scenario Engine 3.0 compatibility contract
|
|
2
2
|
|
|
3
3
|
This document is normative for the frozen DSL, deterministic result, manifest,
|
|
4
4
|
and plugin contracts. Distribution metadata remains a packaging concern.
|
|
5
5
|
|
|
6
6
|
## Version roles
|
|
7
7
|
|
|
8
|
-
`
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
Distribution `VERSION` is 3.0.0 and public `ENGINE_VERSION` is 2.0.0. The
|
|
9
|
+
historical Engine 1 coordinate is independently fixed at 1.0.0: every
|
|
10
|
+
`scenario.manifest/1` produced by DSL 1 continues to record 1.0.0. Engine 2
|
|
11
|
+
Manifest/2 records 2.0.0. Package version is never inferred as an execution
|
|
12
|
+
coordinate.
|
|
13
|
+
|
|
14
|
+
## Canonical compatibility matrix
|
|
15
|
+
|
|
16
|
+
| DSL | Engine | Execution/replay |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| integer `1` | `1.0.0` | supported: Result/1, Manifest/1, Suite Run/1 |
|
|
19
|
+
| integer `2` | `2.0.0` | supported: Result/2, Manifest/2, Schedule/1 |
|
|
20
|
+
| integer `1` | `2.0.0` | unsupported cross-major |
|
|
21
|
+
| integer `2` | `1.0.0` | unsupported cross-major |
|
|
22
|
+
|
|
23
|
+
Unknown, mixed-major, missing, and incomplete tuples fail closed. Reading does
|
|
24
|
+
not silently migrate evidence. Suite Run/2 support is schema/reader-only and
|
|
25
|
+
does not provide Engine 2 suite orchestration.
|
|
11
26
|
|
|
12
27
|
Engine SemVer has these meanings:
|
|
13
28
|
|
|
@@ -75,8 +90,8 @@ default and reader rules; unknown data is not silently treated as compatible.
|
|
|
75
90
|
Exact replay requires a compatible recorded engine contract, DSL version,
|
|
76
91
|
RNG/ID and generator/plugin algorithm versions, canonical scenario hash,
|
|
77
92
|
input/resource hashes, root seed, run index, locale, reference clock, and other
|
|
78
|
-
explicit execution context.
|
|
79
|
-
and
|
|
93
|
+
explicit execution context. Each engine requires its exact immutable execution
|
|
94
|
+
coordinate and compatibility-tuple match. Unsupported cross-version replay fails
|
|
80
95
|
explicitly; indefinite replay across incompatible future major versions is not
|
|
81
96
|
promised.
|
|
82
97
|
|
{deterministic_scenario_engine-2.2.0 → deterministic_scenario_engine-3.0.1}/docs/dsl-reference.md
RENAMED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
This reference describes the frozen Scenario Engine DSL 1 grammar and semantics.
|
|
4
4
|
Unknown keys are rejected in every schema-defined mapping.
|
|
5
5
|
|
|
6
|
+
DSL 1 remains bound to Engine 1.0.0, Result/1, Manifest/1, and Suite Run/1 in
|
|
7
|
+
distribution 3.0.0. Public Engine 2.0.0 does not promote or reinterpret DSL 1.
|
|
8
|
+
See [DSL 2](dsl2-reference.md) for logical actors.
|
|
9
|
+
|
|
6
10
|
## Root document
|
|
7
11
|
|
|
8
12
|
Required root keys are:
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# DSL 2 logical-actor reference
|
|
2
|
+
|
|
3
|
+
**Status: RELEASED — DSE distribution 3.0.0, published October 9, 2026.** See
|
|
4
|
+
the [GitHub Release](https://github.com/imshahinul/deterministic-scenario-engine/releases/tag/3.0.0).
|
|
5
|
+
|
|
6
|
+
DSL 2 is selected only by integer `dsl_version: 2` and executes with Engine
|
|
7
|
+
2.0.0. It preserves DSL 1 expression, deterministic value, resource, plugin,
|
|
8
|
+
clock, and atomic-step foundations while declaring ordered logical actors. Each
|
|
9
|
+
actor has a canonical `scenario:/actor/<id>` address and an ordered `steps`
|
|
10
|
+
sequence. Unknown keys, duplicate identifiers, noncanonical addresses, invalid
|
|
11
|
+
types, and exceeded bounds fail before execution.
|
|
12
|
+
|
|
13
|
+
## Execution and evidence
|
|
14
|
+
|
|
15
|
+
Execution requires two independent coordinates:
|
|
16
|
+
|
|
17
|
+
- `root_seed` controls addressed generation;
|
|
18
|
+
- `schedule_seed` is an explicit unsigned 64-bit integer controlling scheduler
|
|
19
|
+
selection and is never inferred from the root seed.
|
|
20
|
+
|
|
21
|
+
The public workflow is `scenario_engine.engine2.validate_engine2()`,
|
|
22
|
+
`execute_engine2()`, and `replay_engine2()`. It produces canonical
|
|
23
|
+
`scenario.result/2`, embedded `scenario.manifest/2`, and replay-authoritative
|
|
24
|
+
`scenario.schedule/1`. Exact replay rejects missing, altered, mixed-major, or
|
|
25
|
+
incompletely linked evidence.
|
|
26
|
+
|
|
27
|
+
## Analysis and limits
|
|
28
|
+
|
|
29
|
+
Result/2 supports actor-aware inspect/explain, conservative analysis, and the
|
|
30
|
+
offline static trace viewer. Inclusive resource ceilings cover actors, steps,
|
|
31
|
+
scheduler selections, canonical schedule bytes (8 MiB), canonical result bytes
|
|
32
|
+
(32 MiB), nesting depth, and input bytes. Duplicate JSON keys, remote URIs,
|
|
33
|
+
filesystem link traversal, noncanonical semantic addresses, invalid seeds, and
|
|
34
|
+
secret reflection are rejected or redacted.
|
|
35
|
+
|
|
36
|
+
## Unsupported capabilities
|
|
37
|
+
|
|
38
|
+
DSL 1/Engine 2 and DSL 2/Engine 1 execution are unsupported. There is no silent
|
|
39
|
+
migration, package-version inference, schedule-seed derivation, wall-clock or
|
|
40
|
+
network discovery, or Engine 2 suite orchestration. `suite.run/2` is a strict
|
|
41
|
+
schema/reader contract only.
|