From fc23298f1057ec5d78ce92902fb5fc5d74c78ebc Mon Sep 17 00:00:00 2001 From: TimeLordRaps Date: Tue, 1 Sep 2026 08:12:07 -0700 Subject: [PATCH] chore(release): finalize VSTD 1.2.0 --- .zenodo.json | 3 ++- CHANGELOG.md | 2 +- CITATION.cff | 3 ++- README.md | 8 ++++---- docs/guides.html | 6 +++--- docs/index.html | 8 ++++---- scripts/check_presentation.py | 13 ++++++++++--- scripts/check_release_metadata.py | 4 ++++ tests/test_presentation_surface.py | 6 +++++- tests/test_release_artifacts.py | 20 ++++++++++++++++++-- 10 files changed, 53 insertions(+), 20 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index acb185a..9546e23 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -4,7 +4,7 @@ "name": "Roost, Tyler" } ], - "description": "Release-candidate metadata for a verification-domain language and Python reference implementation that packages bounded computational claims with explicit evidence, checking mechanisms, limits, refutation conditions, provenance, and reproducibility information. It does not replace native domain verifiers or strengthen their results. Publication metadata is assigned only after the release exists.", + "description": "Version 1.2.0 of a verification-domain language and Python reference implementation that packages bounded computational claims with explicit evidence, checking mechanisms, limits, refutation conditions, provenance, and reproducibility information. It does not replace native domain verifiers or strengthen their results.", "keywords": [ "verification", "provenance", @@ -17,6 +17,7 @@ "bounded claims" ], "license": "Apache-2.0", + "publication_date": "2026-09-01", "title": "Verifier Standard (VSTD): Bounded, Refutable Evidence for Computational Claims", "version": "1.2.0", "upload_type": "software" diff --git a/CHANGELOG.md b/CHANGELOG.md index 52a4d9e..22d6f71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ > Coordinated Universal Time (UTC); Verifier Standard (VSTD); ZIP archive format (ZIP); > zero-identity/zero-knowledge (ZIZK). -## 1.2.0 - UNRELEASED +## 1.2.0 - 2026-09-01 ### Public surface and integrations diff --git a/CITATION.cff b/CITATION.cff index 5e9e71e..78d9f93 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,10 +1,11 @@ cff-version: 1.2.0 -message: "This describes the Verifier Standard (VSTD) 1.2.0 release candidate; cite the published release after it exists." +message: "If you use the Verifier Standard (VSTD) or its reference implementation, cite this release." title: "Verifier Standard (VSTD): Bounded, Refutable Evidence for Computational Claims" type: software authors: - name: "TimeLordRaps" version: 1.2.0 +date-released: 2026-09-01 license: Apache-2.0 repository-code: "https://github.com/TimeLordRaps/verifier" keywords: diff --git a/README.md b/README.md index e732ba8..3aafbad 100644 --- a/README.md +++ b/README.md @@ -213,8 +213,8 @@ The distribution name is `verifier-standard`. The published base package has no required third-party runtime dependencies. ```bash -python -m pip install verifier-standard # latest published release -python -m pip install . # current release-candidate checkout +python -m pip install "verifier-standard==1.2.0" # exact published release +python -m pip install . # current source checkout python -m pip install ".[yaml]" # YAML Ain't Markup Language (YAML) manifests python -m pip install ".[jsonschema]" # JSON Schema validation python -m pip install ".[seal]" # optional Ed25519 artifact sealing @@ -378,8 +378,8 @@ gh attestation verify PATH_TO_DOWNLOADED_ASSET --repo TimeLordRaps/verifier ``` Use [RELEASING.md](RELEASING.md) to verify the manifest, tag, artifact attestations, -package name, and historical compatibility. The current checkout is an unreleased -1.2.0 candidate; use the [latest release page](https://github.com/TimeLordRaps/verifier/releases/latest) +package name, and historical compatibility. Version 1.2.0 is the current release, +published on 2026-09-01; use its [versioned release page](https://github.com/TimeLordRaps/verifier/releases/tag/v1.2.0) for published citation and artifact coordinates. ## Claims, security, and contribution diff --git a/docs/guides.html b/docs/guides.html index f383672..33e2edb 100644 --- a/docs/guides.html +++ b/docs/guides.html @@ -42,10 +42,10 @@

Find the exact boundary.

Interoperability material below uses Supply Chain Integrity, Transparency, and Trust (SCITT).

Documentation coordinate: - verifier-standard 1.2.0 unreleased candidate. The assembled site also + verifier-standard 1.2.0, released 2026-09-01. The assembled site also carries machine-readable build metadata; - published tags and release - artifacts preserve historical coordinates. Normative ownership remains under + the versioned release + artifacts preserve this historical coordinate. Normative ownership remains under standard/.

Start with the quickstart diff --git a/docs/index.html b/docs/index.html index 0151f66..fbf1b91 100644 --- a/docs/index.html +++ b/docs/index.html @@ -120,10 +120,10 @@

Useful without pretending to be total.

Current implementation status

VSTD is a maintainer-led alpha project specification. Compatibility VSTD-4 and Graph paths remain NOT_ESTABLISHED candidates. Separate evidence-bound VSTD-4, VSTD-5, Graph-profile, and assurance-event paths rerun exact registered mechanisms from embedded evidence; no real external witness is claimed by this repository. The project has no demonstrated external adoption, independent implementation, interoperability deployment, or third-party security review.

Artifact-control boundary: freeze preserves exact bytes and sealing is not encryption. A thaw sidecar alone is unkeyed metadata and remains NOT_ESTABLISHED; clean or dirty status requires the actual supplied parent to verify as sealed with every recorded parent coordinate matching. This current comparison does not authenticate the historical copy operation or external continuity.

