deterministic-scenario-engine 2.1.2__tar.gz → 2.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/MANIFEST.in +2 -0
- {deterministic_scenario_engine-2.1.2/src/deterministic_scenario_engine.egg-info → deterministic_scenario_engine-2.2.0}/PKG-INFO +43 -43
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/README.md +42 -42
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/compatibility.md +92 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase3-public-contract.md +2 -2
- deterministic_scenario_engine-2.2.0/docs/phase4-architecture.md +815 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/product-evidence-gate.md +29 -9
- deterministic_scenario_engine-2.2.0/docs/quickstart.md +179 -0
- deterministic_scenario_engine-2.2.0/docs/release-notes-2.2.0.md +44 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/pyproject.toml +3 -0
- deterministic_scenario_engine-2.2.0/setup.py +44 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0/src/deterministic_scenario_engine.egg-info}/PKG-INFO +43 -43
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/SOURCES.txt +37 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/_version.py +1 -1
- deterministic_scenario_engine-2.2.0/src/scenario_engine/cli/main.py +1270 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/compatibility_fixtures.py +94 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/current-2.1.2-suite-run-v1.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-1.0.0-result-v1.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/historical-2.0.0-suite-run-v1.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-incomplete-suite-run-v1.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-scenario-mismatch-suite-run-v1.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-engine-suite-run-v1.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unknown-manifest-suite-run-v9.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/artifacts/synthetic-unsupported-contract.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/compatibility-fixtures.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/inputs/current-2.1.2-suite-run-v1.inputs.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/inputs/historical-2.0.0-suite-run-v1.inputs.json +1 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/compatibility_case.yaml +10 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/data/compatibility/phase4_11/scenarios/mismatch_case.yaml +10 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/definition_diff.py +210 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/diagnostics.py +130 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/compiler.py +13 -2
- deterministic_scenario_engine-2.2.0/src/scenario_engine/dsl/errors.py +52 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/parser.py +63 -10
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/runtime.py +31 -4
- deterministic_scenario_engine-2.2.0/src/scenario_engine/impact.py +343 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/explain.py +4 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/inspect.py +3 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/redaction.py +3 -2
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/manifest.py +49 -1
- deterministic_scenario_engine-2.2.0/src/scenario_engine/scaffolding.py +224 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/__init__.py +2 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/errors.py +8 -2
- deterministic_scenario_engine-2.2.0/src/scenario_engine/suite/publication.py +33 -0
- deterministic_scenario_engine-2.2.0/src/scenario_engine/trace_view.py +203 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0d_documentation_examples.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0e_packaging_release_candidate.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_10_workflow_demonstrators.py +2 -2
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_12_public_contract_docs_freeze.py +3 -2
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_13_packaging_fresh_install_rc.py +4 -3
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_1_v1_read_contract.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_2_composition.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_3_matrix.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_4_batch.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_5_inspect_explain.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_7_cli_product_surface.py +7 -3
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_11_public_contract_docs_freeze.py +7 -3
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_1_evidence_bundle_contract.py +1 -1
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_7_cli_interchange_surface.py +4 -1
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_10_canonical_workflow_help.py +76 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_11_cross_version_fixtures.py +207 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_12_hardening.py +134 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_12r2_public_fixture_packaging.py +94 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_12r3_consumer_secret_redaction.py +181 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_1_cli_replay_workflow.py +150 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_2_replay_compatibility_diagnostics.py +142 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_3_filesystem_trust_boundary.py +107 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_4_actionable_human_diagnostics.py +98 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_5_machine_readable_error_envelope.py +99 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_6_author_time_scaffolding.py +110 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_7_scenario_definition_structural_diff.py +151 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_8_conservative_impact_analysis.py +110 -0
- deterministic_scenario_engine-2.2.0/tests/test_phase_4_9_static_trace_viewer.py +162 -0
- deterministic_scenario_engine-2.1.2/docs/quickstart.md +0 -133
- deterministic_scenario_engine-2.1.2/src/scenario_engine/cli/main.py +0 -593
- deterministic_scenario_engine-2.1.2/src/scenario_engine/dsl/errors.py +0 -23
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/LICENSE +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/api.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/determinism.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/dsl-reference.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/hypothesis.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase2-architecture.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase2-public-contract.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/phase3-architecture.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/plugins.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/release-process.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/reproducibility.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/schemathesis.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/security-and-non-goals.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/sqlalchemy.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/testing-oracle.md +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/api_scenario.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/cart.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/control_flow.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/ecommerce.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/openapi.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/oracle_fault.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_1b_cart.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_3_resources.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_4_control_flow.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_5_oracle_fault.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_6_sqlalchemy_rows.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_7_ecommerce_plugin.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_8_api_scenario.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase0_8_openapi.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/phase3_ecommerce_evidence.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/resources.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/examples/sqlalchemy_rows.yaml +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/setup.cfg +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/dependency_links.txt +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/entry_points.txt +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/requires.txt +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/deterministic_scenario_engine.egg-info/top_level.txt +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/json_file.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/adapters/sqlalchemy.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/address.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/artifacts.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/canonical.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/batch/runtime.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/canonical.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/cli/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/cli/__main__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/clock.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/canonical.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/parser.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/resolver.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/composition/runtime.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/context.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/control_flow.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/compare.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/render.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/diff/serialization.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/canonical.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/domain_packs/registry.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/dsl/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/adapter.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/canonical.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/compatibility.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/export.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/fixture.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/migration.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/evidence/read.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/expressions.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/faults.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/history.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/ids.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/inspection/serialization.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/hypothesis.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/integrations/schemathesis.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/invariants.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/canonical.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/expand.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/filtering.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/matrix/runtime.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/errors.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/evaluate.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/oracle_assertions/serialization.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/plugins.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/provenance.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/pytest_plugin.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/__init__.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/ecommerce.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/reference_packs/ecommerce_evidence.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/resources.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/result.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/rng.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/runner.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/state.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/models.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/read.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/suite/serialization.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/validation.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/src/scenario_engine/values.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1a_semantic_kernel.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1b_linear_dsl.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1c_integrated_phase0_1.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_1c_r1_missing_sentinel_repair.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_2a_reproducible_results.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_2b_json_pytest_integration.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_3_resources_constraints.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_4_control_flow.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_5_oracle_faults.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_6_sqlalchemy_materializer.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_7_plugins_ecommerce.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_0_8_hypothesis_schemathesis.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0b_public_api_error_contract.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_1_0c_dsl_compatibility_contract.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_11_performance_scale_hardening.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_1_models_serialization.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_6_structured_semantic_diff.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_8_domain_pack_foundation.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_2_9_oracle_assertions.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_10_performance_security_hardening.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_12_packaging_fresh_install_rc.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_2_safe_bundle_reader_validator.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_3_ordered_export.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_4_evidence_adapter_contract.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_5_compatibility_migration_planner.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_6_lossless_migrations_fixture_export.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_phase_3_8_ecommerce_evidence_workflow.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_readme_pypi_portability.py +0 -0
- {deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/tests/test_test_portability.py +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
include LICENSE
|
|
2
2
|
include README.md
|
|
3
|
+
include setup.py
|
|
3
4
|
include pyproject.toml
|
|
4
5
|
recursive-include src *.py
|
|
6
|
+
recursive-include src/scenario_engine/data/compatibility/phase4_11 *
|
|
5
7
|
recursive-include docs *.md
|
|
6
8
|
recursive-include examples *.yaml
|
|
7
9
|
include examples/phase3_ecommerce_evidence.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deterministic-scenario-engine
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: Reproducible, state-consistent business scenarios with deterministic ground truth
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/imshahinul/deterministic-scenario-engine
|
|
@@ -41,7 +41,7 @@ Dynamic: license-file
|
|
|
41
41
|
|
|
42
42
|
Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
|
|
43
43
|
business histories and deterministic scenario suites with ground truth for
|
|
44
|
-
testing. The source-tree distribution version is 2.
|
|
44
|
+
testing. The source-tree distribution version is 2.2.0. Distribution release
|
|
45
45
|
identity and deterministic compatibility identity are separate:
|
|
46
46
|
`ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
|
|
47
47
|
public-release availability and history, see PyPI and GitHub Releases.
|
|
@@ -72,12 +72,20 @@ make expected behavior explicit.
|
|
|
72
72
|
- ordered Cartesian matrices with stable case IDs and original indexes
|
|
73
73
|
- immutable ordered batch plans and worker-independent results
|
|
74
74
|
- structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
|
|
75
|
-
-
|
|
75
|
+
- validated scenario-definition structural diff with canonical semantic addresses
|
|
76
|
+
- self-contained, deterministic offline HTML trace views of local result evidence
|
|
77
|
+
- `scenario` CLI for local and CI workflows, including bounded
|
|
76
78
|
local evidence export, verification, and lossless migration
|
|
77
79
|
- explicit immutable Domain Pack registries and pure Oracle Assertions
|
|
78
80
|
- canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
|
|
79
81
|
explicit adapters, closed lossless migrations, and fixture-directory export
|
|
80
82
|
|
|
83
|
+
Release 2.2.0 adds first-class run → replay artifacts and fail-closed replay
|
|
84
|
+
diagnostics, actionable human and machine-readable errors, author-time
|
|
85
|
+
scaffolding, scenario-definition diff, conservative impact analysis, offline
|
|
86
|
+
trace views, and an installed compatibility-fixture export. See the
|
|
87
|
+
[2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md).
|
|
88
|
+
|
|
81
89
|
Core execution does not require a database, network service, plugin, or property
|
|
82
90
|
testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
|
|
83
91
|
Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
|
|
@@ -87,57 +95,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
|
|
|
87
95
|
|
|
88
96
|
## Installation
|
|
89
97
|
|
|
90
|
-
|
|
98
|
+
Supported Python versions are 3.11, 3.12, 3.13, and 3.14.
|
|
99
|
+
|
|
100
|
+
Install the published package and use its `scenario` entry point:
|
|
91
101
|
|
|
92
102
|
```console
|
|
93
|
-
python3 -m
|
|
94
|
-
|
|
103
|
+
python3 -m pip install deterministic-scenario-engine
|
|
104
|
+
scenario --help
|
|
95
105
|
```
|
|
96
106
|
|
|
97
107
|
Install only the named optional integrations you need:
|
|
98
108
|
|
|
99
109
|
```console
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
python3 -m pip install 'deterministic-scenario-engine[pytest]'
|
|
111
|
+
python3 -m pip install 'deterministic-scenario-engine[sqlalchemy]'
|
|
112
|
+
python3 -m pip install 'deterministic-scenario-engine[hypothesis]'
|
|
113
|
+
python3 -m pip install 'deterministic-scenario-engine[schemathesis]'
|
|
104
114
|
```
|
|
105
115
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
`pip install 'deterministic-scenario-engine[pytest]'`.
|
|
116
|
+
Installing the current checkout with `python3 -m pip install .` is a
|
|
117
|
+
source-development-only alternative.
|
|
109
118
|
|
|
110
119
|
## Minimal quickstart
|
|
111
120
|
|
|
112
|
-
The
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
from scenario_engine import (
|
|
119
|
-
compile_document,
|
|
120
|
-
parse_yaml,
|
|
121
|
-
replay_scenario,
|
|
122
|
-
run_scenario,
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
|
|
126
|
-
document = parse_yaml(yaml_text)
|
|
127
|
-
scenario = compile_document(document)
|
|
128
|
-
result = run_scenario(scenario, root_seed="quickstart", run_index=0)
|
|
129
|
-
|
|
130
|
-
print(result.final_state["checkout_complete"])
|
|
131
|
-
print(result.trace())
|
|
132
|
-
stable_bytes = result.to_json_bytes()
|
|
133
|
-
manifest = result.manifest
|
|
134
|
-
|
|
135
|
-
replayed = replay_scenario(yaml_text, manifest)
|
|
136
|
-
assert replayed.to_json_bytes() == stable_bytes
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
`ScenarioResult.final_state` is the supported state-reading property; the stable
|
|
140
|
-
normalized result contains the same data under its `state` field.
|
|
121
|
+
The [canonical installed-package workflows](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
|
|
122
|
+
start by creating a complete portable DSL file under `/tmp/dse-demo`; they do
|
|
123
|
+
not require a source checkout or files from this repository. The guide covers
|
|
124
|
+
validate, run → replay, inspect/explain, both diff commands, conservative impact
|
|
125
|
+
analysis, export → verify, the static trace viewer, scaffold → validate, and the
|
|
126
|
+
human/machine diagnostic contract.
|
|
141
127
|
|
|
142
128
|
## Determinism contract
|
|
143
129
|
|
|
@@ -148,6 +134,19 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
|
|
|
148
134
|
[reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
|
|
149
135
|
[compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
|
|
150
136
|
|
|
137
|
+
The installed public compatibility corpus can be discovered with
|
|
138
|
+
`scenario --help` and exported without a source checkout using
|
|
139
|
+
`scenario compatibility-fixtures export --out /absolute/path`.
|
|
140
|
+
|
|
141
|
+
## Canonical command workflows
|
|
142
|
+
|
|
143
|
+
Use the [quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md#canonical-installed-package-workflows)
|
|
144
|
+
as the single canonical workflow document. In particular, `scenario diff`
|
|
145
|
+
compares execution artifacts, while `scenario diff-definition` structurally
|
|
146
|
+
compares validated scenario definitions. `scenario impact` is a separate,
|
|
147
|
+
conservative static may-impact analysis. `scenario trace-view` creates one
|
|
148
|
+
self-contained offline HTML file from supported result/evidence.
|
|
149
|
+
|
|
151
150
|
## Documentation
|
|
152
151
|
|
|
153
152
|
- [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
|
|
@@ -162,13 +161,14 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
|
|
|
162
161
|
- [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
|
|
163
162
|
- [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
|
|
164
163
|
- [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
|
|
164
|
+
- [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
|
|
165
165
|
- [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
|
|
166
166
|
- [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
|
|
167
167
|
|
|
168
168
|
## Status
|
|
169
169
|
|
|
170
170
|
Distribution release identity and deterministic engine compatibility are
|
|
171
|
-
separate contracts. This source tree reports distribution version 2.
|
|
171
|
+
separate contracts. This source tree reports distribution version 2.2.0;
|
|
172
172
|
generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
|
|
173
173
|
GitHub Releases are the authoritative sources for public-release availability
|
|
174
174
|
and history. The project is licensed under Apache-2.0.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Deterministic Scenario Engine (DSE) creates reproducible, state-consistent
|
|
6
6
|
business histories and deterministic scenario suites with ground truth for
|
|
7
|
-
testing. The source-tree distribution version is 2.
|
|
7
|
+
testing. The source-tree distribution version is 2.2.0. Distribution release
|
|
8
8
|
identity and deterministic compatibility identity are separate:
|
|
9
9
|
`ENGINE_VERSION` remains 1.0.0 and DSL version remains 1. For authoritative
|
|
10
10
|
public-release availability and history, see PyPI and GitHub Releases.
|
|
@@ -35,12 +35,20 @@ make expected behavior explicit.
|
|
|
35
35
|
- ordered Cartesian matrices with stable case IDs and original indexes
|
|
36
36
|
- immutable ordered batch plans and worker-independent results
|
|
37
37
|
- structured, redacted inspect/explain evidence and typed RFC 6901 semantic diff
|
|
38
|
-
-
|
|
38
|
+
- validated scenario-definition structural diff with canonical semantic addresses
|
|
39
|
+
- self-contained, deterministic offline HTML trace views of local result evidence
|
|
40
|
+
- `scenario` CLI for local and CI workflows, including bounded
|
|
39
41
|
local evidence export, verification, and lossless migration
|
|
40
42
|
- explicit immutable Domain Pack registries and pure Oracle Assertions
|
|
41
43
|
- canonical evidence bundles, ordered JSON/JSONL export, compatibility reports,
|
|
42
44
|
explicit adapters, closed lossless migrations, and fixture-directory export
|
|
43
45
|
|
|
46
|
+
Release 2.2.0 adds first-class run → replay artifacts and fail-closed replay
|
|
47
|
+
diagnostics, actionable human and machine-readable errors, author-time
|
|
48
|
+
scaffolding, scenario-definition diff, conservative impact analysis, offline
|
|
49
|
+
trace views, and an installed compatibility-fixture export. See the
|
|
50
|
+
[2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md).
|
|
51
|
+
|
|
44
52
|
Core execution does not require a database, network service, plugin, or property
|
|
45
53
|
testing framework. See [security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md).
|
|
46
54
|
Neither Phase 2 nor Phase 3 adds hidden discovery, network, randomness,
|
|
@@ -50,57 +58,35 @@ additive evidence surface is frozen in the [Phase 3 public contract](https://git
|
|
|
50
58
|
|
|
51
59
|
## Installation
|
|
52
60
|
|
|
53
|
-
|
|
61
|
+
Supported Python versions are 3.11, 3.12, 3.13, and 3.14.
|
|
62
|
+
|
|
63
|
+
Install the published package and use its `scenario` entry point:
|
|
54
64
|
|
|
55
65
|
```console
|
|
56
|
-
python3 -m
|
|
57
|
-
|
|
66
|
+
python3 -m pip install deterministic-scenario-engine
|
|
67
|
+
scenario --help
|
|
58
68
|
```
|
|
59
69
|
|
|
60
70
|
Install only the named optional integrations you need:
|
|
61
71
|
|
|
62
72
|
```console
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
python3 -m pip install 'deterministic-scenario-engine[pytest]'
|
|
74
|
+
python3 -m pip install 'deterministic-scenario-engine[sqlalchemy]'
|
|
75
|
+
python3 -m pip install 'deterministic-scenario-engine[hypothesis]'
|
|
76
|
+
python3 -m pip install 'deterministic-scenario-engine[schemathesis]'
|
|
67
77
|
```
|
|
68
78
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
`pip install 'deterministic-scenario-engine[pytest]'`.
|
|
79
|
+
Installing the current checkout with `python3 -m pip install .` is a
|
|
80
|
+
source-development-only alternative.
|
|
72
81
|
|
|
73
82
|
## Minimal quickstart
|
|
74
83
|
|
|
75
|
-
The
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
from scenario_engine import (
|
|
82
|
-
compile_document,
|
|
83
|
-
parse_yaml,
|
|
84
|
-
replay_scenario,
|
|
85
|
-
run_scenario,
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
yaml_text = Path("examples/cart.yaml").read_text(encoding="utf-8")
|
|
89
|
-
document = parse_yaml(yaml_text)
|
|
90
|
-
scenario = compile_document(document)
|
|
91
|
-
result = run_scenario(scenario, root_seed="quickstart", run_index=0)
|
|
92
|
-
|
|
93
|
-
print(result.final_state["checkout_complete"])
|
|
94
|
-
print(result.trace())
|
|
95
|
-
stable_bytes = result.to_json_bytes()
|
|
96
|
-
manifest = result.manifest
|
|
97
|
-
|
|
98
|
-
replayed = replay_scenario(yaml_text, manifest)
|
|
99
|
-
assert replayed.to_json_bytes() == stable_bytes
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
`ScenarioResult.final_state` is the supported state-reading property; the stable
|
|
103
|
-
normalized result contains the same data under its `state` field.
|
|
84
|
+
The [canonical installed-package workflows](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
|
|
85
|
+
start by creating a complete portable DSL file under `/tmp/dse-demo`; they do
|
|
86
|
+
not require a source checkout or files from this repository. The guide covers
|
|
87
|
+
validate, run → replay, inspect/explain, both diff commands, conservative impact
|
|
88
|
+
analysis, export → verify, the static trace viewer, scaffold → validate, and the
|
|
89
|
+
human/machine diagnostic contract.
|
|
104
90
|
|
|
105
91
|
## Determinism contract
|
|
106
92
|
|
|
@@ -111,6 +97,19 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
|
|
|
111
97
|
[reproducibility guide](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/reproducibility.md), and normative
|
|
112
98
|
[compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md).
|
|
113
99
|
|
|
100
|
+
The installed public compatibility corpus can be discovered with
|
|
101
|
+
`scenario --help` and exported without a source checkout using
|
|
102
|
+
`scenario compatibility-fixtures export --out /absolute/path`.
|
|
103
|
+
|
|
104
|
+
## Canonical command workflows
|
|
105
|
+
|
|
106
|
+
Use the [quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md#canonical-installed-package-workflows)
|
|
107
|
+
as the single canonical workflow document. In particular, `scenario diff`
|
|
108
|
+
compares execution artifacts, while `scenario diff-definition` structurally
|
|
109
|
+
compares validated scenario definitions. `scenario impact` is a separate,
|
|
110
|
+
conservative static may-impact analysis. `scenario trace-view` creates one
|
|
111
|
+
self-contained offline HTML file from supported result/evidence.
|
|
112
|
+
|
|
114
113
|
## Documentation
|
|
115
114
|
|
|
116
115
|
- [Quickstart](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/quickstart.md)
|
|
@@ -125,13 +124,14 @@ Unsupported cross-version replay fails explicitly. See the [determinism model](h
|
|
|
125
124
|
- [Public Python API](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/api.md)
|
|
126
125
|
- [Security assumptions and non-goals](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/security-and-non-goals.md)
|
|
127
126
|
- [Compatibility contract](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/compatibility.md)
|
|
127
|
+
- [2.2.0 release notes](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/release-notes-2.2.0.md)
|
|
128
128
|
- [Phase 2 public contract, CLI, and hard bounds](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase2-public-contract.md)
|
|
129
129
|
- [Phase 3 public contract and evidence interchange](https://github.com/imshahinul/deterministic-scenario-engine/blob/main/docs/phase3-public-contract.md)
|
|
130
130
|
|
|
131
131
|
## Status
|
|
132
132
|
|
|
133
133
|
Distribution release identity and deterministic engine compatibility are
|
|
134
|
-
separate contracts. This source tree reports distribution version 2.
|
|
134
|
+
separate contracts. This source tree reports distribution version 2.2.0;
|
|
135
135
|
generated core manifests retain `ENGINE_VERSION` 1.0.0 and DSL 1. PyPI and
|
|
136
136
|
GitHub Releases are the authoritative sources for public-release availability
|
|
137
137
|
and history. The project is licensed under Apache-2.0.
|
{deterministic_scenario_engine-2.1.2 → deterministic_scenario_engine-2.2.0}/docs/compatibility.md
RENAMED
|
@@ -80,6 +80,98 @@ and exact compatibility-tuple matches. Unsupported cross-version replay fails
|
|
|
80
80
|
explicitly; indefinite replay across incompatible future major versions is not
|
|
81
81
|
promised.
|
|
82
82
|
|
|
83
|
+
## Cross-version assurance
|
|
84
|
+
|
|
85
|
+
Inspection support is intentionally independent from replay support: an artifact
|
|
86
|
+
may remain safely inspectable while exact replay is rejected. Migration is an
|
|
87
|
+
explicit, non-destructive operation and is available only for already-supported
|
|
88
|
+
routes; reading never silently migrates an artifact. Unsupported and unknown
|
|
89
|
+
contracts or versions fail closed rather than being treated as current-compatible.
|
|
90
|
+
|
|
91
|
+
These boundaries are tested against a small immutable corpus whose bytes,
|
|
92
|
+
provenance, SHA-256 values, and per-operation expectations are frozen under the
|
|
93
|
+
`scenario.compatibility-fixtures/1` manifest. The corpus represents selected
|
|
94
|
+
public states and synthetic negative cases; it is not a promise of universal
|
|
95
|
+
backward compatibility.
|
|
96
|
+
|
|
97
|
+
### Consuming the compatibility fixture bundle
|
|
98
|
+
|
|
99
|
+
Starting only from an installed Scenario Engine, discover this workflow through
|
|
100
|
+
`scenario --help`, then export the complete frozen corpus to an absent absolute
|
|
101
|
+
local directory (no source checkout or network access is required):
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
scenario compatibility-fixtures export --out /absolute/path/phase4_11
|
|
105
|
+
cd /absolute/path/phase4_11
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The fixture manifest's optional `scenario_resource` and `inputs_resource`
|
|
109
|
+
fields identify the immutable public resources needed to construct replay
|
|
110
|
+
commands. The bundle contains current, historical, and synthetic artifacts for
|
|
111
|
+
replay, inspect, migrate, and compatibility exercises. Its bytes are frozen.
|
|
112
|
+
`--inputs` takes a bounded JSON object, so the companion file is read as the
|
|
113
|
+
argument instead of copying a magic value into shell quoting.
|
|
114
|
+
|
|
115
|
+
The current fixture replays with its published scenario and inputs:
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
scenario --json replay artifacts/current-2.1.2-suite-run-v1.json \
|
|
119
|
+
--scenario scenarios/compatibility_case.yaml \
|
|
120
|
+
--inputs "$(cat inputs/current-2.1.2-suite-run-v1.inputs.json)"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The historical 2.0.0 suite fixture remains replayable with its own published
|
|
124
|
+
inputs:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
scenario --json replay artifacts/historical-2.0.0-suite-run-v1.json \
|
|
128
|
+
--scenario scenarios/compatibility_case.yaml \
|
|
129
|
+
--inputs "$(cat inputs/historical-2.0.0-suite-run-v1.inputs.json)"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The historical 1.0.0 result is inspectable and migratable but is not a supported
|
|
133
|
+
replay artifact. This command fails closed with exit 5 and
|
|
134
|
+
`ENGINE_VERSION_UNSUPPORTED` in the `scenario.error/1` envelope:
|
|
135
|
+
|
|
136
|
+
```sh
|
|
137
|
+
scenario --json replay artifacts/historical-1.0.0-result-v1.json \
|
|
138
|
+
--scenario scenarios/compatibility_case.yaml
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Omitting the current artifact's required inputs fails with
|
|
142
|
+
`REPLAY_DATA_INCOMPLETE`:
|
|
143
|
+
|
|
144
|
+
```sh
|
|
145
|
+
scenario --json replay artifacts/current-2.1.2-suite-run-v1.json \
|
|
146
|
+
--scenario scenarios/compatibility_case.yaml
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
An unknown engine compatibility value fails closed with
|
|
150
|
+
`ENGINE_VERSION_UNSUPPORTED`:
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
scenario --json replay artifacts/synthetic-unknown-engine-suite-run-v1.json \
|
|
154
|
+
--scenario scenarios/compatibility_case.yaml --inputs '{"selected":7}'
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Its existing lossless migration route can be exercised without repository or
|
|
158
|
+
maintainer-local paths. The migration CLI requires absolute local source and
|
|
159
|
+
destination paths, so derive both from the fixture workspace:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
BUNDLE="$(pwd)"
|
|
163
|
+
scenario --json migrate "$BUNDLE/artifacts/historical-1.0.0-result-v1.json" \
|
|
164
|
+
"$BUNDLE/migrated-historical-1.0.0" --artifact-kind result \
|
|
165
|
+
--schema-version scenario.result/1 --product-version 1.0.0 \
|
|
166
|
+
--source-sha256 ea7068eac7888857800c2784eb1e662dbe7de4bb62f89e2e26f23b9150dc3a67
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Replay input values are external execution data, not recoverable from their
|
|
170
|
+
recorded fingerprints. When an artifact records required external inputs,
|
|
171
|
+
omitting them or supplying data that cannot be resolved fails closed with exit
|
|
172
|
+
5, `REPLAY_DATA_INCOMPLETE`, and the next action
|
|
173
|
+
`PROVIDE_REQUIRED_REPLAY_INPUTS`; it never reveals a hash preimage.
|
|
174
|
+
|
|
83
175
|
## Plugins
|
|
84
176
|
|
|
85
177
|
A plugin name identifies a generator family. Its version is an exact,
|
|
@@ -23,8 +23,8 @@ intentionally internal.
|
|
|
23
23
|
```text
|
|
24
24
|
scenario_engine count=33
|
|
25
25
|
scenario_engine sha256=f19f9c8ebe3fd5574550fea1fdefc5a20fa004a4913978e8bf5ab1e447278a50
|
|
26
|
-
scenario_engine.suite count=
|
|
27
|
-
scenario_engine.suite sha256=
|
|
26
|
+
scenario_engine.suite count=45
|
|
27
|
+
scenario_engine.suite sha256=2aa92ef099e841092afdfac9d8fbf7f2b5bd48898383b8810afdd85ed3116e98
|
|
28
28
|
scenario_engine.composition count=29
|
|
29
29
|
scenario_engine.composition sha256=689f1fecb3bbbe4822ce523e09084857f9da625a31b4b1e9bbc447d3bc425fe7
|
|
30
30
|
scenario_engine.matrix count=25
|