openstatspec 0.7.1__tar.gz → 0.8.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.
- {openstatspec-0.7.1 → openstatspec-0.8.0}/.github/workflows/ci.yml +11 -4
- {openstatspec-0.7.1 → openstatspec-0.8.0}/.github/workflows/release.yml +3 -3
- {openstatspec-0.7.1 → openstatspec-0.8.0}/CHANGELOG.md +24 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/PKG-INFO +24 -10
- {openstatspec-0.7.1 → openstatspec-0.8.0}/README.md +23 -9
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/release-readiness.md +80 -12
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/sav-profile.md +1 -1
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/.github/workflows/ci.yml +2 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/CHANGELOG.md +44 -6
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/README.md +33 -5
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/RELEASING.md +21 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/ROADMAP.md +42 -14
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/VERSIONING.md +9 -0
- openstatspec-0.8.0/openstatspec-specification/conformance/spss-syntax-frontend-0.3.json +714 -0
- openstatspec-0.8.0/openstatspec-specification/docs/database-io-policy-v1.md +146 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/implementation-profiles/python-pyspssio-0.5.1.md +5 -0
- openstatspec-0.8.0/openstatspec-specification/docs/spss-frontend-roadmap.md +158 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/spss-sav-zsav-profile-1.0.md +5 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.2.md +2 -1
- openstatspec-0.8.0/openstatspec-specification/docs/spss-syntax-frontend-profile-0.3.md +164 -0
- openstatspec-0.8.0/openstatspec-specification/docs/superpowers/plans/2026-08-12-roadmap-v030-bookkeeping.md +64 -0
- openstatspec-0.8.0/openstatspec-specification/docs/superpowers/plans/2026-08-21-spss-frontend-03.md +1361 -0
- openstatspec-0.8.0/openstatspec-specification/docs/superpowers/specs/2026-08-21-spss-frontend-expansion-design.md +193 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/transformation-plan-profile-0.2.md +2 -1
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/transformation-plan-sql-binding-0.2.md +2 -1
- openstatspec-0.8.0/openstatspec-specification/examples/spss-syntax-transformation-0.3.md +41 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/pyproject.toml +2 -1
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/dialect-profiles.md +6 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/dolt-adapter-declarations/README.md +7 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/profile-capabilities.md +8 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/server-version-policy.md +7 -0
- openstatspec-0.8.0/openstatspec-specification/src/openstatspec_specification/artifacts.py +923 -0
- openstatspec-0.8.0/openstatspec-specification/tests/test_contract_artifacts.py +272 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/tools/validate_repository.py +34 -1
- openstatspec-0.8.0/openstatspec-specification/transformation/spss-syntax-frontend-0.3.schema.json +57 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/pyproject.toml +1 -1
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/api.py +8 -2
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/spss/sav.py +4 -288
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/capabilities.py +71 -27
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/catalog_api.py +3 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/database_urls.py +17 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/dolt_conformance.py +5 -2
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/inplace_transform.py +3 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/wide.py +20 -300
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/workflow.py +9 -3
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_catalog_lifecycle.py +0 -56
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_catalog_persistence_review.py +0 -90
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_cli.py +6 -3
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_dolt_conformance.py +43 -49
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_loss_reports.py +2 -15
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_normative_catalog.py +1 -17
- openstatspec-0.8.0/tests/test_read_only_export.py +262 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_review_transaction_boundary.py +13 -82
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_sql_profiles.py +36 -35
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_sql_services.py +143 -13
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_strict_catalog_review.py +4 -3
- {openstatspec-0.7.1 → openstatspec-0.8.0}/.github/verify_release_ref.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/.gitignore +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/THIRD_PARTY_NOTICES.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/architecture.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/in-place-transformation.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/pyspssio-spike.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/sql-transformation-workflow.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/superpowers/plans/2026-08-12-python-v071-stable-pin.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/superpowers/specs/2026-08-12-python-stable-specification-pin-design.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/docs/transformations.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/.github/workflows/release.yml +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/.gitignore +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/CONTRIBUTING.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/LICENSE.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/README.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/core-numeric-string.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/dictionary-and-display.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/generate-fixtures.sps +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/long-utf8-and-attributes.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/missing-rules.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/sets.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/weight-and-string-mr.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/fixtures/zsav-compressed.zsav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/in-place-transformation-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/in-place-transformation-0.2.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/spss-sav-zsav-1.0.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/spss-syntax-frontend-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/spss-syntax-frontend-0.2.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/sql-transformation-workflow-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/transformation-plan-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/conformance/transformation-plan-0.2.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/architecture.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/mssql-dialect-roadmap.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/spss-profile.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/sql-transformation-workflow-profile-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/transformation-plan-profile-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/docs/transformation-plan-sql-binding-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/examples/basic-spss-mapping.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/examples/spss-syntax-transformation-0.2.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/examples/spss-syntax-transformation.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/examples/sql-transformation-workflow.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/dialect-profile-baseline.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/dolt-adapter-declaration-schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/schema-outline.sql +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/transformation-plan-profile-schema.sql +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/sql/transformation-workflow-profile-schema.sql +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/src/openstatspec_specification/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/src/openstatspec_specification/dolt.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/tests/test_dolt_declarations.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/transformation/plan-0.1.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/transformation/plan-0.2.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/transformation/spss-syntax-frontend-0.1.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification/transformation/spss-syntax-frontend-0.2.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/.github/workflows/ci.yml +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/.github/workflows/publish.yml +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/.gitignore +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/CHANGELOG.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/CONTRIBUTING.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/README.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/RELEASING.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/ROADMAP.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/VERSIONING.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/LICENSE.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/README.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/core-numeric-string.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/dictionary-and-display.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/generate-fixtures.sps +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/long-utf8-and-attributes.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/missing-rules.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/sets.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/weight-and-string-mr.sav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/fixtures/zsav-compressed.zsav +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/in-place-transformation-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/in-place-transformation-0.2.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/spss-sav-zsav-1.0.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/spss-syntax-frontend-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/spss-syntax-frontend-0.2.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/sql-transformation-workflow-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/transformation-plan-0.1.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/conformance/transformation-plan-0.2.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/architecture.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/implementation-profiles/python-pyspssio-0.5.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/mssql-dialect-roadmap.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/spss-profile.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/spss-sav-zsav-profile-1.0.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/spss-syntax-frontend-profile-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/spss-syntax-frontend-profile-0.2.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/sql-transformation-workflow-profile-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/transformation-plan-profile-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/transformation-plan-profile-0.2.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/transformation-plan-sql-binding-0.1.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/docs/transformation-plan-sql-binding-0.2.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/examples/basic-spss-mapping.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/examples/spss-syntax-transformation-0.2.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/examples/spss-syntax-transformation.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/examples/sql-transformation-workflow.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/pyproject.toml +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/dialect-profile-baseline.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/dialect-profiles.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/dolt-adapter-declaration-schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/dolt-adapter-declarations/README.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/profile-capabilities.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/schema-outline.sql +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/server-version-policy.md +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/transformation-plan-profile-schema.sql +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/sql/transformation-workflow-profile-schema.sql +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/src/openstatspec_specification/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/src/openstatspec_specification/dolt.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/tests/test_dolt_declarations.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/tools/validate_repository.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/transformation/plan-0.1.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/transformation/plan-0.2.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/transformation/spss-syntax-frontend-0.1.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/openstatspec-specification-package/transformation/spss-syntax-frontend-0.2.schema.json +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/cli.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/core/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/core/results.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/sas/.gitkeep +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/spss/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/spss/binding.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/spss/compiler.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/spss/execution.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/spss/syntax.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/frontends/stata/.gitkeep +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/spss/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/spss/dictionary.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/spss/raw_dictionary.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/catalog_verification.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/normative.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/sql/profiles.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/transform/__init__.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/transform/errors.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/transform/plan.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/transform/schema.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/src/openstatspec/transform/validation.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/conformance.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_atomic_import.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_attribute_catalog.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_conditional_inplace_transform.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_document_round_trip.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_inplace_transform.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_official_conformance.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_pyspssio_catalog_authority.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_release_ref.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_sav_sqlite.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_spss_catalog_preflight.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_sql_workflow.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_transform_frontend.py +0 -0
- {openstatspec-0.7.1 → openstatspec-0.8.0}/tests/test_vls_compatible_names.py +0 -0
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
uses: actions/checkout@v7
|
|
21
21
|
with: &specification-checkout
|
|
22
22
|
repository: OpenStatSpec/specification
|
|
23
|
-
ref:
|
|
23
|
+
ref: 864e84479f554b8ee250ffed44c4dfb963750d4a
|
|
24
24
|
path: openstatspec-specification
|
|
25
25
|
- name: Checkout required SPSS engine
|
|
26
26
|
uses: actions/checkout@v7
|
|
@@ -53,9 +53,9 @@ jobs:
|
|
|
53
53
|
- run: python -m pip install --upgrade pip build
|
|
54
54
|
- run: python -m build
|
|
55
55
|
- run: python -m venv /tmp/openstatspec-wheel-smoke
|
|
56
|
-
- run: /tmp/openstatspec-wheel-smoke/bin/python -m pip install ./openstatspec-pyspssio
|
|
57
56
|
- run: /tmp/openstatspec-wheel-smoke/bin/python -m pip install dist/*.whl
|
|
58
|
-
- run: /tmp/openstatspec-wheel-smoke/bin/openstatspec capabilities
|
|
57
|
+
- run: env -u PYTHONPATH /tmp/openstatspec-wheel-smoke/bin/openstatspec capabilities
|
|
58
|
+
working-directory: /tmp
|
|
59
59
|
|
|
60
60
|
postgres-integration:
|
|
61
61
|
name: PostgreSQL ${{ matrix.postgres }} integration
|
|
@@ -143,7 +143,7 @@ jobs:
|
|
|
143
143
|
steps: *sql-test-steps
|
|
144
144
|
|
|
145
145
|
dolt-integration:
|
|
146
|
-
name: Dolt ${{ matrix.dolt }}
|
|
146
|
+
name: Dolt ${{ matrix.dolt }} default-write integration
|
|
147
147
|
runs-on: ubuntu-latest
|
|
148
148
|
strategy:
|
|
149
149
|
fail-fast: false
|
|
@@ -155,6 +155,7 @@ jobs:
|
|
|
155
155
|
image: dolthub/dolt:2.2.3@sha256:1a651e738a2e7275b9c69fec8c5f42c6e23954314405c412f4dc9287ee7c0080
|
|
156
156
|
env:
|
|
157
157
|
OPENSTATSPEC_DOLT_URL: mysql+pymysql://openstatspec:openstatspec@127.0.0.1:13308/openstatspec
|
|
158
|
+
OPENSTATSPEC_TEST_DOLT_ADMIN_URL: mysql+pymysql://openstatspec_test_admin:ci-admin@127.0.0.1:13308/
|
|
158
159
|
OPENSTATSPEC_EXPECTED_DOLT_VERSION: ${{ matrix.dolt }}
|
|
159
160
|
OPENSTATSPEC_DOLT_IMAGE: ${{ matrix.image }}
|
|
160
161
|
steps:
|
|
@@ -186,6 +187,11 @@ jobs:
|
|
|
186
187
|
--workdir /var/lib/dolt \
|
|
187
188
|
"$OPENSTATSPEC_DOLT_IMAGE" sql \
|
|
188
189
|
-q "CREATE USER 'openstatspec'@'%' IDENTIFIED BY 'openstatspec'; GRANT ALL PRIVILEGES ON openstatspec.* TO 'openstatspec'@'%'"
|
|
190
|
+
docker run --rm \
|
|
191
|
+
--volume "$RUNNER_TEMP/openstatspec-dolt:/var/lib/dolt" \
|
|
192
|
+
--workdir /var/lib/dolt \
|
|
193
|
+
"$OPENSTATSPEC_DOLT_IMAGE" sql \
|
|
194
|
+
-q "CREATE USER 'openstatspec_test_admin'@'%' IDENTIFIED BY 'ci-admin'; GRANT ALL PRIVILEGES ON *.* TO 'openstatspec_test_admin'@'%' WITH GRANT OPTION"
|
|
189
195
|
docker run --detach --name openstatspec-dolt \
|
|
190
196
|
--publish 127.0.0.1:13308:3306 \
|
|
191
197
|
--volume "$RUNNER_TEMP/openstatspec-dolt:/var/lib/dolt" \
|
|
@@ -218,6 +224,7 @@ jobs:
|
|
|
218
224
|
break
|
|
219
225
|
PY
|
|
220
226
|
- run: python -m pytest -m "services and not candidate_evidence"
|
|
227
|
+
- run: python -m pytest tests/test_read_only_export.py
|
|
221
228
|
- name: Show Dolt logs on failure and stop server
|
|
222
229
|
if: always()
|
|
223
230
|
run: |
|
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
49
49
|
with:
|
|
50
50
|
repository: OpenStatSpec/specification
|
|
51
|
-
ref:
|
|
51
|
+
ref: 864e84479f554b8ee250ffed44c4dfb963750d4a
|
|
52
52
|
path: openstatspec-specification
|
|
53
53
|
- name: Checkout specification package source
|
|
54
54
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
@@ -159,9 +159,9 @@ jobs:
|
|
|
159
159
|
- run: python -m pip install -e ".[dev]"
|
|
160
160
|
- run: python -m pytest -m "not services"
|
|
161
161
|
- run: python -m venv /tmp/openstatspec-release-smoke
|
|
162
|
-
- run: /tmp/openstatspec-release-smoke/bin/python -m pip install ./openstatspec-pyspssio
|
|
163
162
|
- run: /tmp/openstatspec-release-smoke/bin/python -m pip install dist/openstatspec/openstatspec-*.whl
|
|
164
|
-
- run: /tmp/openstatspec-release-smoke/bin/openstatspec capabilities
|
|
163
|
+
- run: env -u PYTHONPATH /tmp/openstatspec-release-smoke/bin/openstatspec capabilities
|
|
164
|
+
working-directory: /tmp
|
|
165
165
|
- name: Smoke-test specification wheel
|
|
166
166
|
run: |
|
|
167
167
|
python -m venv /tmp/openstatspec-specification-release-smoke
|
|
@@ -6,6 +6,30 @@ All notable changes to this reference implementation are documented here.
|
|
|
6
6
|
|
|
7
7
|
_No unreleased changes._
|
|
8
8
|
|
|
9
|
+
## 0.8.0 - 2026-09-07
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Pin released specification `v0.5.0` at exact commit
|
|
14
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a`, with normative status `released`.
|
|
15
|
+
Capabilities identify adapter version 0.8.0 and explicitly select SAV/ZSAV 1.0
|
|
16
|
+
with `database_io_policy=openstatspec-database-io-v1`.
|
|
17
|
+
- Reads, inspection, validation, and SAV/ZSAV export no longer write database
|
|
18
|
+
operation/fidelity audit records, including on failure. Export diagnostics
|
|
19
|
+
and loss consent remain operation-scoped; export results omit `operation_id`.
|
|
20
|
+
- Default Dolt writes use the packaged tested exact-version policy for 2.2.2
|
|
21
|
+
and 2.2.3 without user-supplied evidence files. Unknown/untested versions
|
|
22
|
+
remain blocked before mutation; explicit external overrides remain strict.
|
|
23
|
+
Safety budgets are not claimed as proven native server limits.
|
|
24
|
+
- Dolt reads no longer require write-version declarations or the write
|
|
25
|
+
variable-count ceiling. Missing SQLite files are rejected without creation.
|
|
26
|
+
- Exact Dolt 2.2.2/2.2.3 CI explicitly runs SELECT-only export success/failure
|
|
27
|
+
tests using a separate fixture-admin account; normal service permissions
|
|
28
|
+
and adapter permissions are unchanged. Wheel smoke installs resolve the
|
|
29
|
+
required engine from PyPI rather than a source checkout.
|
|
30
|
+
|
|
31
|
+
No optional Transformation Workflow 0.3 implementation is claimed.
|
|
32
|
+
|
|
9
33
|
## 0.7.1 - 2026-08-12
|
|
10
34
|
|
|
11
35
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: openstatspec
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: Reference adapter for the OpenStatSpec relational contract
|
|
5
5
|
Author: OpenStatSpec
|
|
6
6
|
License: Apache-2.0
|
|
@@ -23,6 +23,10 @@ The reference Python implementation of the OpenStatSpec specification.
|
|
|
23
23
|
|
|
24
24
|
This package implements the specification; it does not define or extend it.
|
|
25
25
|
The normative model lives in the `OpenStatSpec/specification` repository.
|
|
26
|
+
Python 0.8.0 pins released specification `v0.5.0` at
|
|
27
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a` and selects SAV/ZSAV 1.0 with
|
|
28
|
+
`database_io_policy=openstatspec-database-io-v1`. This does not claim
|
|
29
|
+
implementation of the optional Transformation Workflow 0.3 profile.
|
|
26
30
|
|
|
27
31
|
## Boundaries
|
|
28
32
|
|
|
@@ -115,17 +119,19 @@ SAV/ZSAV export for the semantics exposed by that engine. SQLite is the local
|
|
|
115
119
|
reference path.
|
|
116
120
|
PostgreSQL, MySQL, MariaDB, and Dolt are each covered by separate service-backed CI
|
|
117
121
|
conformance checks. Dolt support is an independent core profile for the
|
|
118
|
-
|
|
119
|
-
noncanonical versions, and unknown MySQL-wire products fail closed.
|
|
122
|
+
exact write-supported versions 2.2.2 and 2.2.3; all other versions (including
|
|
123
|
+
2.3.0), noncanonical versions, and unknown MySQL-wire products fail closed for writes.
|
|
120
124
|
|
|
121
125
|
The supported family claims are broader than the deliberately exact CI
|
|
122
126
|
evidence points: PostgreSQL 17.x/18.x is exercised at 17.10/18.4, MySQL
|
|
123
127
|
8.4.x/9.7.x at 8.4.11/9.7.2, and MariaDB 11.4.x/11.8.x/12.3.x at
|
|
124
128
|
11.4.12/11.8.8/12.3.2. Each service job checks the normalized live server
|
|
125
129
|
version against its exact matrix entry before that run can count as evidence.
|
|
126
|
-
Dolt
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
Dolt's default-write service checks run independently at exact versions 2.2.2
|
|
131
|
+
and 2.2.3 using immutable container-image digests. Release/CI owns this evidence;
|
|
132
|
+
normal callers need no declaration or evidence files. The optional explicit
|
|
133
|
+
`DoltConformanceSource` override remains strict and does not fall back to the
|
|
134
|
+
default policy if its declarations are missing, invalid, or mismatched.
|
|
129
135
|
|
|
130
136
|
| Engine/profile | Runtime supported policy | Exact CI-tested versions |
|
|
131
137
|
| --- | --- | --- |
|
|
@@ -133,7 +139,7 @@ immutable container-image digests.
|
|
|
133
139
|
| PostgreSQL | 17.x and 18.x | 17.10 and 18.4 |
|
|
134
140
|
| MySQL | 8.4.x and 9.7.x | 8.4.11 and 9.7.2 |
|
|
135
141
|
| MariaDB | 11.4.x, 11.8.x, and 12.3.x | 11.4.12, 11.8.8, and 12.3.2 |
|
|
136
|
-
| Dolt | 2.2.
|
|
142
|
+
| Dolt writes | Exactly 2.2.2 and 2.2.3 | 2.2.2 and 2.2.3 |
|
|
137
143
|
|
|
138
144
|
Microsoft SQL Server (MSSQL) remains roadmap-only and is not a supported
|
|
139
145
|
runtime profile; see the specification's [MSSQL roadmap](https://github.com/OpenStatSpec/specification/blob/main/docs/mssql-dialect-roadmap.md).
|
|
@@ -143,7 +149,7 @@ Use these explicit SQLAlchemy URLs:
|
|
|
143
149
|
- SQLite: `sqlite:///dataset.sqlite`
|
|
144
150
|
- PostgreSQL: `postgresql+psycopg://user:password@host/database`
|
|
145
151
|
- MySQL/MariaDB: `mysql+pymysql://user:password@host/database`
|
|
146
|
-
- Dolt
|
|
152
|
+
- Dolt 2.2.2 or 2.2.3: `mysql+pymysql://user:password@host/database` (detected by server identity)
|
|
147
153
|
|
|
148
154
|
The Dolt core profile supports strict wide-table import, validation, and export;
|
|
149
155
|
the separate Transformation Workflow is unsupported.
|
|
@@ -151,8 +157,16 @@ the separate Transformation Workflow is unsupported.
|
|
|
151
157
|
Run `openstatspec capabilities` before an integration to inspect the
|
|
152
158
|
machine-readable feature matrix. Export is deliberately strict: if known
|
|
153
159
|
dictionary semantics cannot be reproduced, it stops until you pass the exact
|
|
154
|
-
diagnostic code with `--allow-loss`.
|
|
155
|
-
|
|
160
|
+
diagnostic code with `--allow-loss`. Diagnostics are returned to the caller, not
|
|
161
|
+
persisted. Reads, validation, and SAV/ZSAV export never write to the database,
|
|
162
|
+
including on failure. Export returns no `operation_id` and needs only read
|
|
163
|
+
permissions; Dolt reads have no write-version or write-variable-count gate.
|
|
164
|
+
Read operations reject missing SQLite files without creating them. Imports and transformations
|
|
165
|
+
use the packaged exact-version policy by default. Active driver/identity checks,
|
|
166
|
+
limit preflight, and the clean expected branch/HEAD guard for in-place apply
|
|
167
|
+
remain mandatory. Dolt's reported limits are adapter safety budgets, narrowed
|
|
168
|
+
by the active packet limit, not proven native server ceilings; full boundary
|
|
169
|
+
conformance is not claimed.
|
|
156
170
|
|
|
157
171
|
The matrix is also available to Python callers as
|
|
158
172
|
`openstatspec.capability_matrix()`. It distinguishes supported semantics from
|
|
@@ -4,6 +4,10 @@ The reference Python implementation of the OpenStatSpec specification.
|
|
|
4
4
|
|
|
5
5
|
This package implements the specification; it does not define or extend it.
|
|
6
6
|
The normative model lives in the `OpenStatSpec/specification` repository.
|
|
7
|
+
Python 0.8.0 pins released specification `v0.5.0` at
|
|
8
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a` and selects SAV/ZSAV 1.0 with
|
|
9
|
+
`database_io_policy=openstatspec-database-io-v1`. This does not claim
|
|
10
|
+
implementation of the optional Transformation Workflow 0.3 profile.
|
|
7
11
|
|
|
8
12
|
## Boundaries
|
|
9
13
|
|
|
@@ -96,17 +100,19 @@ SAV/ZSAV export for the semantics exposed by that engine. SQLite is the local
|
|
|
96
100
|
reference path.
|
|
97
101
|
PostgreSQL, MySQL, MariaDB, and Dolt are each covered by separate service-backed CI
|
|
98
102
|
conformance checks. Dolt support is an independent core profile for the
|
|
99
|
-
|
|
100
|
-
noncanonical versions, and unknown MySQL-wire products fail closed.
|
|
103
|
+
exact write-supported versions 2.2.2 and 2.2.3; all other versions (including
|
|
104
|
+
2.3.0), noncanonical versions, and unknown MySQL-wire products fail closed for writes.
|
|
101
105
|
|
|
102
106
|
The supported family claims are broader than the deliberately exact CI
|
|
103
107
|
evidence points: PostgreSQL 17.x/18.x is exercised at 17.10/18.4, MySQL
|
|
104
108
|
8.4.x/9.7.x at 8.4.11/9.7.2, and MariaDB 11.4.x/11.8.x/12.3.x at
|
|
105
109
|
11.4.12/11.8.8/12.3.2. Each service job checks the normalized live server
|
|
106
110
|
version against its exact matrix entry before that run can count as evidence.
|
|
107
|
-
Dolt
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
Dolt's default-write service checks run independently at exact versions 2.2.2
|
|
112
|
+
and 2.2.3 using immutable container-image digests. Release/CI owns this evidence;
|
|
113
|
+
normal callers need no declaration or evidence files. The optional explicit
|
|
114
|
+
`DoltConformanceSource` override remains strict and does not fall back to the
|
|
115
|
+
default policy if its declarations are missing, invalid, or mismatched.
|
|
110
116
|
|
|
111
117
|
| Engine/profile | Runtime supported policy | Exact CI-tested versions |
|
|
112
118
|
| --- | --- | --- |
|
|
@@ -114,7 +120,7 @@ immutable container-image digests.
|
|
|
114
120
|
| PostgreSQL | 17.x and 18.x | 17.10 and 18.4 |
|
|
115
121
|
| MySQL | 8.4.x and 9.7.x | 8.4.11 and 9.7.2 |
|
|
116
122
|
| MariaDB | 11.4.x, 11.8.x, and 12.3.x | 11.4.12, 11.8.8, and 12.3.2 |
|
|
117
|
-
| Dolt | 2.2.
|
|
123
|
+
| Dolt writes | Exactly 2.2.2 and 2.2.3 | 2.2.2 and 2.2.3 |
|
|
118
124
|
|
|
119
125
|
Microsoft SQL Server (MSSQL) remains roadmap-only and is not a supported
|
|
120
126
|
runtime profile; see the specification's [MSSQL roadmap](https://github.com/OpenStatSpec/specification/blob/main/docs/mssql-dialect-roadmap.md).
|
|
@@ -124,7 +130,7 @@ Use these explicit SQLAlchemy URLs:
|
|
|
124
130
|
- SQLite: `sqlite:///dataset.sqlite`
|
|
125
131
|
- PostgreSQL: `postgresql+psycopg://user:password@host/database`
|
|
126
132
|
- MySQL/MariaDB: `mysql+pymysql://user:password@host/database`
|
|
127
|
-
- Dolt
|
|
133
|
+
- Dolt 2.2.2 or 2.2.3: `mysql+pymysql://user:password@host/database` (detected by server identity)
|
|
128
134
|
|
|
129
135
|
The Dolt core profile supports strict wide-table import, validation, and export;
|
|
130
136
|
the separate Transformation Workflow is unsupported.
|
|
@@ -132,8 +138,16 @@ the separate Transformation Workflow is unsupported.
|
|
|
132
138
|
Run `openstatspec capabilities` before an integration to inspect the
|
|
133
139
|
machine-readable feature matrix. Export is deliberately strict: if known
|
|
134
140
|
dictionary semantics cannot be reproduced, it stops until you pass the exact
|
|
135
|
-
diagnostic code with `--allow-loss`.
|
|
136
|
-
|
|
141
|
+
diagnostic code with `--allow-loss`. Diagnostics are returned to the caller, not
|
|
142
|
+
persisted. Reads, validation, and SAV/ZSAV export never write to the database,
|
|
143
|
+
including on failure. Export returns no `operation_id` and needs only read
|
|
144
|
+
permissions; Dolt reads have no write-version or write-variable-count gate.
|
|
145
|
+
Read operations reject missing SQLite files without creating them. Imports and transformations
|
|
146
|
+
use the packaged exact-version policy by default. Active driver/identity checks,
|
|
147
|
+
limit preflight, and the clean expected branch/HEAD guard for in-place apply
|
|
148
|
+
remain mandatory. Dolt's reported limits are adapter safety budgets, narrowed
|
|
149
|
+
by the active packet limit, not proven native server ceilings; full boundary
|
|
150
|
+
conformance is not claimed.
|
|
137
151
|
|
|
138
152
|
The matrix is also available to Python callers as
|
|
139
153
|
`openstatspec.capability_matrix()`. It distinguishes supported semantics from
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
# 0.
|
|
1
|
+
# 0.8.0 release readiness
|
|
2
2
|
|
|
3
3
|
This page records the expected release contract, not a publication event.
|
|
4
4
|
Creating a version tag remains a separate maintainer action.
|
|
5
5
|
|
|
6
|
+
The release selects SAV/ZSAV 1.0 with the optional Database I/O Execution
|
|
7
|
+
Policy `openstatspec-database-io-v1`. Reads and exports, including failures,
|
|
8
|
+
write no database audit records; export results omit `operation_id` and return
|
|
9
|
+
diagnostics to the caller. Reads must not create missing SQLite files or apply
|
|
10
|
+
Dolt write-variable-count ceilings. This release does not claim implementation
|
|
11
|
+
of the optional Transformation Workflow 0.3 profile.
|
|
12
|
+
|
|
6
13
|
## Supported workflow
|
|
7
14
|
|
|
8
15
|
For a supported unencrypted SAV or ZSAV source, the adapter imports one source
|
|
@@ -20,15 +27,17 @@ database contract.
|
|
|
20
27
|
| PostgreSQL | `postgresql+psycopg://…` | 17.x and 18.x | 17.10 and 18.4 |
|
|
21
28
|
| MySQL | `mysql+pymysql://…` | 8.4.x and 9.7.x | 8.4.11 and 9.7.2 |
|
|
22
29
|
| MariaDB | `mysql+pymysql://…` | 11.4.x, 11.8.x, and 12.3.x | 11.4.12, 11.8.8, and 12.3.2 |
|
|
23
|
-
| Dolt | `mysql+pymysql://…` | 2.2.
|
|
30
|
+
| Dolt writes | `mysql+pymysql://…` | Exactly 2.2.2 and 2.2.3 | 2.2.2 and 2.2.3 |
|
|
24
31
|
|
|
25
32
|
Separate service matrices test the shared MySQL/MariaDB profile contract while
|
|
26
33
|
retaining distinct active-server identities and version claims. Dolt is an
|
|
27
|
-
independent core profile
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
independent core profile with a packaged exact-version write policy; normal
|
|
35
|
+
callers supply no conformance files. An explicit external declaration source
|
|
36
|
+
remains a strict override. Read-only validation/export has no write-version gate.
|
|
37
|
+
The optional Transformation Workflow remains SQLite-only. This does not claim
|
|
38
|
+
coverage for every server configuration or proven Dolt native limit ceilings.
|
|
39
|
+
Dolt capabilities report adapter safety budgets and active packet constraints;
|
|
40
|
+
full boundary conformance remains pending.
|
|
32
41
|
Every server service job compares the normalized live product version with its
|
|
33
42
|
exact matrix entry, so a moved or mismatched image cannot substantiate the CI
|
|
34
43
|
declaration. SQLite's optional Transformation Workflow retains its narrower
|
|
@@ -102,6 +111,51 @@ implemented openstatspec.frontends.spss package. Stata and SAS remain empty
|
|
|
102
111
|
source-tree placeholders and must expose no compiler, apply API, CLI choice,
|
|
103
112
|
capability claim, or implied support.
|
|
104
113
|
|
|
114
|
+
## Prior default Dolt write verification (before the 0.8.0 pin)
|
|
115
|
+
|
|
116
|
+
Local release verification used the exact 2.2.2 and 2.2.3 image digests in
|
|
117
|
+
`.github/workflows/ci.yml`, isolated ports 13482/13483, and disposable `/tmp`
|
|
118
|
+
database directories. With `PYTHONPATH=src:../pyspssio`,
|
|
119
|
+
`OPENSTATSPEC_SPECIFICATION_DIR=/tmp/oss-php-spec-cd8f198`, and each matching
|
|
120
|
+
`OPENSTATSPEC_DOLT_URL` / `OPENSTATSPEC_EXPECTED_DOLT_VERSION`:
|
|
121
|
+
|
|
122
|
+
- `../python/.venv/bin/python -m pytest`: **366 passed, 49 skipped per pin**.
|
|
123
|
+
- CI selection `-m 'services and not candidate_evidence'`: **7 passed,
|
|
124
|
+
41 skipped per pin**; other database services were not configured locally.
|
|
125
|
+
- Dolt 2.3.0 on port 13387: read-only export and unknown-version write rejection
|
|
126
|
+
checks passed (**19 passed**) using disposable fixture databases/users.
|
|
127
|
+
- `python -m compileall -q src tests` and `git diff --check` passed.
|
|
128
|
+
|
|
129
|
+
Live failures exposed and now cover two previously dormant write blockers:
|
|
130
|
+
owned table additions being misclassified as unrelated diffs, and Dolt retaining
|
|
131
|
+
`@@autocommit=1` despite the driver's setting. Writes now explicitly begin their
|
|
132
|
+
transaction. The candidate storage/identifier/column smoke probe also passed on
|
|
133
|
+
both pins; it does **not** establish full value/row/statement limit conformance.
|
|
134
|
+
|
|
135
|
+
## 0.8.0 local verification
|
|
136
|
+
|
|
137
|
+
Using `../python/.venv/bin/python`, `PYTHONPATH=src:../pyspssio`, and
|
|
138
|
+
`OPENSTATSPEC_SPECIFICATION_DIR=/tmp/oss-python-spec-v050-5dSTna` (an archive
|
|
139
|
+
of exact `864e84479f554b8ee250ffed44c4dfb963750d4a`):
|
|
140
|
+
|
|
141
|
+
- `python -m pytest -ra`: **381 passed, 49 skipped**, with
|
|
142
|
+
`OPENSTATSPEC_TEST_DOLT_ADMIN_URL=mysql+pymysql://root@127.0.0.1:13387/`
|
|
143
|
+
exercising live Dolt 2.3.0 through disposable SELECT-only users.
|
|
144
|
+
- Both immutable CI images, exact Dolt 2.2.2/2.2.3, bootstrapped with the
|
|
145
|
+
unchanged service user and separate global fixture admin on ports 13582/13583:
|
|
146
|
+
`python -m pytest -m 'services and not candidate_evidence'`: **7 passed,
|
|
147
|
+
41 skipped, 382 deselected per pin**; explicit
|
|
148
|
+
`python -m pytest tests/test_read_only_export.py`: **33 passed per pin**.
|
|
149
|
+
- `python -m compileall -q src tests`, `git diff --check`, wheel/sdist build,
|
|
150
|
+
and `python -m twine check /tmp/oss-python-v080-dist/*` passed.
|
|
151
|
+
- A clean wheel install resolved the required engine from PyPI. Isolated
|
|
152
|
+
imports came only from the smoke environment's `site-packages`; installed
|
|
153
|
+
capabilities reported adapter 0.8.0, the selected policy, released v0.5.0
|
|
154
|
+
provenance, and exactly 2.2.2/2.2.3 for default Dolt writes.
|
|
155
|
+
|
|
156
|
+
Other database services were not configured locally. This is local evidence,
|
|
157
|
+
not a claim that the updated remote CI or release publication has completed.
|
|
158
|
+
|
|
105
159
|
## Maintainer checks before tagging
|
|
106
160
|
|
|
107
161
|
1. Publish the pinned `openstatspec-pyspssio==0.5.1.post2` engine distribution
|
|
@@ -110,14 +164,28 @@ capability claim, or implied support.
|
|
|
110
164
|
2. Run `python -m pytest -m "not services"`.
|
|
111
165
|
3. Confirm the GitHub Actions matrix is green for exact PostgreSQL 17.10/18.4,
|
|
112
166
|
MySQL 8.4.11/9.7.2, MariaDB 11.4.12/11.8.8/12.3.2, and exact Dolt
|
|
113
|
-
2.2.2/2.2.3 service evidence from the immutable image pins in CI.
|
|
167
|
+
2.2.2/2.2.3 service evidence from the immutable image pins in CI. The Dolt
|
|
168
|
+
jobs must perform default import/validate/SAV+ZSAV export, in-place recode
|
|
169
|
+
and labels with unchanged dataset/table counts and HEAD, injected data,
|
|
170
|
+
catalog, and audit rollback checks, and failed-import cleanup. Release/CI
|
|
171
|
+
owns this evidence, not per-user runtime declaration files. Candidate limit
|
|
172
|
+
probes remain non-claiming and separate from these write gates.
|
|
173
|
+
Each Dolt job must also run `python -m pytest tests/test_read_only_export.py`
|
|
174
|
+
explicitly, outside the `services` marker filter. Bootstrap a separate
|
|
175
|
+
`openstatspec_test_admin` on the isolated CI server with global database/user
|
|
176
|
+
creation and grant privileges, and set `OPENSTATSPEC_TEST_DOLT_ADMIN_URL`.
|
|
177
|
+
The fixture creates its own database and SELECT-only reader and removes
|
|
178
|
+
both afterward; the normal service user remains unchanged.
|
|
114
179
|
4. Build with `python -m build` and install the generated wheel in a clean
|
|
115
|
-
environment.
|
|
180
|
+
environment, resolving `openstatspec-pyspssio==0.5.1.post2` from PyPI.
|
|
181
|
+
Run the installed CLI outside the source checkout with `PYTHONPATH` unset;
|
|
182
|
+
verify adapter version `0.8.0` and the selected database I/O policy.
|
|
116
183
|
5. Confirm `openstatspec capabilities` reflects the intended support boundary.
|
|
117
184
|
6. Confirm CI, release fixtures, and capabilities use the published OpenStatSpec
|
|
118
|
-
specification `v0.
|
|
119
|
-
`
|
|
120
|
-
`specification_status=
|
|
185
|
+
specification `v0.5.0` at exact commit
|
|
186
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a`, publish
|
|
187
|
+
`specification_status=released`, and set `specification_release` to `v0.5.0`.
|
|
188
|
+
Use an exact checkout via `OPENSTATSPEC_SPECIFICATION_DIR` for local tests.
|
|
121
189
|
7. Review this document, the README, and CHANGELOG for accurate scope.
|
|
122
190
|
|
|
123
191
|
The tag-triggered release workflow repeats the non-service test suite, builds
|
|
@@ -49,7 +49,7 @@ equivalence of supported values, order, and dictionary metadata.
|
|
|
49
49
|
|
|
50
50
|
The `openstatspec capabilities` command and the
|
|
51
51
|
`openstatspec.capability_matrix()` function are the machine-readable declaration
|
|
52
|
-
of this boundary. It records the pinned source commit and installed engine version, and the adapter stores the same identity in
|
|
52
|
+
of this boundary. It records the pinned source commit and installed engine version, and the adapter stores the same identity in import operation records. Export is database-read-only: no operation, fidelity, recovery, or Dolt-history records are written, even on failure. Loss diagnostics are returned to the caller. Dolt export identifies the server and validates the catalog and data without requiring write-conformance declarations; write entry points retain that requirement. The matrix deliberately distinguishes a supported feature from a feature that the underlying engine cannot observe or write faithfully.
|
|
53
53
|
|
|
54
54
|
| SPSS semantic | Pinned pyspssio status | Behaviour |
|
|
55
55
|
| --- | --- | --- |
|
|
@@ -2,15 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
### v0.5.0 (prepared; not yet published)
|
|
6
|
+
|
|
7
|
+
- Add normative optional `openstatspec-database-io-v1`, explicitly selected by
|
|
8
|
+
capability field `database_io_policy`. Reads, validation and export perform
|
|
9
|
+
no database writes, including audit, temporary DDL and failure paths; export
|
|
10
|
+
loss diagnostics are returned while safe file publication remains required.
|
|
11
|
+
- Permit default Dolt writes through packaged exact tested 2.2.2/2.2.3 policy
|
|
12
|
+
backed by adapter release CI, with no runtime user declaration/evidence files.
|
|
13
|
+
External declarations and their unchanged validator remain an optional
|
|
14
|
+
advanced override. Identity, limits, atomicity, security and branch/HEAD
|
|
15
|
+
checks remain mandatory; unknown or untested versions fail closed.
|
|
16
|
+
- Preserve unselected adapters' old requirements, SAV 1.0 source semantics,
|
|
17
|
+
catalog/data/metadata schema and fixtures, and all canonical plan, frontend
|
|
18
|
+
and SQL binding contracts. This pre-1.0 minor release adds an independently
|
|
19
|
+
selected policy; it does not silently revise an existing profile.
|
|
20
|
+
- Keep the separately released `openstatspec-specification` companion package
|
|
21
|
+
at `0.1.0`. No adapter conformance or package release is asserted here.
|
|
22
|
+
|
|
23
|
+
## v0.4.1 - 2026-08-21
|
|
24
|
+
|
|
25
|
+
OpenStatSpec `v0.4.1` is a documentation and release-bookkeeping patch for
|
|
26
|
+
the stable `v0.4.0` specification. It changes no normative contract or
|
|
27
|
+
conformance artifact.
|
|
28
|
+
|
|
29
|
+
- Aligned the SPSS frontend roadmap with the published Frontend 0.3 profile.
|
|
30
|
+
- Corrected release metadata fixtures and validation coverage for the public
|
|
31
|
+
README and current release status.
|
|
32
|
+
|
|
33
|
+
## v0.4.0 - 2026-08-21
|
|
34
|
+
|
|
35
|
+
OpenStatSpec `v0.4.0` publishes SPSS Syntax Frontend 0.3 as a stable optional
|
|
36
|
+
profile. The release tag is the immutable specification identity for this
|
|
37
|
+
release.
|
|
38
|
+
|
|
39
|
+
- Added comments, existing-variable `TO`, grouped supported forms, predicate
|
|
40
|
+
aliases and bounded `NOT`, open recode ranges, and additive value labels.
|
|
41
|
+
- Frontend 0.3 emits only immutable Plan 0.1/0.2 objects and adds no SQL
|
|
42
|
+
binding operation.
|
|
43
|
+
- Repository validation now covers all Plan/Frontend/Binding schemas,
|
|
44
|
+
manifests, references, inherited cases, and canonical hashes.
|
|
45
|
+
- Adapter claims remain downstream and separately gated; this release does not
|
|
46
|
+
assert PHP or Python implementation conformance.
|
|
6
47
|
|
|
7
48
|
## v0.3.0 - 2026-08-12
|
|
8
49
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
identify it with `specification_status: release_candidate`,
|
|
12
|
-
`specification_release: null`, and the exact immutable specification commit.
|
|
13
|
-
The entries below become the stable release only when that tag exists.
|
|
50
|
+
OpenStatSpec `v0.3.0` is the stable public specification release at immutable
|
|
51
|
+
specification commit `cd8f198c68b849eb8ed018a894670a0904c2181d`.
|
|
14
52
|
|
|
15
53
|
- Added backward-compatible Transformation Plan and SPSS Syntax Frontend 0.2
|
|
16
54
|
contracts for sequential numeric `COMPUTE` and conditional `IF`, bounded
|
|
@@ -13,6 +13,19 @@ MySQL 8.4.x/9.7.x, MariaDB 11.4.x/11.8.x/12.3.x and PostgreSQL 17.x/18.x
|
|
|
13
13
|
series while requiring exact patch-version CI evidence. Microsoft SQL Server
|
|
14
14
|
remains an explicitly unsupported [future dialect](docs/mssql-dialect-roadmap.md).
|
|
15
15
|
|
|
16
|
+
## Optional database I/O execution policy
|
|
17
|
+
|
|
18
|
+
Prepared for specification `v0.5.0`, the normative optional
|
|
19
|
+
[Database I/O Execution Policy v1](docs/database-io-policy-v1.md) is explicitly
|
|
20
|
+
selected with `database_io_policy: "openstatspec-database-io-v1"`.
|
|
21
|
+
It requires database-read-only reads, validation and exports (including errors
|
|
22
|
+
and loss diagnostics), and permits default Dolt writes on packaged exact tested
|
|
23
|
+
2.2.2/2.2.3 policy backed by adapter release CI, without user evidence files.
|
|
24
|
+
External declarations remain an optional advanced override. Unselected adapters
|
|
25
|
+
retain existing requirements; SAV 1.0 semantics, schemas, fixtures and canonical
|
|
26
|
+
Plan/Frontend/Binding contracts are unchanged. Publication and downstream
|
|
27
|
+
adapter support remain separately gated.
|
|
28
|
+
|
|
16
29
|
## Core contract
|
|
17
30
|
|
|
18
31
|
- One source dataset maps to exactly one dedicated SQL data table.
|
|
@@ -37,10 +50,11 @@ permits a transformation to mutate a core import.
|
|
|
37
50
|
That separate derived-data profile is not used by the SPSS-like in-place
|
|
38
51
|
frontend below.
|
|
39
52
|
|
|
40
|
-
The
|
|
41
|
-
adds sequential bounded numeric assignment and conditional assignment to the
|
|
53
|
+
The released [Transformation Plan Profile 0.2](docs/transformation-plan-profile-0.2.md)
|
|
54
|
+
was released in OpenStatSpec `v0.3.0` and adds sequential bounded numeric assignment and conditional assignment to the
|
|
42
55
|
unchanged 0.1 operations. The
|
|
43
|
-
[SPSS Syntax Frontend Profile 0.2](docs/spss-syntax-frontend-profile-0.2.md)
|
|
56
|
+
[released SPSS Syntax Frontend Profile 0.2](docs/spss-syntax-frontend-profile-0.2.md)
|
|
57
|
+
was released in OpenStatSpec `v0.3.0` and
|
|
44
58
|
lowers `COMPUTE`, `IF`, `FORMATS`, `VARIABLE LEVEL`, and `EXECUTE`
|
|
45
59
|
alongside the 0.1 `RECODE`, `VARIABLE LABELS`, and `VALUE LABELS` subset.
|
|
46
60
|
Programs using only the 0.1 subset retain exact 0.1 plan identity and hash. The
|
|
@@ -50,6 +64,10 @@ creates no derived dataset, data copy, or OpenStatSpec undo layer; Dolt-specific
|
|
|
50
64
|
history and commits remain Dolt's. MySQL, MariaDB, and Dolt require a new target
|
|
51
65
|
to be provisioned separately before an in-place transformation apply.
|
|
52
66
|
|
|
67
|
+
The released [SPSS Syntax Frontend Profile 0.3](docs/spss-syntax-frontend-profile-0.3.md)
|
|
68
|
+
was published in OpenStatSpec `v0.4.0`. It adds syntax-only expansion over the
|
|
69
|
+
released Plan 0.1/0.2 contracts and does not change SQL binding behavior.
|
|
70
|
+
|
|
53
71
|
## Repository layout
|
|
54
72
|
|
|
55
73
|
- `sql/server-version-policy.md` — server release-series claims and exact reference-CI targets.
|
|
@@ -72,8 +90,18 @@ to be provisioned separately before an in-place transformation apply.
|
|
|
72
90
|
- `transformation/plan-0.1.schema.json` — canonical transformation-plan schema.
|
|
73
91
|
- `sql/transformation-plan-profile-schema.sql` — compact in-place apply audit;
|
|
74
92
|
it is not a dataset-version catalog.
|
|
75
|
-
- `
|
|
76
|
-
`
|
|
93
|
+
- `docs/spss-syntax-frontend-profile-0.1.md`,
|
|
94
|
+
`docs/spss-syntax-frontend-profile-0.2.md`, and
|
|
95
|
+
`docs/spss-syntax-frontend-profile-0.3.md` — bounded syntax frontend
|
|
96
|
+
profiles and their contract boundaries.
|
|
97
|
+
- `transformation/spss-syntax-frontend-0.1.schema.json`,
|
|
98
|
+
`transformation/spss-syntax-frontend-0.2.schema.json`, and
|
|
99
|
+
`transformation/spss-syntax-frontend-0.3.schema.json` — frontend request
|
|
100
|
+
schemas.
|
|
101
|
+
- `conformance/transformation-plan-0.2.json`,
|
|
102
|
+
`conformance/spss-syntax-frontend-0.1.json`,
|
|
103
|
+
`conformance/spss-syntax-frontend-0.2.json`, and
|
|
104
|
+
`conformance/spss-syntax-frontend-0.3.json` — additive plan and frontend
|
|
77
105
|
conformance cases with independent golden hashes; `conformance/in-place-transformation-0.2.json`
|
|
78
106
|
fixes the same-dataset/same-table execution invariants and the additional
|
|
79
107
|
controlled Dolt context. The 0.1 schemas and fixtures remain unchanged.
|
|
@@ -12,6 +12,27 @@ Package tags use the `package-vX.Y.Z` convention; specification tags use
|
|
|
12
12
|
`vX.Y.Z`. A specification tag MUST NOT publish the package, and a package tag
|
|
13
13
|
MUST match the version declared in `pyproject.toml`.
|
|
14
14
|
|
|
15
|
+
## Prepared v0.5.0 scope
|
|
16
|
+
|
|
17
|
+
This release prepares the normative optional
|
|
18
|
+
[Database I/O Execution Policy v1](docs/database-io-policy-v1.md). It is not
|
|
19
|
+
published until the gates below complete. Release notes MUST identify explicit
|
|
20
|
+
`database_io_policy` selection, database-read-only export with returned loss
|
|
21
|
+
diagnostics, and packaged exact tested Dolt 2.2.2/2.2.3 write policy with optional
|
|
22
|
+
external evidence. Existing unselected-profile requirements, SAV 1.0 semantics
|
|
23
|
+
and fixtures, schemas, and canonical Plan/Frontend/Binding artifacts are unchanged.
|
|
24
|
+
This is a pre-1.0 minor optional addition under [VERSIONING](VERSIONING.md).
|
|
25
|
+
|
|
26
|
+
Run `python -m pytest` and `python tools/validate_repository.py` at the selected
|
|
27
|
+
commit. Adapter package release CI supplies real exact-version write and
|
|
28
|
+
read-only/failure-path evidence under the new policy; neither fabricated
|
|
29
|
+
repository declarations nor user-supplied evidence files are release substitutes.
|
|
30
|
+
Python `v0.8.0` and PHP `v0.7.0` are downstream adapter release targets, not
|
|
31
|
+
conformance claims made by this specification. Their pins and publication are
|
|
32
|
+
managed separately. The companion `openstatspec-specification` distribution
|
|
33
|
+
remains `0.1.0`: no package API, schema or validator contract change requires a
|
|
34
|
+
package release for this documentation policy addition.
|
|
35
|
+
|
|
15
36
|
## Before preparing a release
|
|
16
37
|
|
|
17
38
|
- Choose an exact reviewed commit on the appropriate branch and record its
|