Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 22 additions & 22 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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
Expand Down
38 changes: 27 additions & 11 deletions docs/adapter-alignment-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand All @@ -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

Expand Down Expand Up @@ -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.
16 changes: 9 additions & 7 deletions docs/spss-frontend-roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -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

Expand Down
2 changes: 1 addition & 1 deletion src/openstatspec_specification/artifacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down