From 79e3c6d15ac9a46c7d58669282d8929ac0c12cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5nis=20Ormisson?= Date: Thu, 10 Sep 2026 00:21:59 +0300 Subject: [PATCH 1/2] chore: prepare PHP 0.7.2 patch release --- CHANGELOG.md | 30 +++++++++++++++++++++- README.md | 2 +- docs/release-readiness.md | 52 +++++++++++++++++++++++++++++++-------- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9459367..b75c3c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## [0.7.2] - Unreleased + +### Fixed + +- Preserve finite binary64 precision in SQLite case values and compression bias, + and in affected multiple-response counted-value metadata writes. +- Fail imports on SQL errors even when the supplied PDO uses silent or warning + mode, restoring the caller's error mode afterward. Reject caller-owned active + transactions before import mutation. +- Finalize SQLite/PostgreSQL import audit success inside the native import + transaction, so finalization failure rolls back the attempt. Retain the + MySQL/MariaDB/Dolt ownership-scoped cleanup and finalization compensation. + +### Performance + +- Send PostgreSQL and MySQL/MariaDB/Dolt case INSERTs in bounded prepared batches, + respecting parameter/packet budgets and preserving preflight-valid oversized + singleton rows, case order, NULLs, strings and numeric precision. +- Load canonical and legacy export dictionary children and set members with + dataset-scoped grouped queries instead of per-variable/per-set queries. + Export remains database-read-only and observes fresh metadata on every call. + +Existing import/export call forms, dependencies, specification pin, database +support claims and catalog schema remain unchanged. Catalog preparation and +ownership checks are retained; this patch requires no new migration. + ## [0.7.1] - 2026-09-07 ### Changed @@ -129,7 +155,9 @@ - Pinned active conformance fixtures and capabilities to released OpenStatSpec specification v0.1.0 at commit `d287c2cde9ade71f04e27dd012caec876901aed5`. -[Unreleased]: https://github.com/OpenStatSpec/php/compare/v0.6.0...HEAD +[Unreleased]: https://github.com/OpenStatSpec/php/compare/v0.7.1...HEAD +[0.7.2]: https://github.com/OpenStatSpec/php/compare/v0.7.1...HEAD +[0.7.1]: https://github.com/OpenStatSpec/php/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/OpenStatSpec/php/compare/v0.6.0...v0.7.0 [0.6.0]: https://github.com/OpenStatSpec/php/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/OpenStatSpec/php/compare/v0.4.0...v0.5.0 diff --git a/README.md b/README.md index 15416e3..8e15700 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ It imports an unencrypted SPSS `.sav` or `.zsav` dataset into a relational datab ## Status -PHP v0.7.1 targets released OpenStatSpec specification `v0.5.0` at immutable +PHP v0.7.2 targets released OpenStatSpec specification `v0.5.0` at immutable commit `864e84479f554b8ee250ffed44c4dfb963750d4a` (`specification_status: released`). Composer derives the package version from its Git tag; it is independent of the specification version. diff --git a/docs/release-readiness.md b/docs/release-readiness.md index e59b67a..e5b6abd 100644 --- a/docs/release-readiness.md +++ b/docs/release-readiness.md @@ -1,9 +1,19 @@ # PHP adapter release readiness -This page records the release contract for PHP adapter v0.7.1. It does not mean +This page records the release contract for PHP adapter v0.7.2. It does not mean that a package tag or Packagist publication has happened. Composer derives the package version from the Git tag; `composer.json` has no `version` key. +## Patch scope + +Version 0.7.2 includes the merged import precision/error/transaction fixes, +bounded server INSERT batching and grouped export metadata reads described in +[the release notes](../CHANGELOG.md). Dependencies, specification +pin, SQL support and catalog schema are unchanged. Existing catalog preparation +and ownership checks are retained; no new migration or caller setup is required. +Run the gates below on the exact selected patch release commit, not an earlier +0.7.1 commit. + ## Specification pin and claims The machine-readable capability declaration and every CI fixture checkout use @@ -11,7 +21,7 @@ released OpenStatSpec specification `v0.5.0` at exact commit `864e84479f554b8ee250ffed44c4dfb963750d4a`, with `specification_status: released`. -Release v0.7.1 selects `database_io_policy: openstatspec-database-io-v1`. +Release v0.7.2 selects `database_io_policy: openstatspec-database-io-v1`. SAV/ZSAV export is database-read-only, including failures, and no longer returns `SpssExportResult::operationId` or writes operation/fidelity audit records. Initialize or upgrade the catalogue with `SpssAdapter::migrateCatalog()` using a @@ -30,9 +40,26 @@ contracts are not implemented or claimed. Existing target pre-provisioning and caller-owned Dolt commit rules remain unchanged; see the [transformation migration notes](transformations.md#v060-migration). +## 0.7.2 local preparation verification + +On PHP 8.5.9, PHPUnit 11.5.56 and the exact v0.5.0 specification checkout, +without configured database services: + +- `composer check` passed strict validation, lint, style, PHPStan and PHPUnit: + **615 tests, 10,468 assertions, 112 skipped**. +- `composer install --dry-run --no-dev` and a disposable ZIP archive inspection + passed. Required source, lockfile and release notes were present; `.git` and + `vendor` were absent. +- A clean extraction installed production dependencies from the unchanged lock + (including codec 3.1.1), and the adapter/batch classes autoloaded successfully. + This checks the archive, not future Packagist version resolution. + +This is local candidate evidence, not final release-commit service CI or +publication evidence. No v0.7.2 tag or registry publication was made. + ## Required gates -Before tagging v0.7.1: +Before tagging v0.7.2: 1. Verify `git rev-parse HEAD` in the specification checkout equals `864e84479f554b8ee250ffed44c4dfb963750d4a`, and the published `v0.5.0` tag @@ -65,11 +92,16 @@ Before tagging v0.7.1: PostgreSQL, MySQL, MariaDB, and Dolt matrix entry. Each service filter must include both official in-place test classes; the Dolt filter must also include `DoltReadOnlyExportTest`. -7. Confirm README, changelog, and release notes agree on the exact specification - pin, breaking export changes, initialization requirement, and Dolt defaults. - Run `composer install --dry-run --no-dev` and - `composer archive --format=zip --dir=/tmp/openstatspec-php-v071-package`; +7. Confirm README, changelog, and release notes agree on this patch's fixes, + unchanged specification pin, initialization requirement and Dolt defaults. + Finalize the 0.7.2 changelog date and comparison link before selecting the + final release commit. Run `composer install --dry-run --no-dev` and + `composer archive --format=zip --dir="$(mktemp -d /tmp/openstatspec-php-v072-package.XXXXXX)"`; inspect the archive without publishing it. No separate build is required. -8. Publication is a separate maintainer action: create and verify annotated - tag `v0.7.1` on the reviewed `main` commit, publish the GitHub release, and - confirm Packagist installation. Do not infer publication from this checklist. +8. Publication is a separate maintainer action: confirm the selected commit's + full CI matrix, protected-tag controls and Packagist update access, then + create and verify annotated tag `v0.7.2` on that reviewed `main` commit. + Wait for tag-context CI before publishing the GitHub release. Do not move + an existing tag. Confirm Packagist lists the new version and a clean + `composer require openstatspec/php:0.7.2` resolves it to the intended commit. + Do not infer publication from this checklist. From 58d3f098cce4e6aa3bd01d5451cd10832798e535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5nis=20Ormisson?= Date: Thu, 10 Sep 2026 00:32:22 +0300 Subject: [PATCH 2/2] docs: clarify catalog prerequisites and publication gates --- CHANGELOG.md | 1 - docs/release-readiness.md | 26 +++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b75c3c1..8985e40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -155,7 +155,6 @@ ownership checks are retained; this patch requires no new migration. - Pinned active conformance fixtures and capabilities to released OpenStatSpec specification v0.1.0 at commit `d287c2cde9ade71f04e27dd012caec876901aed5`. -[Unreleased]: https://github.com/OpenStatSpec/php/compare/v0.7.1...HEAD [0.7.2]: https://github.com/OpenStatSpec/php/compare/v0.7.1...HEAD [0.7.1]: https://github.com/OpenStatSpec/php/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/OpenStatSpec/php/compare/v0.6.0...v0.7.0 diff --git a/docs/release-readiness.md b/docs/release-readiness.md index e5b6abd..985f879 100644 --- a/docs/release-readiness.md +++ b/docs/release-readiness.md @@ -8,9 +8,11 @@ package version from the Git tag; `composer.json` has no `version` key. Version 0.7.2 includes the merged import precision/error/transaction fixes, bounded server INSERT batching and grouped export metadata reads described in -[the release notes](../CHANGELOG.md). Dependencies, specification -pin, SQL support and catalog schema are unchanged. Existing catalog preparation -and ownership checks are retained; no new migration or caller setup is required. +[the release notes](../CHANGELOG.md). Dependencies, specification pin, SQL support +and catalog schema are unchanged. Export still requires a ready, owned catalog; +initialize or upgrade it with `SpssAdapter::migrateCatalog()` on a write-capable +deployment connection before export when needed. This patch adds no migration +or setup for an already prepared current catalog. Run the gates below on the exact selected patch release commit, not an earlier 0.7.1 commit. @@ -57,9 +59,7 @@ without configured database services: This is local candidate evidence, not final release-commit service CI or publication evidence. No v0.7.2 tag or registry publication was made. -## Required gates - -Before tagging v0.7.2: +## Before tagging v0.7.2 1. Verify `git rev-parse HEAD` in the specification checkout equals `864e84479f554b8ee250ffed44c4dfb963750d4a`, and the published `v0.5.0` tag @@ -98,10 +98,14 @@ Before tagging v0.7.2: final release commit. Run `composer install --dry-run --no-dev` and `composer archive --format=zip --dir="$(mktemp -d /tmp/openstatspec-php-v072-package.XXXXXX)"`; inspect the archive without publishing it. No separate build is required. -8. Publication is a separate maintainer action: confirm the selected commit's - full CI matrix, protected-tag controls and Packagist update access, then - create and verify annotated tag `v0.7.2` on that reviewed `main` commit. - Wait for tag-context CI before publishing the GitHub release. Do not move - an existing tag. Confirm Packagist lists the new version and a clean +8. Confirm the selected commit's full CI matrix, protected-tag controls and + Packagist update access. + +## Publication (separate maintainer action) + +1. Create and verify annotated tag `v0.7.2` on the reviewed `main` commit that + passed the gates above. Do not move an existing tag. +2. Wait for tag-context CI before publishing the GitHub release. +3. Confirm Packagist lists the new version and a clean `composer require openstatspec/php:0.7.2` resolves it to the intended commit. Do not infer publication from this checklist.