diff --git a/ROADMAP.md b/ROADMAP.md index cee5b07..8d40af5 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -6,33 +6,33 @@ This is a working to-do list for OpenStatSpec. Items below describe intended wor - Specification `v0.5.0` is published at immutable commit `864e84479f554b8ee250ffed44c4dfb963750d4a`; both reference adapters pin it. -- Python `0.8.1` is published on PyPI. PHP `0.7.2` preparation is merged - ([PR #15](https://github.com/OpenStatSpec/php/pull/15)); tagging and Packagist - publication remain separate. The last verified Packagist version is `0.7.1`. +- Python `0.9.0` is published on PyPI and PHP `0.8.0` on Packagist; clean + registry installs and explicit Frontend 0.3 compilation were verified. + PHP's unpublished `0.7.2` preparation was consolidated into `0.8.0`. - Both adapters select SPSS SAV/ZSAV 1.0 and Database I/O Execution Policy v1, with official Plan 0.1/0.2 and In-Place Binding 0.1/0.2 service evidence. This is not a claim to implement every optional profile in this release. -- Official SPSS Frontend 0.3 adapter conformance remains pending. Python's - schema-change extension uses Plan/Frontend `0.3` identifiers, but those - names alone do not establish conformance to the published syntax-only - Frontend 0.3 contract over Plan 0.1/0.2. +- Both adapters implement explicitly selected official SPSS Frontend 0.3: + all 90 effective cases and the complete release service matrices passed. + Defaults remain unchanged. Python schema changes now emit Python-owned + extension identifiers; legacy plan bytes and hashes remain readable. -### Immediate next work +### Alignment completed; next-work boundary The [adapter alignment plan](docs/adapter-alignment-plan.md) defines three reviewed implementation blocks and their separate merge/release gates: Python extension identities, official Python Frontend 0.3, then PHP parity. Implementations are in Python PRs [#31](https://github.com/OpenStatSpec/python/pull/31) and [#32](https://github.com/OpenStatSpec/python/pull/32), and PHP -[#16](https://github.com/OpenStatSpec/php/pull/16); pending checkboxes below -remain open until the relevant merge and evidence gates are complete. - -- [ ] Finish the PHP `0.7.2` release: finalize release metadata, verify the - exact release commit's CI, tag, and verify a clean Packagist install. -- [ ] Reconcile Python's schema-change contract identifiers with the published - specification before expanding or claiming official Frontend 0.3 support. -- [ ] Implement and verify official Frontend 0.3 separately in each adapter, - including its 35 declared cases and inherited compatibility cases. +[#16](https://github.com/OpenStatSpec/php/pull/16); all are merged and released. +Exact release evidence is recorded in the alignment plan. + +- [x] Release the PHP fixes together with Frontend 0.3 as `0.8.0`, including + exact-commit/tag CI and a clean Packagist install; no `0.7.2` tag was created. +- [x] Reconcile Python's schema-change contract identifiers while preserving + legacy serialized plan and audit identities. +- [x] Implement and verify official Frontend 0.3 separately in each adapter, + including its 35 declared and 90 effective cases, and publish both adapters. - Further PHP catalog refactoring and optimization are not release gates; schedule them only against a concrete correctness or measured performance need. @@ -165,12 +165,12 @@ follows and does not block specification publication. and `v0.5.0` release notes without changing existing source or plan contracts. 10. [x] Published `v0.5.0` at commit `864e84479f554b8ee250ffed44c4dfb963750d4a`. Both adapters adopted that - exact pin and the Database I/O Execution Policy v1. Python `0.8.1` and - PHP `0.7.1` are published; PHP `0.7.2` publication remains separate. + exact pin and the Database I/O Execution Policy v1. Python `0.9.0` and + PHP `0.8.0` are now published with optional official Frontend 0.3 support. -Optional workflow and Frontend 0.3 conformance remain downstream implementation -work. Existing Plan/Binding 0.1/0.2 service evidence does not establish those -additional claims. Specification publication and adapter publication retain +Optional workflow conformance and future frontend generations remain downstream +implementation work. Frontend 0.3 has its own completed adapter evidence in the +alignment plan. Specification publication and adapter publication retain separate evidence gates. ## Maintainer setup diff --git a/docs/adapter-alignment-plan.md b/docs/adapter-alignment-plan.md index 58ed33e..3ce872b 100644 --- a/docs/adapter-alignment-plan.md +++ b/docs/adapter-alignment-plan.md @@ -10,9 +10,25 @@ new normative profile or a claim of full SPSS compatibility. Deliver the three blocks below in dependency order. Each has its own reviewed pull request and local/CI evidence. Merge and package publication are separate steps: Python `0.8.1` and PHP `0.7.1` do not gain these changes retroactively. -The merged PHP `0.7.2` preparation is not proof of registry publication. +The unpublished PHP `0.7.2` preparation was consolidated into `0.8.0`. Do not move published tags or silently rewrite saved plans and audit history. +## Release completion (2026-09-10) + +All implementation and release PRs are merged. Both registry installs were +verified from clean consumer environments outside the repositories, including +an explicit official Frontend 0.3 compilation. + +| Adapter | Published release | Exact release commit | Release evidence | +| --- | --- | --- | --- | +| Python | [0.9.0](https://pypi.org/project/openstatspec/0.9.0/) | `a41849a78086fc5a17262691ac1d4394a5071344` | [14-job main CI](https://github.com/OpenStatSpec/python/actions/runs/34488799665), [tag build and PyPI publication](https://github.com/OpenStatSpec/python/actions/runs/34489266688) | +| PHP | [0.8.0](https://github.com/OpenStatSpec/php/releases/tag/v0.8.0) | `6b8edb8cf5f532a1a66cd7b7ea1e680039b68971` | [20-job main CI](https://github.com/OpenStatSpec/php/actions/runs/34488808611), [tag CI](https://github.com/OpenStatSpec/php/actions/runs/34489275697), [Packagist](https://packagist.org/packages/openstatspec/php) | + +Each adapter passed all 90 effective official cases. An additional 37-program +cross-adapter comparison found no canonical-plan or diagnostic differences. +Python's release includes the MySQL/MariaDB interleaved additive-label update +regression. No normative specification release or pin change was required. + ## Block 1 — Separate Python extension identities [Python PR #31](https://github.com/OpenStatSpec/python/pull/31). @@ -30,8 +46,8 @@ Do not move published tags or silently rewrite saved plans and audit history. Python-owned identifiers. No automatic stored-plan or catalog migration. Gate: compatibility/hash and in-place tests, full Python service matrix, -read-only review, and merge before block 2. Implementation is in PR #31; -publication remains pending. +read-only review, and merge before block 2. Completed in PR #31 and published +in Python 0.9.0. ## Block 2 — Official Frontend 0.3 in Python @@ -87,14 +103,14 @@ remains the only persistent dataset history/versioning layer. ## Completion checklist -- [ ] Merge Python #31, then #32; retain final-commit CI evidence after any merge - or follow-up edits rather than relying only on earlier branch runs. -- [ ] Merge PHP #16 after its final-commit CI and review gates. -- [ ] Update the roadmap's pending adapter claims with merged evidence. PR - implementation is not a published-package support claim. -- [ ] Select package versions and perform each adapter's release checklist, - including clean registry installation. Keep prepared PHP 0.7.2 release notes - distinct from these new Unreleased features until release scope is selected. +- [x] Merge Python #31, then #32; repeat complete CI on the final release commit + after [release PR #33](https://github.com/OpenStatSpec/python/pull/33). +- [x] Merge PHP #16 and [release PR #17](https://github.com/OpenStatSpec/php/pull/17) + after their review/CI gates; repeat complete CI on main and the release tag. +- [x] Update the roadmap's adapter claims with merged and published evidence. +- [x] Publish Python 0.9.0 and PHP 0.8.0 and verify clean registry installations. + Consolidate PHP's unpublished 0.7.2 changes into 0.8.0 rather than inventing an + intermediate release. Out of scope: new arithmetic/date/string profiles, case/group/cross-dataset operations, MSSQL, SAS/Stata, unrelated optimization, and automatic publication. diff --git a/docs/spss-frontend-roadmap.md b/docs/spss-frontend-roadmap.md index 5d45bd9..f2a9098 100644 --- a/docs/spss-frontend-roadmap.md +++ b/docs/spss-frontend-roadmap.md @@ -13,9 +13,10 @@ not advertise general IBM SPSS Statistics compatibility, forward source expressions into SQL, or weaken the same-dataset/same-table and caller-owned Dolt history rules. -Frontend 0.3 is released in OpenStatSpec `v0.4.0`. Adapter claims remain -pending and separately gated; adapter evidence does not block specification -publication. +Frontend 0.3 is released in OpenStatSpec `v0.4.0` and retained unchanged in +`v0.5.0`. Python `0.9.0` and PHP `0.8.0` now publish explicitly selected +Frontend 0.3 support after all 90 effective cases and their service matrices +passed; see the [alignment release evidence](adapter-alignment-plan.md#release-completion-2026-09-10). ## Command classification @@ -45,8 +46,8 @@ publication. - Classify every proposed command as frontend-only, new Plan/Binding work, a separate profile, or an explicit non-goal before accepting syntax. -Adapter claims remain pending and separately gated; adapter evidence does not -block specification publication. +Adapter claims remain separately gated; adapter evidence does not block +specification publication. ## Milestone 1: Frontend 0.3 over Plan 0.1/0.2 @@ -68,8 +69,9 @@ The manifest must list only Plan 0.1 and Plan 0.2 outputs and prove that all inherited programs retain their exact prior plans and hashes. No SQL binding or executor change belongs in this milestone. -Adapter claims remain pending and separately gated; adapter evidence does not -block specification publication. +- [x] Python 0.9.0 and PHP 0.8.0 passed this milestone's 90 effective cases, + preserved inherited Plan 0.1/0.2 objects/hashes, and completed release CI and + clean registry-install checks. Existing defaults remain unchanged. ## Milestone 2: typed numeric expressions and metadata diff --git a/src/openstatspec_specification/artifacts.py b/src/openstatspec_specification/artifacts.py index a6a9f7b..2a894a8 100644 --- a/src/openstatspec_specification/artifacts.py +++ b/src/openstatspec_specification/artifacts.py @@ -790,7 +790,7 @@ def validate_release_metadata(root: Path) -> None: "Explicit non-goal", "Milestone 0: integrity and classification\n\n- [x] Specification-complete", "Milestone 1: Frontend 0.3 over Plan 0.1/0.2\n\n- [x] Specification-complete", - "Adapter claims remain pending and separately gated", + "Adapter claims remain separately gated", ): _require( " ".join(phrase.split()) in classification,