deterministic-scenario-engine 2.0.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.
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/MANIFEST.in +1 -0
- {deterministic_scenario_engine-2.0.0/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-2.1.1}/PKG-INFO +44 -35
- deterministic_scenario_engine-2.1.1/README.md +137 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/api.md +41 -5
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/determinism.md +13 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/phase2-public-contract.md +6 -3
- deterministic_scenario_engine-2.1.1/docs/phase3-architecture.md +731 -0
- deterministic_scenario_engine-2.1.1/docs/phase3-public-contract.md +298 -0
- deterministic_scenario_engine-2.1.1/docs/product-evidence-gate.md +65 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/quickstart.md +17 -0
- deterministic_scenario_engine-2.1.1/docs/release-process.md +63 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/reproducibility.md +16 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/security-and-non-goals.md +25 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/testing-oracle.md +6 -0
- deterministic_scenario_engine-2.1.1/examples/phase3_ecommerce_evidence.py +27 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/pyproject.toml +7 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1/src/deterministic_scenario_engine.egg-info}/PKG-INFO +44 -35
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +29 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/_version.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/cli/main.py +98 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/models.py +4 -4
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/__init__.py +211 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/adapter.py +329 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/canonical.py +71 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/compatibility.py +490 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/errors.py +123 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/export.py +320 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/fixture.py +152 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/migration.py +223 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/models.py +223 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/evidence/read.py +371 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/provenance.py +2 -2
- deterministic_scenario_engine-2.1.1/src/scenario_engine/reference_packs/__init__.py +16 -0
- deterministic_scenario_engine-2.1.1/src/scenario_engine/reference_packs/ecommerce_evidence.py +310 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0e_packaging_release_candidate.py +25 -12
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_10_workflow_demonstrators.py +4 -2
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_12_public_contract_docs_freeze.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_13_packaging_fresh_install_rc.py +9 -4
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_1_v1_read_contract.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_2_composition.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_3_matrix.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_4_batch.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_5_inspect_explain.py +1 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_7_cli_product_surface.py +1 -1
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_10_performance_security_hardening.py +208 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_11_public_contract_docs_freeze.py +186 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_12_packaging_fresh_install_rc.py +76 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_1_evidence_bundle_contract.py +259 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_2_safe_bundle_reader_validator.py +286 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_3_ordered_export.py +267 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_4_evidence_adapter_contract.py +256 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_5_compatibility_migration_planner.py +232 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_6_lossless_migrations_fixture_export.py +133 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_7_cli_interchange_surface.py +256 -0
- deterministic_scenario_engine-2.1.1/tests/test_phase_3_8_ecommerce_evidence_workflow.py +132 -0
- deterministic_scenario_engine-2.1.1/tests/test_readme_pypi_portability.py +61 -0
- deterministic_scenario_engine-2.0.0/README.md +0 -133
- deterministic_scenario_engine-2.0.0/src/scenario_engine/reference_packs/__init__.py +0 -1
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/LICENSE +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/compatibility.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/dsl-reference.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/hypothesis.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/phase2-architecture.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/plugins.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/schemathesis.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/sqlalchemy.md +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/api_scenario.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/cart.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/control_flow.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/ecommerce.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/openapi.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/oracle_fault.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_1b_cart.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_3_resources.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_4_control_flow.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_5_oracle_fault.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_8_api_scenario.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/phase0_8_openapi.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/resources.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/examples/sqlalchemy_rows.yaml +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/setup.cfg +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/adapters/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/adapters/json_file.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/address.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/artifacts.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/canonical.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/batch/runtime.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/canonical.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/cli/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/cli/__main__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/clock.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/canonical.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/parser.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/resolver.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/composition/runtime.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/context.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/control_flow.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/compare.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/render.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/diff/serialization.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/canonical.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/domain_packs/registry.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/compiler.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/parser.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/dsl/runtime.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/expressions.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/faults.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/history.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/ids.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/explain.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/inspect.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/redaction.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/inspection/serialization.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/integrations/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/integrations/hypothesis.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/integrations/schemathesis.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/invariants.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/manifest.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/canonical.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/expand.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/filtering.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/matrix/runtime.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/plugins.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/pytest_plugin.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/resources.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/result.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/rng.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/runner.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/state.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/__init__.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/errors.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/models.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/read.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/suite/serialization.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/validation.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/src/scenario_engine/values.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1b_linear_dsl.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_2a_reproducible_results.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_3_resources_constraints.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_4_control_flow.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_5_oracle_faults.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_1_0d_documentation_examples.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_1_models_serialization.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
- {deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/tests/test_phase_2_9_oracle_assertions.py +0 -0
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deterministic-scenario-engine
|
|
3
|
-
Version: 2.
|
|
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,10 +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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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.
|
|
42
47
|
|
|
43
48
|
## Why it exists
|
|
44
49
|
|
|
@@ -66,14 +71,18 @@ make expected behavior explicit.
|
|
|
66
71
|
- ordered Cartesian matrices with stable case IDs and original indexes
|
|
67
72
|
- immutable ordered batch plans and worker-independent results
|
|
68
73
|
- structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
|
|
69
|
-
-
|
|
74
|
+
- twelve-command `scenario` CLI for local and CI workflows, including bounded
|
|
75
|
+
local evidence export, verification, and lossless migration
|
|
70
76
|
- explicit immutable Domain Pack registries and pure Oracle Assertions
|
|
77
|
+
- canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
|
|
78
|
+
explicit adapters, closed lossless migrations, and fixture-directory export
|
|
71
79
|
|
|
72
80
|
Core execution does not require a database, network service, plugin, or property
|
|
73
|
-
testing framework. See [security assumptions and non-goals](docs/security-and-non-goals.md).
|
|
74
|
-
Phase 2 adds
|
|
75
|
-
environment semantics.
|
|
76
|
-
|
|
81
|
+
testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
|
|
82
|
+
Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
|
|
83
|
+
wall-clock, or ambient environment semantics. The historical Phase 2 contract
|
|
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).
|
|
77
86
|
|
|
78
87
|
## Installation
|
|
79
88
|
|
|
@@ -93,13 +102,13 @@ Install only the named optional integrations you need:
|
|
|
93
102
|
/tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
|
|
94
103
|
```
|
|
95
104
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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]'`.
|
|
99
108
|
|
|
100
109
|
## Minimal quickstart
|
|
101
110
|
|
|
102
|
-
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.
|
|
103
112
|
Run it from the repository root:
|
|
104
113
|
|
|
105
114
|
```python
|
|
@@ -134,31 +143,31 @@ normalized result contains the same data under its `state` field.
|
|
|
134
143
|
Generation derives from semantic `ExecutionAddress` values, not consumption of
|
|
135
144
|
a mutable global random stream. Exact replay requires the same canonical
|
|
136
145
|
scenario, explicit inputs, algorithms/plugins, and recorded execution context.
|
|
137
|
-
Unsupported cross-version replay fails explicitly. See the [determinism model](docs/determinism.md),
|
|
138
|
-
[reproducibility guide](docs/reproducibility.md), and normative
|
|
139
|
-
[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).
|
|
140
149
|
|
|
141
150
|
## Documentation
|
|
142
151
|
|
|
143
|
-
- [Quickstart](docs/quickstart.md)
|
|
144
|
-
- [DSL 1 reference](docs/dsl-reference.md)
|
|
145
|
-
- [Determinism model](docs/determinism.md)
|
|
146
|
-
- [Reproducibility and replay](docs/reproducibility.md)
|
|
147
|
-
- [Testing, faults, and oracle](docs/testing-oracle.md)
|
|
148
|
-
- [Plugins](docs/plugins.md)
|
|
149
|
-
- [SQLAlchemy adapter](docs/sqlalchemy.md)
|
|
150
|
-
- [Hypothesis integration](docs/hypothesis.md)
|
|
151
|
-
- [Schemathesis integration](docs/schemathesis.md)
|
|
152
|
-
- [Public Python API](docs/api.md)
|
|
153
|
-
- [Security assumptions and non-goals](docs/security-and-non-goals.md)
|
|
154
|
-
- [Compatibility contract](docs/compatibility.md)
|
|
155
|
-
- [Phase 2 public contract, CLI, and hard bounds](docs/phase2-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)
|
|
156
166
|
|
|
157
167
|
## Status
|
|
158
168
|
|
|
159
169
|
Distribution release identity and deterministic engine compatibility are
|
|
160
|
-
separate contracts
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
has occurred. The project is licensed 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.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Deterministic Scenario Engine
|
|
2
|
+
|
|
3
|
+
**Generate test scenarios, not just test records.**
|
|
4
|
+
|
|
5
|
+
Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
|
|
6
|
+
business histories and deterministic scenario suites with ground truth for
|
|
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.
|
|
11
|
+
|
|
12
|
+
## Why it exists
|
|
13
|
+
|
|
14
|
+
Fake-data libraries and random record generators produce values; fixtures often
|
|
15
|
+
describe isolated records. Scenario Engine executes histories: each committed
|
|
16
|
+
step sees a consistent state, produces traceable state changes and artifacts,
|
|
17
|
+
and advances an explicit logical clock. The same scenario and execution context
|
|
18
|
+
can be replayed byte-for-byte, while invariants, controlled faults, and an oracle
|
|
19
|
+
make expected behavior explicit.
|
|
20
|
+
|
|
21
|
+
## Core capabilities
|
|
22
|
+
|
|
23
|
+
- DSL 1 parsing, compilation, and deterministic execution
|
|
24
|
+
- addressed randomness and logical IDs that do not depend on a shared stream
|
|
25
|
+
- current state plus append-only committed history and artifacts
|
|
26
|
+
- whole-step atomicity
|
|
27
|
+
- explicit external inputs, resource DAG resolution, validators, and constraints
|
|
28
|
+
- subflows, ordered branches, and bounded repeat
|
|
29
|
+
- invariants, deterministic fault injection, provenance, and oracle evaluation
|
|
30
|
+
- canonical result bytes and a `ReproducibilityManifest` for exact replay
|
|
31
|
+
- an explicit, versioned plugin boundary and a reference ecommerce plugin pack
|
|
32
|
+
- a JSON-file adapter
|
|
33
|
+
- optional pytest, SQLAlchemy Core, Hypothesis, and Schemathesis integrations
|
|
34
|
+
- secure, explicit local-file composition with namespaced modules
|
|
35
|
+
- ordered Cartesian matrices with stable case IDs and original indexes
|
|
36
|
+
- immutable ordered batch plans and worker-independent results
|
|
37
|
+
- structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
|
|
38
|
+
- twelve-command `scenario` CLI for local and CI workflows, including bounded
|
|
39
|
+
local evidence export, verification, and lossless migration
|
|
40
|
+
- explicit immutable Domain Pack registries and pure Oracle Assertions
|
|
41
|
+
- canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
|
|
42
|
+
explicit adapters, closed lossless migrations, and fixture-directory export
|
|
43
|
+
|
|
44
|
+
Core execution does not require a database, network service, plugin, or property
|
|
45
|
+
testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
|
|
46
|
+
Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
|
|
47
|
+
wall-clock, or ambient environment semantics. The historical Phase 2 contract
|
|
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).
|
|
50
|
+
|
|
51
|
+
## Installation
|
|
52
|
+
|
|
53
|
+
From a source checkout, use a virtual environment and install the checkout:
|
|
54
|
+
|
|
55
|
+
```console
|
|
56
|
+
python3 -m venv /tmp/scenario-engine-docs-venv
|
|
57
|
+
/tmp/scenario-engine-docs-venv/bin/python -m pip install .
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Install only the named optional integrations you need:
|
|
61
|
+
|
|
62
|
+
```console
|
|
63
|
+
/tmp/scenario-engine-docs-venv/bin/python -m pip install '.[pytest]'
|
|
64
|
+
/tmp/scenario-engine-docs-venv/bin/python -m pip install '.[sqlalchemy]'
|
|
65
|
+
/tmp/scenario-engine-docs-venv/bin/python -m pip install '.[hypothesis]'
|
|
66
|
+
/tmp/scenario-engine-docs-venv/bin/python -m pip install '.[schemathesis]'
|
|
67
|
+
```
|
|
68
|
+
|
|
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]'`.
|
|
72
|
+
|
|
73
|
+
## Minimal quickstart
|
|
74
|
+
|
|
75
|
+
The public [cart scenario](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/examples/cart.yaml) is an executable DSL 1 document.
|
|
76
|
+
Run it from the repository root:
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
from pathlib import Path
|
|
80
|
+
|
|
81
|
+
from scenario_engine import (
|
|
82
|
+
compile_document,
|
|
83
|
+
parse_yaml,
|
|
84
|
+
replay_scenario,
|
|
85
|
+
run_scenario,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
|
|
89
|
+
document = parse_yaml(yaml_text)
|
|
90
|
+
scenario = compile_document(document)
|
|
91
|
+
result = run_scenario(scenario, root_seed="quickstart", run_index=0)
|
|
92
|
+
|
|
93
|
+
print(result.final_state["checkout_complete"])
|
|
94
|
+
print(result.trace())
|
|
95
|
+
stable_bytes = result.to_json_bytes()
|
|
96
|
+
manifest = result.manifest
|
|
97
|
+
|
|
98
|
+
replayed = replay_scenario(yaml_text, manifest)
|
|
99
|
+
assert replayed.to_json_bytes() == stable_bytes
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`ScenarioResult.final_state` is the supported state-reading property; the stable
|
|
103
|
+
normalized result contains the same data under its `state` field.
|
|
104
|
+
|
|
105
|
+
## Determinism contract
|
|
106
|
+
|
|
107
|
+
Generation derives from semantic `ExecutionAddress` values, not consumption of
|
|
108
|
+
a mutable global random stream. Exact replay requires the same canonical
|
|
109
|
+
scenario, explicit inputs, algorithms/plugins, and recorded execution context.
|
|
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).
|
|
113
|
+
|
|
114
|
+
## Documentation
|
|
115
|
+
|
|
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)
|
|
130
|
+
|
|
131
|
+
## Status
|
|
132
|
+
|
|
133
|
+
Distribution release identity and deterministic engine compatibility are
|
|
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.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Public Python API
|
|
2
2
|
|
|
3
3
|
This is the canonical top-level Phase 1.0 contract, preserved unchanged by the
|
|
4
|
-
Phase 2
|
|
5
|
-
implicitly promoted to top-level public API. Specialized
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
Phase 2 and Phase 3 freezes. Importable implementation symbols not listed here
|
|
5
|
+
are not implicitly promoted to top-level public API. Specialized APIs are public
|
|
6
|
+
through the explicit subpackages documented below, not package-root convenience
|
|
7
|
+
exports.
|
|
8
8
|
|
|
9
9
|
## Constants and value objects
|
|
10
10
|
|
|
11
11
|
- `ENGINE_VERSION` — engine compatibility version recorded in manifests; for
|
|
12
|
-
|
|
12
|
+
current manifests it remains 1.0.0 independently of distribution version.
|
|
13
13
|
- `MISSING` — singleton semantic missing value, distinct from null.
|
|
14
14
|
- `LogicalID(value: str)` — deterministic logical identifier value; users
|
|
15
15
|
normally receive it from `$id` generation.
|
|
@@ -185,3 +185,39 @@ paths are stable while helpers outside `__all__` are intentionally internal.
|
|
|
185
185
|
|
|
186
186
|
The schema/version constants and all exact export manifests are executable
|
|
187
187
|
contract tests. See the [complete Phase 2 contract](phase2-public-contract.md).
|
|
188
|
+
|
|
189
|
+
## Phase 3 evidence APIs
|
|
190
|
+
|
|
191
|
+
Phase 3 adds no package-root names. Its stable APIs are the names in `__all__`
|
|
192
|
+
of `scenario_engine.evidence` and `scenario_engine.reference_packs`; helpers in
|
|
193
|
+
their implementation modules are intentionally internal. Typical imports are:
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
from scenario_engine.evidence import (
|
|
197
|
+
ArtifactDescriptor,
|
|
198
|
+
EvidenceBundle,
|
|
199
|
+
EvidenceEntry,
|
|
200
|
+
EvidenceProvenance,
|
|
201
|
+
EvidenceRelationship,
|
|
202
|
+
EvidenceType,
|
|
203
|
+
compatibility_report,
|
|
204
|
+
export_evidence_bundle,
|
|
205
|
+
plan_migration,
|
|
206
|
+
read_evidence_bundle,
|
|
207
|
+
)
|
|
208
|
+
from scenario_engine.reference_packs import (
|
|
209
|
+
EcommerceEvidenceWorkflow,
|
|
210
|
+
ecommerce_domain_pack,
|
|
211
|
+
export_ecommerce_evidence,
|
|
212
|
+
)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
The evidence subpackage exposes immutable bundle/entry/relationship/provenance
|
|
216
|
+
models and canonicalization; bounded local reading and atomic export; canonical
|
|
217
|
+
JSON/JSONL records; explicit adapter capability/publication/receipt contracts;
|
|
218
|
+
finite compatibility reports and metadata-only migration plans; six closed,
|
|
219
|
+
lossless executable wrapper routes; and deterministic fixture-directory export.
|
|
220
|
+
`scenario_engine.reference_packs` exposes the ecommerce demonstrator and its
|
|
221
|
+
existing registry factory, not a generic workflow framework. The exact public
|
|
222
|
+
names, errors, schemas, limits, and compatibility posture are normative in the
|
|
223
|
+
[Phase 3 public contract](phase3-public-contract.md).
|
{deterministic_scenario_engine-2.0.0 → deterministic_scenario_engine-2.1.1}/docs/determinism.md
RENAMED
|
@@ -81,5 +81,17 @@ evidence. Worker scheduling, filesystem enumeration, host paths, locale defaults
|
|
|
81
81
|
environment variables, network responses, and process history are not semantic
|
|
82
82
|
coordinates.
|
|
83
83
|
|
|
84
|
+
Phase 3 evidence identity is the SHA-256 of canonical bundle index bytes. Entries
|
|
85
|
+
bind explicit artifact paths, sizes, schemas, and content SHA-256 values;
|
|
86
|
+
canonical export preserves those bytes and publishes an absent destination
|
|
87
|
+
atomically. JSONL records follow caller order. Compatibility reports and
|
|
88
|
+
migration plans use finite tables and deterministic canonical bytes; migration
|
|
89
|
+
results bind source/target hashes and an ordered transformation tuple. Fixture
|
|
90
|
+
IDs are explicit and stable, adapter receipts retain submission ordinal, and the
|
|
91
|
+
ecommerce reference bundle identity is independent of destination path and
|
|
92
|
+
worker scheduling. None of these downstream identities changes Phase 2 result
|
|
93
|
+
or manifest semantics.
|
|
94
|
+
|
|
84
95
|
See [reproducibility](reproducibility.md) for recorded context and
|
|
85
|
-
[compatibility](compatibility.md) for the normative replay contract
|
|
96
|
+
[compatibility](compatibility.md) for the normative replay contract, and the
|
|
97
|
+
[Phase 3 public contract](phase3-public-contract.md) for evidence identity.
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
# Phase 2 Public Contract Freeze
|
|
2
2
|
|
|
3
|
-
This document defines the
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
This document defines the historical Phase 2 / 2.0 public contract. Version
|
|
4
|
+
2.0.0 has since been published to PyPI and as a GitHub Release. Distribution
|
|
5
|
+
metadata remains 2.0.0 in the current source tree, while the
|
|
6
6
|
deterministic core compatibility token recorded in manifests remains
|
|
7
7
|
`ENGINE_VERSION == "1.0.0"`. DSL version remains integer 1. Distribution release
|
|
8
8
|
identity and engine compatibility are distinct concepts. Composition, matrix,
|
|
9
9
|
suite, inspection, diff, Domain Pack, and Oracle Assertion contracts retain
|
|
10
10
|
their independent schema versions and do not reinterpret valid v1 documents.
|
|
11
|
+
The additive, currently unreleased Phase 3 evidence contract is documented
|
|
12
|
+
separately in the [Phase 3 public contract](phase3-public-contract.md); its
|
|
13
|
+
eventual distribution target is 2.1.0.
|
|
11
14
|
|
|
12
15
|
## Supported product surface
|
|
13
16
|
|