Skip to content

Commit c8ee5ef

Browse files
Merge pull request #30 from OpenStatSpec/release/v0.8.1
chore: prepare Python 0.8.1 patch release
2 parents 999f6fe + 7b82097 commit c8ee5ef

5 files changed

Lines changed: 78 additions & 10 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,39 @@
22

33
All notable changes to this reference implementation are documented here.
44

5-
## Unreleased
5+
## 0.8.1 - Unreleased
66

7-
_No unreleased changes._
7+
### Fixed
8+
9+
- Preserve other variables' shared value labels when replacing one variable's
10+
labels. Reject deletion of variables referenced by published derived lineage
11+
before any plan mutation, with `variable_has_dependents`.
12+
- Enable and verify SQLite foreign keys on in-place apply connections.
13+
- Read export values, dictionary metadata, import fidelity events and validation
14+
reflection from one native database snapshot; close it before writing SAV/ZSAV.
15+
- Scope transformation label reads to the target variable's dataset. Unrelated
16+
malformed labels no longer fail the operation; malformed target-linked labels
17+
still fail, and shared/foreign-owned linked label sets remain supported.
18+
19+
### Performance
20+
21+
- Remove quadratic suffix/name scans from canonical-plan binding and reuse one
22+
canonical plan encoding/hash per public canonical or SPSS apply.
23+
- Remove redundant full case-row dictionary collections from database reads and
24+
imports. Results remain buffered; this is not a streaming API.
25+
- Avoid the discarded core relation hash during SQLite workflow registration,
26+
retaining physical projection validation and derived-parent integrity checks.
27+
Execution-time hashes remain required; their loop avoids a redundant tuple copy.
28+
29+
### Documentation and cleanup
30+
31+
- Document numeric create/replace, RECODE and separately provisioned target
32+
recipes, with bounded local SQLite measurements in the transformations manual.
33+
- Remove an unreachable view-creation branch; workflow output remains
34+
materialized-only.
35+
36+
The specification pin, engine dependency, database/profile claims, catalog schema,
37+
public call signatures and Dolt-owned versioning policy remain unchanged.
838

939
## 0.8.0 - 2026-09-07
1040

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ The reference Python implementation of the OpenStatSpec specification.
44

55
This package implements the specification; it does not define or extend it.
66
The normative model lives in the `OpenStatSpec/specification` repository.
7-
Python 0.8.0 pins released specification `v0.5.0` at
7+
Python 0.8.1 pins released specification `v0.5.0` at
88
`864e84479f554b8ee250ffed44c4dfb963750d4a` and selects SAV/ZSAV 1.0 with
99
`database_io_policy=openstatspec-database-io-v1`. This does not claim
1010
implementation of the optional Transformation Workflow 0.3 profile.

‎docs/release-readiness.md‎

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
# 0.8.0 release readiness
1+
# 0.8.1 release readiness
22

33
This page records the expected release contract, not a publication event.
44
Creating a version tag remains a separate maintainer action.
55

6+
## Patch scope
7+
8+
Version 0.8.1 includes the merged metadata-integrity, consistent-read-snapshot,
9+
row-copy, transformation-planning and SQLite workflow fixes described in the
10+
[release notes](../CHANGELOG.md). It introduces no catalog
11+
migration, dependency change, new database support or specification pin update.
12+
The local 0.8.0 evidence below is historical, not verification of this patch.
13+
Re-run the gates below on the exact selected 0.8.1 release commit.
14+
615
The release selects SAV/ZSAV 1.0 with the optional Database I/O Execution
716
Policy `openstatspec-database-io-v1`. Reads and exports, including failures,
817
write no database audit records; export results omit `operation_id` and return
@@ -104,7 +113,7 @@ The gate must prove that:
104113
neither HEAD nor branch and never commits or resets; state is rechecked after
105114
the dataset lock and success must leave an inspectable working-set diff;
106115
other supported SQL connections remain allowed; and
107-
- string comparisons and v0.2 string assignments fail closed until exact
116+
- string comparisons and v0.2 string assignments remain fail-closed.
108117

109118
The built wheel must contain the generic openstatspec.transform modules and the
110119
implemented openstatspec.frontends.spss package. Stata and SAS remain empty
@@ -156,7 +165,24 @@ of exact `864e84479f554b8ee250ffed44c4dfb963750d4a`):
156165
Other database services were not configured locally. This is local evidence,
157166
not a claim that the updated remote CI or release publication has completed.
158167