-

Release coordinate: this branch - documents verifier-standard 1.2.0 as an unreleased candidate. Use - GitHub Releases for - the latest published artifact.

+

Release coordinate: + verifier-standard 1.2.0, released 2026-09-01. Use the + versioned GitHub release + for published artifacts and citation coordinates.

Review the maturity table Report an ambiguity or counterexample diff --git a/scripts/check_presentation.py b/scripts/check_presentation.py index 10f265b..dfa567e 100644 --- a/scripts/check_presentation.py +++ b/scripts/check_presentation.py @@ -272,6 +272,7 @@ def check_versions(errors: list[str]) -> None: re.MULTILINE, ) zenodo = json.loads((ROOT / ".zenodo.json").read_text(encoding="utf-8")) + zenodo_date = zenodo.get("publication_date") changelog = (ROOT / "CHANGELOG.md").read_text(encoding="utf-8") found = { "src/verifier/__init__.py": None if init_match is None else init_match.group(1), @@ -297,8 +298,14 @@ def check_versions(errors: list[str]) -> None: errors.append("unreleased CITATION.cff must not fabricate date-released") if "release candidate" not in citation_text.lower(): errors.append("unreleased CITATION.cff must identify the release candidate") - elif citation_date is None or citation_date.group(1) != dated.group(1): - errors.append("CITATION.cff date-released must match the dated CHANGELOG heading") + if zenodo_date is not None: + errors.append("unreleased .zenodo.json must not fabricate publication_date") + else: + assert dated is not None + if citation_date is None or citation_date.group(1) != dated.group(1): + errors.append("CITATION.cff date-released must match the dated CHANGELOG heading") + if zenodo_date != dated.group(1): + errors.append(".zenodo.json publication_date must match the dated CHANGELOG heading") def maturity_table_violations(readme: str) -> list[str]: @@ -377,7 +384,7 @@ def check_claim_boundaries(errors: list[str]) -> None: "VSTD evaluates bounded validity propositions about computational processes", "RUST is the inverse-TRUST diagnostic mechanic", "cryptographic zero knowledge can enclose", - "The current checkout is an unreleased", + "Version 1.2.0 is the current release", ) for phrase in required_readme: if phrase not in readme: diff --git a/scripts/check_release_metadata.py b/scripts/check_release_metadata.py index 7c38575..92e6ebf 100644 --- a/scripts/check_release_metadata.py +++ b/scripts/check_release_metadata.py @@ -69,6 +69,10 @@ def require_finalized(root: Path, version: str) -> None: zenodo = json.loads((root / ".zenodo.json").read_text(encoding="utf-8")) if zenodo.get("version") != version: raise ValueError("Zenodo version does not match the release coordinate") + if zenodo.get("publication_date") != release_date: + raise ValueError( + "Zenodo publication_date must match the CHANGELOG release date" + ) description = str(zenodo.get("description", "")).lower() if "release-candidate" in description or "after the release exists" in description: raise ValueError("Zenodo metadata still describes an unpublished candidate") diff --git a/tests/test_presentation_surface.py b/tests/test_presentation_surface.py index 01c54ae..5a629af 100644 --- a/tests/test_presentation_surface.py +++ b/tests/test_presentation_surface.py @@ -236,10 +236,14 @@ def test_pages_artifact_serves_every_canonical_schema_id(tmp_path: Path) -> None "canonical_base_url": "https://timelordraps.github.io/verifier/", "documentation_version": "1.2.0", "normative_source": "standard/", - "release_state": "UNRELEASED_CANDIDATE", + "release_state": "RELEASED", "schema_version": 1, "source_ref": "test-commit", } + for page in (output / "index.html", output / "guides.html"): + text = page.read_text(encoding="utf-8") + assert "released 2026-09-01" in text + assert "unreleased candidate" not in text.lower() sources = sorted( ( *ROOT.joinpath("receipts/schema").glob("*.json"), diff --git a/tests/test_release_artifacts.py b/tests/test_release_artifacts.py index 7b54aca..553acf0 100644 --- a/tests/test_release_artifacts.py +++ b/tests/test_release_artifacts.py @@ -416,7 +416,13 @@ def _write_final_release_metadata(root: Path) -> None: encoding="utf-8", ) (root / ".zenodo.json").write_text( - json.dumps({"version": "1.2.0", "description": "Final publication metadata."}), + json.dumps( + { + "version": "1.2.0", + "publication_date": "2026-08-26", + "description": "Final publication metadata.", + } + ), encoding="utf-8", ) @@ -429,6 +435,7 @@ def _write_final_release_metadata(root: Path) -> None: "mismatched_citation_date", "candidate_citation", "candidate_zenodo", + "mismatched_zenodo_date", "package_version", ), ) @@ -451,8 +458,17 @@ def test_release_metadata_gate_rejects_unfinalized_or_inconsistent_state( elif fault == "candidate_zenodo": path = tmp_path / ".zenodo.json" path.write_text( - json.dumps({"version": "1.2.0", "description": "Release-candidate metadata."}) + json.dumps( + { + "version": "1.2.0", + "publication_date": "2026-08-26", + "description": "Release-candidate metadata.", + } + ) ) + elif fault == "mismatched_zenodo_date": + path = tmp_path / ".zenodo.json" + path.write_text(path.read_text().replace("2026-08-26", "2026-08-25")) else: path = tmp_path / "pyproject.toml" path.write_text(path.read_text().replace("1.2.0", "1.1.3"))