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
14 changes: 11 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,22 @@

## Unreleased

- SPSS Syntax Frontend 0.3 is a release candidate, not a published stable
claim.
Future changes will be listed here.

## v0.4.0 - 2026-08-21

OpenStatSpec `v0.4.0` publishes SPSS Syntax Frontend 0.3 as a stable optional
profile. The release tag is the immutable specification identity for this
release.

- Added comments, existing-variable `TO`, grouped supported forms, predicate
aliases and bounded `NOT`, open recode ranges, and additive value labels.
- Frontend 0.3 emits only immutable Plan 0.1/0.2 objects and adds no SQL
binding operation.
- Repository validation now covers all Plan/Frontend/Binding schemas,
manifests, references, and hashes.
manifests, references, inherited cases, and canonical hashes.
- Adapter claims remain downstream and separately gated; this release does not
assert PHP or Python implementation conformance.

## v0.3.0 - 2026-08-12

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ creates no derived dataset, data copy, or OpenStatSpec undo layer; Dolt-specific
history and commits remain Dolt's. MySQL, MariaDB, and Dolt require a new target
to be provisioned separately before an in-place transformation apply.

The release-candidate [SPSS Syntax Frontend Profile 0.3](docs/spss-syntax-frontend-profile-0.3.md)
adds syntax-only expansion over the released Plan 0.1/0.2 contracts and is not
published stable yet.
The released [SPSS Syntax Frontend Profile 0.3](docs/spss-syntax-frontend-profile-0.3.md)
was published in OpenStatSpec `v0.4.0`. It adds syntax-only expansion over the
released Plan 0.1/0.2 contracts and does not change SQL binding behavior.

## Repository layout

Expand Down
10 changes: 8 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Prerequisite: the core mapping and canonical fixtures are stable enough to test
and fixtures.
- [x] Define adapter conformance guidance; each adapter repository owns its runtime CI and evidence.
- [x] Define versioning and compatibility guidance for the specification and profiles.
- [x] Publish release notes and tagged specification releases; `v0.3.0` is the
- [x] Publish release notes and tagged specification releases; `v0.4.0` is the
current public specification release and is immutable.
- [ ] Expand implementation, dialect-profile, and adoption documentation from real adapter experience.

Expand Down Expand Up @@ -122,8 +122,14 @@ follows and does not block specification publication.
5. [ ] Have PHP pin the exact specification commit and pass applicable
conformance evidence before changing adapter or package-release claims.

6. [x] Merged and reviewed SPSS Syntax Frontend profile 0.3 as a
backward-compatible optional profile over immutable Plan 0.1/0.2 contracts.
7. [x] Prepared specification `v0.4.0` release notes, stable profile status,
exact artifact validation, and tag-context CI requirements; adapter claims
remain downstream and are not implied by this release.

The pending in-place service matrix and adapter conformance work in sections 6
and 7 are downstream implementation gates. They do not block the `v0.3.0`
and 7 are downstream implementation gates. They do not block the `v0.4.0`
specification release, and publishing the specification does not complete those
implementation evidence gates.

Expand Down
13 changes: 7 additions & 6 deletions docs/spss-frontend-roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@
## Status and boundary

This roadmap describes intended work, not a compatibility claim or release-date
promise. The current published boundary remains the exact bounded grammar in
[SPSS Syntax Frontend 0.2](spss-syntax-frontend-profile-0.2.md). Every syntax
form outside a claimed frontend contract must continue to fail closed.
promise. The current published boundary includes the exact bounded grammar in
[SPSS Syntax Frontend 0.3](spss-syntax-frontend-profile-0.3.md) and its
backward-compatible 0.1/0.2 predecessor profiles. Every syntax form outside a
claimed frontend contract must continue to fail closed.

OpenStatSpec will expand the frontend in independently versioned stages. It will
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 specification-complete as a release candidate. Adapter claims
remain pending and separately gated; adapter evidence does not block
specification publication.
Frontend 0.3 is released in OpenStatSpec `v0.4.0`. Adapter claims remain
pending and separately gated; adapter evidence does not block specification
publication.

## Command classification

Expand Down
8 changes: 4 additions & 4 deletions docs/spss-syntax-frontend-profile-0.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## Status and boundary

Status: release candidate for the next OpenStatSpec minor release. This profile
is not published stable until a protected or signed specification tag targets
its exact reviewed commit and tag-context CI passes.
Status: released in OpenStatSpec `v0.4.0`. The protected specification tag is
Comment thread
TonisOrmisson marked this conversation as resolved.
Resolved
the immutable release identity and its exact tag-context CI passed before
publication.