159-
## Maintainer checks before tagging
168+
## 0.8.1 local preparation verification
169+
170+
On Python 3.13.2 with SQLAlchemy 2.0.52 and the exact v0.5.0 specification
171+
checkout, without configured database services:
172+
173+
- `python -m pytest -p no:cacheprovider -m 'not services'`: **414 passed,
174+
9 skipped, 53 deselected**. The release-ref guard tests also passed (**5**).
175+
- `compileall`, `git diff --check`, wheel/sdist build and `twine check` passed.
176+
- A clean wheel install outside the checkout resolved the required engine
177+
`openstatspec-pyspssio==0.5.1.post2` from PyPI. Installed capabilities reported
178+
0.8.1, released specification v0.5.0 at the expected commit, and the selected
179+
database I/O policy. Core, SPSS frontend and legacy compiler re-exports loaded
180+
from `site-packages` without a source-path override.
181+
182+
This is local candidate evidence, not final release-commit service CI or
183+
publication evidence. No v0.8.1 tag or registry upload was made by these checks.
184+
185+
## Maintainer release checklist
160186

161187
1. Publish the pinned `openstatspec-pyspssio==0.5.1.post2` engine distribution
162188
first and confirm that a clean environment can download it from PyPI. The
@@ -179,14 +205,26 @@ not a claim that the updated remote CI or release publication has completed.
179205
4. Build with `python -m build` and install the generated wheel in a clean
180206
environment, resolving `openstatspec-pyspssio==0.5.1.post2` from PyPI.
181207
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.
208+
verify adapter version `0.8.1` and the selected database I/O policy.
183209
5. Confirm `openstatspec capabilities` reflects the intended support boundary.
184210
6. Confirm CI, release fixtures, and capabilities use the published OpenStatSpec
185211
specification `v0.5.0` at exact commit
186212
`864e84479f554b8ee250ffed44c4dfb963750d4a`, publish
187213
`specification_status=released`, and set `specification_release` to `v0.5.0`.
188214
Use an exact checkout via `OPENSTATSPEC_SPECIFICATION_DIR` for local tests.
189-
7. Review this document, the README, and CHANGELOG for accurate scope.
215+
7. Review this document, the README, and CHANGELOG for accurate scope. Finalize
216+
the 0.8.1 changelog date before selecting the final release commit.
217+
8. Confirm the exact release commit's CI matrix and package smoke passed, and
218+
verify the protected `pypi` environment and Trusted Publishing setup before
219+
pushing a new annotated/protected `v0.8.1` tag. A `v*` tag push starts the
220+
publishing workflow; it is not a preparation-only check. Do not move an
221+
existing tag. The workflow also rebuilds the unchanged specification companion
222+
package 0.1.0 at its existing pin and uses `skip-existing`; it does not release
223+
the newer specification validator changes.
224+
9. After publication, verify the tag resolves to the intended commit, the
225+
tag-triggered workflow succeeded, and PyPI installs `openstatspec==0.8.1` in a
226+
clean environment. Record the tag, CI and registry evidence before claiming
227+
the release is published.
190228

191229
The tag-triggered release workflow repeats the non-service test suite, builds
192230
the distributions, and installs the wheel with the exact required SPSS engine

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "openstatspec"
7-
version = "0.8.0"
7+
version = "0.8.1"
88
description = "Reference adapter for the OpenStatSpec relational contract"
99
readme = "README.md"
1010
requires-python = ">=3.11"

‎tests/test_cli.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def test_cli_import_inspect_validate_and_export_emit_json(tmp_path, capsys) -> N
4242

4343
def test_capability_matrix_is_public_and_cli_matches_engine_boundary(capsys) -> None:
4444
matrix = openstatspec.capability_matrix()
45-
assert matrix["adapter_version"] == "0.8.0"
45+
assert matrix["adapter_version"] == "0.8.1"
4646
assert matrix["database_io_policy"] == "openstatspec-database-io-v1"
4747
assert matrix["specification_status"] == "released"
4848
assert matrix["specification_release"] == "v0.5.0"

0 commit comments

Comments
 (0)