openstatspec 0.8.0__tar.gz → 0.9.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.8.0 → openstatspec-0.9.0}/CHANGELOG.md +69 -2
- {openstatspec-0.8.0 → openstatspec-0.9.0}/PKG-INFO +14 -4
- {openstatspec-0.8.0 → openstatspec-0.9.0}/README.md +13 -3
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/release-readiness.md +98 -8
- openstatspec-0.9.0/docs/transformations.md +460 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/pyproject.toml +1 -1
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/__init__.py +2 -2
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/api.py +3 -1
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/spss/__init__.py +4 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/spss/binding.py +64 -11
- openstatspec-0.9.0/src/openstatspec/frontends/spss/compiler.py +137 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/spss/execution.py +3 -1
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/spss/syntax.py +138 -44
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/spss/sav.py +12 -10
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/inplace_transform.py +76 -17
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/wide.py +181 -151
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/workflow.py +79 -79
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/transform/plan.py +14 -6
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/transform/schema.py +4 -2
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/transform/validation.py +32 -41
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_atomic_import.py +117 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_cli.py +1 -1
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_conditional_inplace_transform.py +95 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_dolt_conformance.py +9 -14
- openstatspec-0.9.0/tests/test_frontend_v03.py +227 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_inplace_transform.py +558 -13
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_read_only_export.py +211 -7
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_sql_services.py +232 -1
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_sql_workflow.py +50 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_transform_frontend.py +146 -12
- openstatspec-0.8.0/docs/transformations.md +0 -219
- openstatspec-0.8.0/src/openstatspec/frontends/spss/compiler.py +0 -64
- {openstatspec-0.8.0 → openstatspec-0.9.0}/.github/verify_release_ref.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/.github/workflows/ci.yml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/.github/workflows/release.yml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/.gitignore +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/THIRD_PARTY_NOTICES.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/architecture.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/in-place-transformation.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/pyspssio-spike.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/sav-profile.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/sql-transformation-workflow.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/superpowers/plans/2026-08-12-python-v071-stable-pin.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/docs/superpowers/specs/2026-08-12-python-stable-specification-pin-design.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/.github/workflows/ci.yml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/.github/workflows/release.yml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/.gitignore +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/CHANGELOG.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/CONTRIBUTING.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/README.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/RELEASING.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/ROADMAP.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/VERSIONING.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/LICENSE.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/README.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/core-numeric-string.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/dictionary-and-display.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/generate-fixtures.sps +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/long-utf8-and-attributes.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/missing-rules.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/sets.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/weight-and-string-mr.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/fixtures/zsav-compressed.zsav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/in-place-transformation-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/in-place-transformation-0.2.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/spss-sav-zsav-1.0.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/spss-syntax-frontend-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/spss-syntax-frontend-0.2.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/spss-syntax-frontend-0.3.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/sql-transformation-workflow-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/transformation-plan-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/conformance/transformation-plan-0.2.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/architecture.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/database-io-policy-v1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/implementation-profiles/python-pyspssio-0.5.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/mssql-dialect-roadmap.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/spss-frontend-roadmap.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/spss-profile.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/spss-sav-zsav-profile-1.0.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.3.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/sql-transformation-workflow-profile-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/superpowers/plans/2026-08-12-roadmap-v030-bookkeeping.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/superpowers/plans/2026-08-21-spss-frontend-03.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/superpowers/specs/2026-08-21-spss-frontend-expansion-design.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/transformation-plan-profile-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/transformation-plan-profile-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/transformation-plan-sql-binding-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/docs/transformation-plan-sql-binding-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/examples/basic-spss-mapping.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/examples/spss-syntax-transformation-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/examples/spss-syntax-transformation-0.3.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/examples/spss-syntax-transformation.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/examples/sql-transformation-workflow.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/pyproject.toml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/dialect-profile-baseline.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/dialect-profiles.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/dolt-adapter-declaration-schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/dolt-adapter-declarations/README.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/profile-capabilities.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/schema-outline.sql +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/server-version-policy.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/transformation-plan-profile-schema.sql +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/sql/transformation-workflow-profile-schema.sql +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/src/openstatspec_specification/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/src/openstatspec_specification/artifacts.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/src/openstatspec_specification/dolt.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/tests/test_contract_artifacts.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/tests/test_dolt_declarations.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/tools/validate_repository.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/transformation/plan-0.1.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/transformation/plan-0.2.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/transformation/spss-syntax-frontend-0.1.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/transformation/spss-syntax-frontend-0.2.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification/transformation/spss-syntax-frontend-0.3.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/.github/workflows/ci.yml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/.github/workflows/publish.yml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/.gitignore +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/CHANGELOG.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/CONTRIBUTING.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/README.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/RELEASING.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/ROADMAP.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/VERSIONING.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/LICENSE.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/README.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/core-numeric-string.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/dictionary-and-display.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/generate-fixtures.sps +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/long-utf8-and-attributes.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/missing-rules.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/sets.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/weight-and-string-mr.sav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/fixtures/zsav-compressed.zsav +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/in-place-transformation-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/in-place-transformation-0.2.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/spss-sav-zsav-1.0.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/spss-syntax-frontend-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/spss-syntax-frontend-0.2.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/sql-transformation-workflow-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/transformation-plan-0.1.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/conformance/transformation-plan-0.2.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/architecture.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/implementation-profiles/python-pyspssio-0.5.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/mssql-dialect-roadmap.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/spss-profile.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/spss-sav-zsav-profile-1.0.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/spss-syntax-frontend-profile-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/spss-syntax-frontend-profile-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/sql-transformation-workflow-profile-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/transformation-plan-profile-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/transformation-plan-profile-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/transformation-plan-sql-binding-0.1.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/docs/transformation-plan-sql-binding-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/examples/basic-spss-mapping.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/examples/spss-syntax-transformation-0.2.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/examples/spss-syntax-transformation.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/examples/sql-transformation-workflow.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/pyproject.toml +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/dialect-profile-baseline.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/dialect-profiles.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/dolt-adapter-declaration-schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/dolt-adapter-declarations/README.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/profile-capabilities.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/schema-outline.sql +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/server-version-policy.md +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/transformation-plan-profile-schema.sql +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/sql/transformation-workflow-profile-schema.sql +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/src/openstatspec_specification/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/src/openstatspec_specification/dolt.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/tests/test_dolt_declarations.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/tools/validate_repository.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/transformation/plan-0.1.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/transformation/plan-0.2.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/transformation/spss-syntax-frontend-0.1.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/openstatspec-specification-package/transformation/spss-syntax-frontend-0.2.schema.json +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/cli.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/core/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/core/results.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/sas/.gitkeep +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/frontends/stata/.gitkeep +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/spss/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/spss/dictionary.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/spss/raw_dictionary.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/capabilities.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/catalog_api.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/catalog_verification.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/database_urls.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/dolt_conformance.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/normative.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/sql/profiles.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/transform/__init__.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/src/openstatspec/transform/errors.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/conformance.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_attribute_catalog.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_catalog_lifecycle.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_catalog_persistence_review.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_document_round_trip.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_loss_reports.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_normative_catalog.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_official_conformance.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_pyspssio_catalog_authority.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_release_ref.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_review_transaction_boundary.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_sav_sqlite.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_spss_catalog_preflight.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_sql_profiles.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_strict_catalog_review.py +0 -0
- {openstatspec-0.8.0 → openstatspec-0.9.0}/tests/test_vls_compatible_names.py +0 -0
|
@@ -2,9 +2,76 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this reference implementation are documented here.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 0.9.0 - 2026-09-10
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
This minor release adds the explicitly selected optional official SPSS Frontend
|
|
8
|
+
0.3 and changes emitted Python schema-extension identifiers. Older readers cannot
|
|
9
|
+
load the new IDs; upgrade consumers before using new compiler output.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Implement explicitly selected official SPSS Frontend 0.3 over unchanged
|
|
14
|
+
Plan 0.1/0.2 through the shared parser/binder, with a strict
|
|
15
|
+
`compile_spss_request` boundary and opt-in live apply provenance. Support
|
|
16
|
+
comments, dictionary-order `TO`, grouped commands, finite open RECODE ranges,
|
|
17
|
+
additive ordered typed labels, inequality aliases, and canonical NOT lowering.
|
|
18
|
+
Precedence is comparisons → NOT → AND → OR; parentheses override it.
|
|
19
|
+
Tests cover all 90 effective normative cases plus request boundaries and
|
|
20
|
+
in-place SQLite identity/metadata/audit/no-artifact checks. Default APIs and
|
|
21
|
+
Python extension support/rejections remain unchanged.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Namespace new Python schema-change plans and SPSS output as
|
|
26
|
+
`openstatspec-python-schema-change-plan-v0.1` and
|
|
27
|
+
`openstatspec-python-schema-change-spss-v0.1`, retaining exported constant names.
|
|
28
|
+
The former `openstatspec-transformation-plan-v0.3` remains accepted as a
|
|
29
|
+
legacy Python extension with unchanged semantics, canonical JSON, and hashes;
|
|
30
|
+
stored audits are not migrated. New compilation changes schema-plan hashes.
|
|
31
|
+
- Clarify that specification `v0.5.0` has no official Plan 0.3. Its syntax-only
|
|
32
|
+
Frontend 0.3 over Plan 0.1/0.2 is separate from Python schema extensions.
|
|
33
|
+
Legacy acceptance and Python extension tests do not claim official conformance.
|
|
34
|
+
See [compatibility and migration](docs/transformations.md#contract-ownership-and-legacy-compatibility).
|
|
35
|
+
|
|
36
|
+
The specification remains pinned to released `v0.5.0` at exact commit
|
|
37
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a`; the required SPSS codec remains
|
|
38
|
+
`openstatspec-pyspssio==0.5.1.post2`. No catalog migration, dependency change,
|
|
39
|
+
new database support, or optional Transformation Workflow 0.3 implementation
|
|
40
|
+
is included.
|
|
41
|
+
|
|
42
|
+
## 0.8.1 - 2026-09-10
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- Preserve other variables' shared value labels when replacing one variable's
|
|
47
|
+
labels. Reject deletion of variables referenced by published derived lineage
|
|
48
|
+
before any plan mutation, with `variable_has_dependents`.
|
|
49
|
+
- Enable and verify SQLite foreign keys on in-place apply connections.
|
|
50
|
+
- Read export values, dictionary metadata, import fidelity events and validation
|
|
51
|
+
reflection from one native database snapshot; close it before writing SAV/ZSAV.
|
|
52
|
+
- Scope transformation label reads to the target variable's dataset. Unrelated
|
|
53
|
+
malformed labels no longer fail the operation; malformed target-linked labels
|
|
54
|
+
still fail, and shared/foreign-owned linked label sets remain supported.
|
|
55
|
+
|
|
56
|
+
### Performance
|
|
57
|
+
|
|
58
|
+
- Remove quadratic suffix/name scans from canonical-plan binding and reuse one
|
|
59
|
+
canonical plan encoding/hash per public canonical or SPSS apply.
|
|
60
|
+
- Remove redundant full case-row dictionary collections from database reads and
|
|
61
|
+
imports. Results remain buffered; this is not a streaming API.
|
|
62
|
+
- Avoid the discarded core relation hash during SQLite workflow registration,
|
|
63
|
+
retaining physical projection validation and derived-parent integrity checks.
|
|
64
|
+
Execution-time hashes remain required; their loop avoids a redundant tuple copy.
|
|
65
|
+
|
|
66
|
+
### Documentation and cleanup
|
|
67
|
+
|
|
68
|
+
- Document numeric create/replace, RECODE and separately provisioned target
|
|
69
|
+
recipes, with bounded local SQLite measurements in the transformations manual.
|
|
70
|
+
- Remove an unreachable view-creation branch; workflow output remains
|
|
71
|
+
materialized-only.
|
|
72
|
+
|
|
73
|
+
The specification pin, engine dependency, database/profile claims, catalog schema,
|
|
74
|
+
public call signatures and Dolt-owned versioning policy remain unchanged.
|
|
8
75
|
|
|
9
76
|
## 0.8.0 - 2026-09-07
|
|
10
77
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: openstatspec
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Reference adapter for the OpenStatSpec relational contract
|
|
5
5
|
Author: OpenStatSpec
|
|
6
6
|
License: Apache-2.0
|
|
@@ -23,10 +23,11 @@ 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.
|
|
26
|
+
Python 0.9.0 pins released specification `v0.5.0` at
|
|
27
27
|
`864e84479f554b8ee250ffed44c4dfb963750d4a` and selects SAV/ZSAV 1.0 with
|
|
28
|
-
`database_io_policy=openstatspec-database-io-v1`.
|
|
29
|
-
|
|
28
|
+
`database_io_policy=openstatspec-database-io-v1`. It implements the explicitly
|
|
29
|
+
selected optional official SPSS Frontend 0.3 over unchanged Plan 0.1/0.2, not
|
|
30
|
+
the separate optional Transformation Workflow 0.3 profile.
|
|
30
31
|
|
|
31
32
|
## Boundaries
|
|
32
33
|
|
|
@@ -105,6 +106,15 @@ target before assignment. Dolt requires the caller's exact clean branch/HEAD,
|
|
|
105
106
|
leaves success as an inspectable working-set diff, and never calls
|
|
106
107
|
`DOLT_COMMIT`.
|
|
107
108
|
|
|
109
|
+
Explicitly select official Frontend 0.3 with `compile_spss_request`, or pass
|
|
110
|
+
`frontend_contract="openstatspec-spss-syntax-frontend-v0.3"` to the typed compiler
|
|
111
|
+
or in-place API. Default APIs and the CLI retain their compatibility behavior;
|
|
112
|
+
`STRING` and `DELETE VARIABLES` remain Python extensions, not official 0.3.
|
|
113
|
+
New schema-changing output uses Python-owned IDs that older readers cannot load.
|
|
114
|
+
Upgrade consumers first; legacy plans retain their canonical JSON and hashes,
|
|
115
|
+
and stored audits are not migrated. Recompiling schema-changing syntax changes
|
|
116
|
+
its plan hash. See [compatibility and migration](docs/transformations.md#contract-ownership-and-legacy-compatibility).
|
|
117
|
+
|
|
108
118
|
See the [dataset transformations manual](docs/transformations.md) for schema
|
|
109
119
|
installation, Python and CLI surfaces, database invariants, audit provenance,
|
|
110
120
|
package layout, and extension guidance. Stata and SAS are unimplemented
|
|
@@ -4,10 +4,11 @@ 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.
|
|
7
|
+
Python 0.9.0 pins released specification `v0.5.0` at
|
|
8
8
|
`864e84479f554b8ee250ffed44c4dfb963750d4a` and selects SAV/ZSAV 1.0 with
|
|
9
|
-
`database_io_policy=openstatspec-database-io-v1`.
|
|
10
|
-
|
|
9
|
+
`database_io_policy=openstatspec-database-io-v1`. It implements the explicitly
|
|
10
|
+
selected optional official SPSS Frontend 0.3 over unchanged Plan 0.1/0.2, not
|
|
11
|
+
the separate optional Transformation Workflow 0.3 profile.
|
|
11
12
|
|
|
12
13
|
## Boundaries
|
|
13
14
|
|
|
@@ -86,6 +87,15 @@ target before assignment. Dolt requires the caller's exact clean branch/HEAD,
|
|
|
86
87
|
leaves success as an inspectable working-set diff, and never calls
|
|
87
88
|
`DOLT_COMMIT`.
|
|
88
89
|
|
|
90
|
+
Explicitly select official Frontend 0.3 with `compile_spss_request`, or pass
|
|
91
|
+
`frontend_contract="openstatspec-spss-syntax-frontend-v0.3"` to the typed compiler
|
|
92
|
+
or in-place API. Default APIs and the CLI retain their compatibility behavior;
|
|
93
|
+
`STRING` and `DELETE VARIABLES` remain Python extensions, not official 0.3.
|
|
94
|
+
New schema-changing output uses Python-owned IDs that older readers cannot load.
|
|
95
|
+
Upgrade consumers first; legacy plans retain their canonical JSON and hashes,
|
|
96
|
+
and stored audits are not migrated. Recompiling schema-changing syntax changes
|
|
97
|
+
its plan hash. See [compatibility and migration](docs/transformations.md#contract-ownership-and-legacy-compatibility).
|
|
98
|
+
|
|
89
99
|
See the [dataset transformations manual](docs/transformations.md) for schema
|
|
90
100
|
installation, Python and CLI surfaces, database invariants, audit provenance,
|
|
91
101
|
package layout, and extension guidance. Stata and SAS are unimplemented
|
|
@@ -1,8 +1,23 @@
|
|
|
1
|
-
# 0.
|
|
1
|
+
# 0.9.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
|
+
## Minor release scope
|
|
7
|
+
|
|
8
|
+
Version 0.9.0, dated 2026-09-10, adds explicitly selected official SPSS Frontend
|
|
9
|
+
0.3 over unchanged Plan 0.1/0.2 and namespaces new Python schema-extension
|
|
10
|
+
output, as described in the [release notes](../CHANGELOG.md). The minor bump
|
|
11
|
+
reflects the optional frontend and old-reader incompatibility: upgrade consumers
|
|
12
|
+
before emitting the new Python IDs. Legacy plans retain their canonical JSON,
|
|
13
|
+
hashes and semantics; stored audits are not migrated. Recompiling schema-changing
|
|
14
|
+
syntax changes its plan hash. See [compatibility and migration](transformations.md#contract-ownership-and-legacy-compatibility).
|
|
15
|
+
There is no catalog migration, dependency change, new database support or
|
|
16
|
+
specification pin update. The required codec remains
|
|
17
|
+
`openstatspec-pyspssio==0.5.1.post2`.
|
|
18
|
+
The local 0.8.0/0.8.1 evidence below is historical, not verification of 0.9.0.
|
|
19
|
+
Re-run the gates below on the exact selected 0.9.0 release commit.
|
|
20
|
+
|
|
6
21
|
The release selects SAV/ZSAV 1.0 with the optional Database I/O Execution
|
|
7
22
|
Policy `openstatspec-database-io-v1`. Reads and exports, including failures,
|
|
8
23
|
write no database audit records; export results omit `operation_id` and return
|
|
@@ -69,11 +84,24 @@ machine-readable loss report with the export result.
|
|
|
69
84
|
|
|
70
85
|
The canonical transformation core and SPSS syntax frontend are separate public
|
|
71
86
|
surfaces. A release must run the specification-owned canonical-plan and SPSS
|
|
72
|
-
frontend conformance fixtures,
|
|
73
|
-
|
|
87
|
+
frontend conformance fixtures, including `tests/test_frontend_v03.py` with all
|
|
88
|
+
90 effective official Frontend 0.3 cases (35 declared plus inherited cases with
|
|
89
|
+
published overrides/supersessions) from exact specification commit
|
|
90
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a`. Then exercise the generic plan apply
|
|
91
|
+
API, SPSS compatibility apply path, and explicitly selected official 0.3 apply.
|
|
92
|
+
Python schema-extension and legacy acceptance tests are separate compatibility
|
|
93
|
+
evidence, not official Plan 0.3 conformance; no official Plan 0.3 exists.
|
|
74
94
|
|
|
75
95
|
The gate must prove that:
|
|
76
96
|
|
|
97
|
+
- official Frontend 0.3 requests preserve exact Plan 0.1/0.2 objects and hashes,
|
|
98
|
+
source hashes, diagnostics and declared metadata across all 90 effective cases;
|
|
99
|
+
- strict request boundaries reject invalid input, default API/CLI support and
|
|
100
|
+
rejections remain unchanged, and official 0.3 rejects Python schema extensions;
|
|
101
|
+
- explicit official 0.3 SQLite apply preserves data/metadata semantics, dataset
|
|
102
|
+
and table identity, audit provenance and the no-copy/no-history boundary;
|
|
103
|
+
- new Python schema-extension IDs are emitted while legacy plans preserve their
|
|
104
|
+
canonical JSON, hashes and supplied identifiers without rewriting audits;
|
|
77
105
|
- a TransformationPlan object and its strict JSON mapping produce the same
|
|
78
106
|
plan hash and in-place result;
|
|
79
107
|
- the exact bounded `COMPUTE`/`IF` program compiles to all seven ordered
|
|
@@ -104,7 +132,7 @@ The gate must prove that:
|
|
|
104
132
|
neither HEAD nor branch and never commits or resets; state is rechecked after
|
|
105
133
|
the dataset lock and success must leave an inspectable working-set diff;
|
|
106
134
|
other supported SQL connections remain allowed; and
|
|
107
|
-
- string comparisons and v0.2 string assignments fail
|
|
135
|
+
- string comparisons and v0.2 string assignments remain fail-closed.
|
|
108
136
|
|
|
109
137
|
The built wheel must contain the generic openstatspec.transform modules and the
|
|
110
138
|
implemented openstatspec.frontends.spss package. Stata and SAS remain empty
|
|
@@ -156,12 +184,60 @@ of exact `864e84479f554b8ee250ffed44c4dfb963750d4a`):
|
|
|
156
184
|
Other database services were not configured locally. This is local evidence,
|
|
157
185
|
not a claim that the updated remote CI or release publication has completed.
|
|
158
186
|
|
|
159
|
-
##
|
|
187
|
+
## 0.8.1 local preparation verification
|
|
188
|
+
|
|
189
|
+
On Python 3.13.2 with SQLAlchemy 2.0.52 and the exact v0.5.0 specification
|
|
190
|
+
checkout, without configured database services:
|
|
191
|
+
|
|
192
|
+
- `python -m pytest -p no:cacheprovider -m 'not services'`: **414 passed,
|
|
193
|
+
9 skipped, 53 deselected**. The release-ref guard tests also passed (**5**).
|
|
194
|
+
- `compileall`, `git diff --check`, wheel/sdist build and `twine check` passed.
|
|
195
|
+
- A clean wheel install outside the checkout resolved the required engine
|
|
196
|
+
`openstatspec-pyspssio==0.5.1.post2` from PyPI. Installed capabilities reported
|
|
197
|
+
0.8.1, released specification v0.5.0 at the expected commit, and the selected
|
|
198
|
+
database I/O policy. Core, SPSS frontend and legacy compiler re-exports loaded
|
|
199
|
+
from `site-packages` without a source-path override.
|
|
200
|
+
|
|
201
|
+
This is local candidate evidence, not final release-commit service CI or
|
|
202
|
+
publication evidence. No v0.8.1 tag or registry upload was made by these checks.
|
|
203
|
+
|
|
204
|
+
## 0.9.0 local preparation verification
|
|
205
|
+
|
|
206
|
+
Using `../python-release-081/.venv/bin/python` (Python 3.13.2), with
|
|
207
|
+
`PYTHONPATH=src` and
|
|
208
|
+
`OPENSTATSPEC_SPECIFICATION_DIR=/tmp/openstatspec-alignment-spec` at exact
|
|
209
|
+
`864e84479f554b8ee250ffed44c4dfb963750d4a`:
|
|
210
|
+
|
|
211
|
+
- The updated capability version assertion failed first on 0.8.1, then passed
|
|
212
|
+
on 0.9.0. Focused capability, release-ref and `test_frontend_v03.py` checks:
|
|
213
|
+
**169 passed**, including all **90 effective** official cases.
|
|
214
|
+
- `python -m pytest -p no:cacheprovider -m 'not services' -ra`:
|
|
215
|
+
**590 passed, 9 skipped, 55 deselected**. The skips require a live Dolt admin;
|
|
216
|
+
no database services were configured for this run.
|
|
217
|
+
- `python -m compileall -q src tests .github/verify_release_ref.py` and
|
|
218
|
+
`git diff --check` passed.
|
|
219
|
+
- `python -m build --outdir /tmp/openstatspec-v090-yhklqZ/dist .` and
|
|
220
|
+
`python -m twine check /tmp/openstatspec-v090-yhklqZ/dist/*` passed for the
|
|
221
|
+
0.9.0 wheel and sdist.
|
|
222
|
+
- A fresh `/tmp/openstatspec-v090-yhklqZ/venv` installed that wheel with
|
|
223
|
+
dependencies from PyPI, including unchanged `openstatspec-pyspssio==0.5.1.post2`.
|
|
224
|
+
From `/tmp` with `PYTHONPATH` unset, CLI/API capabilities agreed on 0.9.0,
|
|
225
|
+
released v0.5.0 at the exact pin, and the database I/O policy. Core, frontend,
|
|
226
|
+
legacy compiler re-exports and codec imports came from `site-packages`.
|
|
227
|
+
An explicit official 0.3 comment/open-range RECODE request compiled to Plan
|
|
228
|
+
0.1 without a database connection.
|
|
229
|
+
|
|
230
|
+
This is local preparation evidence, not final release-commit service CI or
|
|
231
|
+
publication evidence. No push, PR, tag or publication was performed.
|
|
232
|
+
|
|
233
|
+
## Maintainer release checklist
|
|
160
234
|
|
|
161
235
|
1. Publish the pinned `openstatspec-pyspssio==0.5.1.post2` engine distribution
|
|
162
236
|
first and confirm that a clean environment can download it from PyPI. The
|
|
163
237
|
main package has no fallback SPSS engine.
|
|
164
|
-
2. Run `python -m pytest -m "not services"
|
|
238
|
+
2. Run `python -m pytest -m "not services"`, including the 90 effective official
|
|
239
|
+
Frontend 0.3 cases in `tests/test_frontend_v03.py` and existing canonical-plan,
|
|
240
|
+
frontend, legacy compatibility and in-place suites.
|
|
165
241
|
3. Confirm the GitHub Actions matrix is green for exact PostgreSQL 17.10/18.4,
|
|
166
242
|
MySQL 8.4.11/9.7.2, MariaDB 11.4.12/11.8.8/12.3.2, and exact Dolt
|
|
167
243
|
2.2.2/2.2.3 service evidence from the immutable image pins in CI. The Dolt
|
|
@@ -179,14 +255,28 @@ not a claim that the updated remote CI or release publication has completed.
|
|
|
179
255
|
4. Build with `python -m build` and install the generated wheel in a clean
|
|
180
256
|
environment, resolving `openstatspec-pyspssio==0.5.1.post2` from PyPI.
|
|
181
257
|
Run the installed CLI outside the source checkout with `PYTHONPATH` unset;
|
|
182
|
-
verify adapter version `0.
|
|
258
|
+
verify adapter version `0.9.0`, the selected database I/O policy, public and
|
|
259
|
+
legacy imports, and a simple explicitly selected official 0.3 compilation
|
|
260
|
+
without a database connection.
|
|
183
261
|
5. Confirm `openstatspec capabilities` reflects the intended support boundary.
|
|
184
262
|
6. Confirm CI, release fixtures, and capabilities use the published OpenStatSpec
|
|
185
263
|
specification `v0.5.0` at exact commit
|
|
186
264
|
`864e84479f554b8ee250ffed44c4dfb963750d4a`, publish
|
|
187
265
|
`specification_status=released`, and set `specification_release` to `v0.5.0`.
|
|
188
266
|
Use an exact checkout via `OPENSTATSPEC_SPECIFICATION_DIR` for local tests.
|
|
189
|
-
7. Review this document, the README, and CHANGELOG for accurate scope.
|
|
267
|
+
7. Review this document, the README, and CHANGELOG for accurate scope. Finalize
|
|
268
|
+
the 0.9.0 changelog date as 2026-09-10 before selecting the final release commit.
|
|
269
|
+
8. Confirm the exact release commit's CI matrix and package smoke passed, and
|
|
270
|
+
verify the protected `pypi` environment and Trusted Publishing setup before
|
|
271
|
+
pushing a new annotated/protected `v0.9.0` tag. A `v*` tag push starts the
|
|
272
|
+
publishing workflow; it is not a preparation-only check. Do not move an
|
|
273
|
+
existing tag. The workflow also rebuilds the unchanged specification companion
|
|
274
|
+
package 0.1.0 at its existing pin and uses `skip-existing`; it does not release
|
|
275
|
+
the newer specification validator changes.
|
|
276
|
+
9. After publication, verify the tag resolves to the intended commit, the
|
|
277
|
+
tag-triggered workflow succeeded, and PyPI installs `openstatspec==0.9.0` in a
|
|
278
|
+
clean environment. Record the tag, CI and registry evidence before claiming
|
|
279
|
+
the release is published.
|
|
190
280
|
|
|
191
281
|
The tag-triggered release workflow repeats the non-service test suite, builds
|
|
192
282
|
the distributions, and installs the wheel with the exact required SPSS engine
|