This optional frontend profile maps a deliberately bounded SPSS-like command
language to Transformation Plan 0.1 or 0.2. Its request contract is
Expand Down Expand Up @@ -151,7 +151,7 @@ after inherited cases and the two published comment supersessions are applied.

An adapter claim for this profile MUST satisfy every gate below:

1. Pin the exact future specification release commit.
1. Pin the exact `v0.4.0` specification commit.
2. Accept only the exact Frontend 0.3 request contract for this suite.
3. Run all 90 effective Frontend 0.3 cases.
4. Preserve every inherited Plan 0.1/0.2 object and hash.
Expand Down
25 changes: 19 additions & 6 deletions src/openstatspec_specification/artifacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"0.2": "conformance/in-place-transformation-0.2.json",
}
V030_COMMIT = "cd8f198c68b849eb8ed018a894670a0904c2181d"
V040_RELEASE = "v0.4.0"
V030_PROFILE_DOCUMENTS = (
"docs/transformation-plan-profile-0.2.md",
"docs/spss-syntax-frontend-profile-0.2.md",
Expand Down Expand Up @@ -718,7 +719,7 @@ def validate_release_metadata(root: Path) -> None:
f"{relative}: stale release status remains",
)
roadmap = " ".join(_load_text(root, "ROADMAP.md").split())
_require("`v0.3.0` is the" in roadmap, "ROADMAP release tag mismatch")
_require(f"`{V040_RELEASE}` is the" in roadmap, "ROADMAP release tag mismatch")
_require(
"current public specification release and is immutable" in roadmap,
"ROADMAP release status mismatch",
Expand All @@ -727,13 +728,13 @@ def validate_release_metadata(root: Path) -> None:

frontend_03 = " ".join(_load_text(root, FRONTEND_03_PROFILE_DOCUMENT).split())
_require(
"Status: release candidate for the next OpenStatSpec minor release." in frontend_03
and "is not published stable until a protected or signed specification tag targets" in frontend_03
and "its exact reviewed commit and tag-context CI passes." in frontend_03,
f"{FRONTEND_03_PROFILE_DOCUMENT}: release-candidate status is missing",
f"Status: released in OpenStatSpec `{V040_RELEASE}`." in frontend_03
and "protected specification tag is the immutable release identity" in frontend_03
and "exact tag-context CI passed before publication." in frontend_03,
f"{FRONTEND_03_PROFILE_DOCUMENT}: stable release status is missing",
)
for phrase in (
"Pin the exact future specification release commit.",
f"Pin the exact `{V040_RELEASE}` specification commit.",
"Accept only the exact Frontend 0.3 request contract for this suite.",
"Run all 90 effective Frontend 0.3 cases.",
"Preserve every inherited Plan 0.1/0.2 object and hash.",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
Expand All @@ -747,6 +748,18 @@ def validate_release_metadata(root: Path) -> None:
f"{FRONTEND_03_PROFILE_DOCUMENT}: adapter claim gate is missing {phrase}",
)

changelog = " ".join(_load_text(root, "CHANGELOG.md").split())
_require(
f"## {V040_RELEASE} - 2026-08-21" in changelog
and f"OpenStatSpec `{V040_RELEASE}` publishes SPSS Syntax Frontend 0.3" in changelog,
"CHANGELOG v0.4.0 release entry is missing",
)
readme = " ".join(_load_text(root, "README.md").split())
_require(
f"was published in OpenStatSpec `{V040_RELEASE}`" in readme,
"README v0.4.0 Frontend 0.3 release wording is missing",
Comment thread
TonisOrmisson marked this conversation as resolved.
Resolved
)

classification = " ".join(
_load_text(root, "docs/spss-frontend-roadmap.md").split()
)
Expand Down
3 changes: 2 additions & 1 deletion tests/test_contract_artifacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def test_existing_frontend_03_manifest_artifact_type_fails_closed(
validate_contract_artifacts(root)


def test_v030_profile_status_is_consistently_released() -> None:
def test_v040_profile_status_is_consistently_released() -> None:
validate_release_metadata(ROOT)


Expand Down Expand Up @@ -159,6 +159,7 @@ def copied_artifacts(tmp_path: Path) -> Path:
shutil.copytree(ROOT / directory, tmp_path / directory)
shutil.copy2(ROOT / "CHANGELOG.md", tmp_path / "CHANGELOG.md")
shutil.copy2(ROOT / "ROADMAP.md", tmp_path / "ROADMAP.md")
shutil.copy2(ROOT / "README.md", tmp_path / "README.md")
return tmp_path


Expand Down