This page records the expected release contract, not a publication event. Creating a version tag remains a separate maintainer action.
For a supported unencrypted SAV or ZSAV source, the adapter imports one source
dataset into exactly one dedicated wide data table plus the complete singular,
UUID-keyed normative catalog from the SPSS profile. It can validate that
representation and export it back to SAV or ZSAV. Historical *_catalog
tables remain private compatibility storage and do not replace the normative
database contract.
| Profile | Connection URL | Claimed versions | Exact CI evidence |
|---|---|---|---|
| SQLite | sqlite:///dataset.sqlite |
>=3.24.0,<4.0.0 |
Active Python 3.11–3.14 runner version |
| PostgreSQL | postgresql+psycopg://… |
17.x and 18.x | 17.10 and 18.4 |
| MySQL | mysql+pymysql://… |
8.4.x and 9.7.x | 8.4.11 and 9.7.2 |
| MariaDB | mysql+pymysql://… |
11.4.x, 11.8.x, and 12.3.x | 11.4.12, 11.8.8, and 12.3.2 |
| Dolt | mysql+pymysql://… |
2.2.x with >=2.2.2,<2.3.0 |
2.2.2 and 2.2.3 |
Separate service matrices test the shared MySQL/MariaDB profile contract while
retaining distinct active-server identities and version claims. Dolt is an
independent core profile that accepts only canonical stable versions in
>=2.2.2,<2.3.0; the optional Transformation Workflow remains SQLite-only. This does not
claim coverage for every server configuration. The machine-readable capability
declaration reports both the theoretical profile boundaries and effective
limits observed from the active connection.
Every server service job compares the normalized live product version with its
exact matrix entry, so a moved or mismatched image cannot substantiate the CI
declaration. SQLite's optional Transformation Workflow retains its narrower
>=3.35.0,<4.0.0 live preflight alongside the core >=3.24.0,<4.0.0 policy.
Microsoft SQL Server remains unsupported and must not appear in runtime
capabilities; future implementation requirements are documented in the
specification's
MSSQL dialect roadmap.
capability_matrix() and openstatspec capabilities expose the current
feature state. Before export, the adapter combines source and writer
diagnostics. An export with known loss fails unless the caller passes the
relevant diagnostic codes through allow_loss or repeats --allow-loss CODE
in the CLI.
The concrete pyspssio boundaries are documented in the SAV profile. The pinned OpenStatSpec fork preserves document text, file labels, legacy compatible names, separate print/write formats, variable sets, multiple-response sets, alignment, scalar attributes, and ordered custom-attribute arrays. Non-UTF-8 output requires an explicit matching locale; otherwise the strict export policy reports and blocks the loss. A caller that supplies consent for an available loss code receives the machine-readable loss report with the export result.
The canonical transformation core and SPSS syntax frontend are separate public surfaces. A release must run the specification-owned canonical-plan and SPSS frontend conformance fixtures, then exercise both the generic plan apply API and the SPSS compatibility apply path.
The gate must prove that:
- a TransformationPlan object and its strict JSON mapping produce the same plan hash and in-place result;
- the exact bounded
COMPUTE/IFprogram compiles to all seven ordered operations without droppingFORMATS,VARIABLE LEVEL, orEXECUTE; - boolean data results match the equivalent expression and the target's label,
0/1 value labels,
F1.0print/write format, and nominal level exist in both normative and compatibility catalogs; - injected schema, data, catalog, and audit failures leave no partial apply;
- compensation tracks only newly created targets and never drops or rewrites a pre-existing target;
- MySQL, MariaDB, and Dolt reject create-target plans before mutation; their service evidence covers assignment to a separately provisioned physical and catalog target without schema DDL;
- top-level SPSS compiler imports and legacy openstatspec.transform re-exports still load from an installed wheel;
- install-in-place-schema, apply-plan, and apply-spss execute their documented CLI workflows;
- invalid or unsupported plans fail before the first data or metadata mutation;
- successful applies retain the same dataset ID, physical schema/table identity, dataset count, and persistent physical data-table count;
- audit rows distinguish canonical plans from SPSS syntax, preserve correct source/plan hashes and frontend contract, and contain no copied data;
- no OpenStatSpec rollback, snapshot, staging, copy, derived-dataset, or parallel history artifacts are created; and
- Dolt checks expected branch, HEAD, and a clean working set; success changes neither HEAD nor branch and never commits or resets; state is rechecked after the dataset lock and success must leave an inspectable working-set diff; other supported SQL connections remain allowed; and
- string comparisons and v0.2 string assignments fail closed until exact
The built wheel must contain the generic openstatspec.transform modules and the implemented openstatspec.frontends.spss package. Stata and SAS remain empty source-tree placeholders and must expose no compiler, apply API, CLI choice, capability claim, or implied support.
- Publish the pinned
openstatspec-pyspssio==0.5.1.post2engine distribution first and confirm that a clean environment can download it from PyPI. The main package has no fallback SPSS engine. - Run
python -m pytest -m "not services". - Confirm the GitHub Actions matrix is green for exact PostgreSQL 17.10/18.4, MySQL 8.4.11/9.7.2, MariaDB 11.4.12/11.8.8/12.3.2, and exact Dolt 2.2.2/2.2.3 service evidence from the immutable image pins in CI.
- Build with
python -m buildand install the generated wheel in a clean environment. - Confirm
openstatspec capabilitiesreflects the intended support boundary. - Confirm CI, release fixtures, and capabilities use the untagged OpenStatSpec
specification release candidate at exact commit
e49252c00890aed76dcaabc5d1ab5121b45929db, publishspecification_status=release_candidate, and leavespecification_releasenull. If that exact commit receives a stable tag before this package is tagged, update the identity and re-run every gate. - Review this document, the README, and CHANGELOG for accurate scope.
The tag-triggered release workflow repeats the non-service test suite, builds
the distributions, and installs the wheel with the exact required SPSS engine
in a clean environment before it can reach the protected pypi environment.
It fails closed if that exact engine version is not already downloadable from
PyPI, preventing publication of an uninstallable OpenStatSpec release.