diff --git a/.github/scripts/test_execution_status.py b/.github/scripts/test_execution_status.py index 29bc68c..3c3cd25 100644 --- a/.github/scripts/test_execution_status.py +++ b/.github/scripts/test_execution_status.py @@ -35,7 +35,7 @@ def test_status_is_scoped_to_internal_continuation(self) -> None: self.assertIn( "Status: Public beta evaluation is approved for the GitHub source repository; the three bounded " - "Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.1`; " + "Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`; " "the Python `ethos-pdf` wheel at `0.1.1`; the npm `@docushell/ethos-pdf` CLI package " "at `0.1.2`; and the GitHub Release `v0.1.2` macOS arm64 and Linux x64 CLI artifacts.", text, @@ -91,7 +91,7 @@ def test_public_posture_boundary_remains_explicit(self) -> None: "Ethos is a deterministic document evidence layer for source-grounded verification and " "citation checking across native Ethos JSON and supported foreign parser outputs. The current " "beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, " - "`ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, " + "`ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, " "the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS " "arm64/Linux x64 CLI artifacts. PDFium-backed commands use caller-provided PDFium through " "`ETHOS_PDFIUM_LIBRARY_PATH`.", diff --git a/.github/scripts/test_milestone_e_package_publication_public_installation_availability.py b/.github/scripts/test_milestone_e_package_publication_public_installation_availability.py index 24493db..b95db6c 100644 --- a/.github/scripts/test_milestone_e_package_publication_public_installation_availability.py +++ b/.github/scripts/test_milestone_e_package_publication_public_installation_availability.py @@ -58,7 +58,7 @@ "Ethos is a deterministic document evidence layer for source-grounded verification and " "citation checking across native Ethos JSON and supported foreign parser outputs. The current " "beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, " - "`ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the " + "`ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the " "npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 " "CLI artifacts. PDFium-backed commands use caller-provided PDFium through " "`ETHOS_PDFIUM_LIBRARY_PATH`." @@ -88,9 +88,9 @@ "cargo add ethos-pdf@0.1.0", ) CURRENT_INSTALL_COMMANDS = ( - "cargo add ethos-doc-core@0.1.1", - "cargo add ethos-verify@0.1.1", - "cargo add ethos-pdf@0.1.1", + "cargo add ethos-doc-core@0.1.2", + "cargo add ethos-verify@0.1.2", + "cargo add ethos-pdf@0.1.2", ) FORBIDDEN_SCOPE_EXPANSION = [ "public reports are approved", diff --git a/.github/scripts/test_milestone_e_public_beta_source_only_approval.py b/.github/scripts/test_milestone_e_public_beta_source_only_approval.py index be35f56..1121347 100644 --- a/.github/scripts/test_milestone_e_public_beta_source_only_approval.py +++ b/.github/scripts/test_milestone_e_public_beta_source_only_approval.py @@ -46,7 +46,7 @@ "Ethos is a deterministic document evidence layer for source-grounded verification and " "citation checking across native Ethos JSON and supported foreign parser outputs. The current " "beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, " - "`ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the " + "`ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the " "npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 " "CLI artifacts. PDFium-backed commands use caller-provided PDFium through " "`ETHOS_PDFIUM_LIBRARY_PATH`." diff --git a/.github/scripts/test_milestone_e_public_evaluation_current_state_closeout.py b/.github/scripts/test_milestone_e_public_evaluation_current_state_closeout.py index c6fef3a..fe7cd3a 100644 --- a/.github/scripts/test_milestone_e_public_evaluation_current_state_closeout.py +++ b/.github/scripts/test_milestone_e_public_evaluation_current_state_closeout.py @@ -52,7 +52,7 @@ "Ethos is a deterministic document evidence layer for source-grounded verification and " "citation checking across native Ethos JSON and supported foreign parser outputs. The current " "beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, " - "`ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the " + "`ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the " "npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 " "CLI artifacts. PDFium-backed commands use caller-provided PDFium through " "`ETHOS_PDFIUM_LIBRARY_PATH`." diff --git a/.github/scripts/test_patch_0_1_1_public_install_wording_closeout.py b/.github/scripts/test_patch_0_1_1_public_install_wording_closeout.py index 1bbb33d..57ad951 100644 --- a/.github/scripts/test_patch_0_1_1_public_install_wording_closeout.py +++ b/.github/scripts/test_patch_0_1_1_public_install_wording_closeout.py @@ -72,7 +72,6 @@ def test_record_is_source_bound_and_indexed(self) -> None: self.assertEqual(SOURCE_TREE, git("rev-parse", f"{SOURCE_SHORT}^{{tree}}")) def test_readme_exposes_bounded_public_install_paths(self) -> None: - readme = normalized(README) record = normalized(RECORD) for expected in ( @@ -80,11 +79,11 @@ def test_readme_exposes_bounded_public_install_paths(self) -> None: "cargo add ethos-verify@0.1.1", "cargo add ethos-pdf@0.1.1", "python3 -m pip install ethos-pdf==0.1.1", - "The Python wheel is a thin wrapper around a caller-provided local `ethos` CLI binary.", + "The Python wheel is a thin wrapper around a caller-provided local ethos CLI binary.", "It does not bundle the CLI or PDFium.", - "`ETHOS_PDFIUM_LIBRARY_PATH`", + "ETHOS_PDFIUM_LIBRARY_PATH", ): - self.assertIn(expected, readme) + self.assertIn(expected, record) for expected in ( "npm install -g @docushell/ethos-pdf@0.1.1", diff --git a/.github/scripts/test_patch_0_1_2_public_install_wording_closeout.py b/.github/scripts/test_patch_0_1_2_public_install_wording_closeout.py index 89e8981..2cc5e6d 100644 --- a/.github/scripts/test_patch_0_1_2_public_install_wording_closeout.py +++ b/.github/scripts/test_patch_0_1_2_public_install_wording_closeout.py @@ -19,10 +19,8 @@ ROOT = Path(__file__).resolve().parents[2] RECORD = ROOT / "docs/validation/patch-0-1-2-public-install-wording-closeout-validation-2026-06-24.md" VALIDATION_README = ROOT / "docs/validation/README.md" -README = ROOT / "README.md" PYTHON_README = ROOT / "python/README.md" PYTHON_QUICKSTART = ROOT / "python/QUICKSTART.md" -CLAIMS = ROOT / "docs/public-boundary-claims.json" EXECUTION_STATUS = ROOT / "docs/execution-status.md" PUBLIC_RELEASE_CHECKLIST = ROOT / "docs/public-release-checklist.md" MAKEFILE = ROOT / "Makefile" @@ -66,14 +64,6 @@ def normalized(path: Path) -> str: return re.sub(r"\s+", " ", read(path)) -def normalized_public_readme() -> str: - return re.sub( - r"\s+", - " ", - " ".join(line.removeprefix("> ").strip() for line in read(README).splitlines()), - ) - - def git(*args: str) -> str: return subprocess.check_output( ["git", *args], @@ -96,18 +86,24 @@ def test_record_is_source_bound_and_indexed(self) -> None: self.assertEqual(SOURCE_COMMIT, git("rev-parse", SOURCE_SHORT)) self.assertEqual(SOURCE_TREE, git("rev-parse", f"{SOURCE_SHORT}^{{tree}}")) - def test_readme_exposes_only_published_0_1_2_install_paths(self) -> None: - readme = normalized(README) + def test_record_exposes_bounded_npm_cli_wording_at_time_of_closeout(self) -> None: + record = normalized(RECORD) - self.assertIn(CURRENT_PUBLIC_SENTENCE, normalized_public_readme()) - self.assertIn(NPM_INSTALL, readme) - self.assertIn(GITHUB_RELEASE, readme) + self.assertIn("The current public README status sentence is:", record) + self.assertIn("Rust library crates `ethos-doc-core`, `ethos-verify`, and", record) + self.assertIn("`ethos-pdf` at `0.1.1`", record) + self.assertIn("the Python `ethos-pdf` wheel at `0.1.1`", record) + self.assertIn("the npm > `@docushell/ethos-pdf@0.1.2` package", record) + self.assertIn(NPM_INSTALL, record) + self.assertIn( + "GitHub Release `v0.1.2` evaluation CLI archives for macOS arm64 and Linux x64 are also the current public CLI artifact references.", + record, + ) for expected in (*RUST_INSTALLS, PYTHON_INSTALL): - self.assertIn(expected, readme) + self.assertIn(expected, record) - self.assertNotIn("npm install -g @docushell/ethos-pdf@0.1.1", readme) - self.assertNotIn("python3 -m pip install ethos-pdf==0.1.2", readme) - self.assertNotIn("cargo add ethos-doc-core@0.1.2", readme) + self.assertNotIn("npm install -g @docushell/ethos-pdf@0.1.1", record) + self.assertNotIn("python3 -m pip install ethos-pdf==0.1.2", record) def test_python_package_docs_remain_on_published_pypi_baseline(self) -> None: for path in (PYTHON_README, PYTHON_QUICKSTART): @@ -118,25 +114,8 @@ def test_python_package_docs_remain_on_published_pypi_baseline(self) -> None: self.assertIn("does not bundle", text) self.assertIn("ETHOS_PDFIUM_LIBRARY_PATH", text) - def test_public_boundary_claims_track_current_mixed_install_wording(self) -> None: - payload = json.loads(read(CLAIMS)) - claims = payload["surfaces"]["readme"]["claims"] - - for expected in ( - "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs.", - "The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts.", - "PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`.", - PYTHON_INSTALL, - "The Python wheel is a thin wrapper around a caller-provided local `ethos` CLI binary.", - "It does not bundle the CLI or PDFium.", - NPM_INSTALL, - "The npm package vendors only the approved macOS arm64 and Linux x64 CLI binaries.", - GITHUB_RELEASE, - ): - self.assertIn(expected, claims) - def test_status_docs_record_retained_rust_python_boundaries(self) -> None: - for path in (RECORD, EXECUTION_STATUS, PUBLIC_RELEASE_CHECKLIST): + for path in (RECORD,): text = normalized(path) self.assertIn("@docushell/ethos-pdf@0.1.2", text) self.assertIn("v0.1.2", text) @@ -146,7 +125,7 @@ def test_status_docs_record_retained_rust_python_boundaries(self) -> None: self.assertIn("crates.io/PyPI `0.1.2` publication closeout records", text) def test_boundaries_and_public_path_hygiene(self) -> None: - for path in (RECORD, README, PYTHON_README, PYTHON_QUICKSTART): + for path in (RECORD, PYTHON_README, PYTHON_QUICKSTART): raw = read(path) lower = re.sub(r"\s+", " ", raw).lower() for forbidden in FORBIDDEN: diff --git a/.github/scripts/test_patch_0_1_2_readiness_prep.py b/.github/scripts/test_patch_0_1_2_readiness_prep.py index d96971b..01bef7c 100644 --- a/.github/scripts/test_patch_0_1_2_readiness_prep.py +++ b/.github/scripts/test_patch_0_1_2_readiness_prep.py @@ -102,17 +102,15 @@ def test_record_keeps_publication_and_support_boundaries_closed(self) -> None: self.assertNotIn(phrase, lower) self.assertIn("current public install baseline remains `0.1.1`", text) - def test_public_readme_uses_professional_beta_wording_without_version_drift(self) -> None: - text = read(README) + def test_prep_record_uses_professional_beta_wording_without_version_drift(self) -> None: + text = read(RECORD) lower = text.lower() self.assertIn("Status: public beta evaluation.", text) - self.assertIn("deterministic document evidence layer", text) - self.assertIn("source-grounded verification", text) + self.assertIn("Professional public README status wording", text) + self.assertIn("source-grounded verification layer", text) self.assertIn("ETHOS_PDFIUM_LIBRARY_PATH", text) - self.assertIn("cargo add ethos-doc-core@0.1.1", text) - self.assertIn("python3 -m pip install ethos-pdf==0.1.1", text) - self.assertIn("npm install -g @docushell/ethos-pdf@0.1.2", text) + self.assertIn("current public install baseline remains `0.1.1`", text) self.assertNotIn("not production-ready", lower) self.assertNotIn("not stable production surfaces", lower) for phrase in FORBIDDEN_RELEASE_CLAIMS: diff --git a/.github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py b/.github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py new file mode 100644 index 0000000..f9cdacc --- /dev/null +++ b/.github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +# +# Copyright 2026 The Ethos maintainers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# + +from __future__ import annotations + +import json +import re +import subprocess +import unittest +from pathlib import Path + +from makefile_guard import target_block + + +ROOT = Path(__file__).resolve().parents[2] +RECORD = ROOT / "docs/validation/patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md" +VALIDATION_README = ROOT / "docs/validation/README.md" +README = ROOT / "README.md" +PYTHON_README = ROOT / "python/README.md" +PYTHON_QUICKSTART = ROOT / "python/QUICKSTART.md" +CLAIMS = ROOT / "docs/public-boundary-claims.json" +EXECUTION_STATUS = ROOT / "docs/execution-status.md" +PUBLIC_RELEASE_CHECKLIST = ROOT / "docs/public-release-checklist.md" +MAKEFILE = ROOT / "Makefile" + +SOURCE_SHORT = "5ca6e23" +SOURCE_COMMIT = "5ca6e237bd12656f894c7a1d70fe57c7385a7c95" +SOURCE_TREE = "9d0f629bdfb89ae191d971ee4ec9f323a61fba84" +RUST_INSTALLS = ( + "cargo add ethos-doc-core@0.1.2", + "cargo add ethos-verify@0.1.2", + "cargo add ethos-pdf@0.1.2", +) +OLD_RUST_INSTALLS = ( + "cargo add ethos-doc-core@0.1.1", + "cargo add ethos-verify@0.1.1", + "cargo add ethos-pdf@0.1.1", +) +PYTHON_INSTALL = "python3 -m pip install ethos-pdf==0.1.1" +NPM_INSTALL = "npm install -g @docushell/ethos-pdf@0.1.2" +GITHUB_RELEASE = "GitHub Release `v0.1.2` also provides evaluation CLI archives for macOS arm64 and Linux x64." +CURRENT_PUBLIC_SENTENCE = ( + "Ethos is a deterministic document evidence layer for source-grounded verification and " + "citation checking across native Ethos JSON and supported foreign parser outputs. The current " + "beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, " + "`ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the " + "npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 " + "CLI artifacts. PDFium-backed commands use caller-provided PDFium through " + "`ETHOS_PDFIUM_LIBRARY_PATH`." +) +FORBIDDEN = ( + "production-ready", + "hosted surfaces approved", + "windows packaged artifacts approved", + "bundled pdfium approved", + "public benchmark claims approved", + "ethos-doc approved", + "ethos-rag approved", +) + + +def read(path: Path) -> str: + return path.read_text(encoding="utf-8") + + +def normalized(path: Path) -> str: + return re.sub(r"\s+", " ", read(path)) + + +def normalized_public_readme() -> str: + return re.sub( + r"\s+", + " ", + " ".join(line.removeprefix("> ").strip() for line in read(README).splitlines()), + ) + + +def git(*args: str) -> str: + return subprocess.check_output( + ["git", *args], + cwd=ROOT, + encoding="utf-8", + stderr=subprocess.DEVNULL, + ).strip() + + +class Patch012RustPublicInstallWordingCloseoutTests(unittest.TestCase): + def test_record_is_source_bound_and_indexed(self) -> None: + record = normalized(RECORD) + validation_readme = normalized(VALIDATION_README) + + self.assertIn(RECORD.name, validation_readme) + self.assertIn("patch 0.1.2 Rust public install wording closeout", normalized(VALIDATION_README)) + self.assertIn(f"Validated source HEAD before this record: `{SOURCE_SHORT}`", read(RECORD)) + self.assertIn(f"Patch 0.1.2 Rust public install wording closeout source commit: `{SOURCE_COMMIT}`", record) + self.assertIn(f"Patch 0.1.2 Rust public install wording closeout source tree: `{SOURCE_TREE}`", record) + self.assertEqual(SOURCE_COMMIT, git("rev-parse", SOURCE_SHORT)) + self.assertEqual(SOURCE_TREE, git("rev-parse", f"{SOURCE_SHORT}^{{tree}}")) + + def test_readme_exposes_published_rust_npm_and_cli_paths_only(self) -> None: + readme = normalized(README) + + self.assertIn(CURRENT_PUBLIC_SENTENCE, normalized_public_readme()) + for expected in (*RUST_INSTALLS, NPM_INSTALL, GITHUB_RELEASE, PYTHON_INSTALL): + self.assertIn(expected, readme) + for old in OLD_RUST_INSTALLS: + self.assertNotIn(old, readme) + self.assertNotIn("python3 -m pip install ethos-pdf==0.1.2", readme) + self.assertNotIn("npm install -g @docushell/ethos-pdf@0.1.1", readme) + + def test_python_package_docs_remain_on_published_pypi_baseline(self) -> None: + for path in (PYTHON_README, PYTHON_QUICKSTART): + text = normalized(path) + self.assertIn(PYTHON_INSTALL, text) + self.assertNotIn("ethos-pdf==0.1.2", text) + self.assertIn("caller-provided local `ethos` CLI binary", text) + self.assertIn("does not bundle", text) + self.assertIn("ETHOS_PDFIUM_LIBRARY_PATH", text) + + def test_public_boundary_claims_track_current_install_wording(self) -> None: + payload = json.loads(read(CLAIMS)) + claims = payload["surfaces"]["readme"]["claims"] + + for expected in ( + "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs.", + "The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts.", + "PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`.", + *RUST_INSTALLS, + PYTHON_INSTALL, + "The Python wheel is a thin wrapper around a caller-provided local `ethos` CLI binary.", + "It does not bundle the CLI or PDFium.", + NPM_INSTALL, + "The npm package vendors only the approved macOS arm64 and Linux x64 CLI binaries.", + GITHUB_RELEASE, + ): + self.assertIn(expected, claims) + + def test_status_docs_record_retained_python_and_surface_boundaries(self) -> None: + for path in (EXECUTION_STATUS, PUBLIC_RELEASE_CHECKLIST): + text = normalized(path) + self.assertIn(RECORD.name, text, str(path)) + self.assertIn("ethos-doc-core", text, str(path)) + self.assertIn("0.1.2", text, str(path)) + self.assertIn("ethos-pdf==0.1.1", text, str(path)) + self.assertIn("PyPI", text, str(path)) + self.assertIn("hosted", text.lower(), str(path)) + self.assertIn("production", text.lower(), str(path)) + + record = normalized(RECORD) + self.assertIn("ethos-doc-core", record) + self.assertIn("0.1.2", record) + self.assertIn("ethos-pdf==0.1.1", record) + self.assertIn("PyPI", record) + self.assertIn("hosted", record.lower()) + self.assertIn("production", record.lower()) + + def test_boundaries_and_public_path_hygiene(self) -> None: + for path in (RECORD, README, PYTHON_README, PYTHON_QUICKSTART): + raw = read(path) + lower = re.sub(r"\s+", " ", raw).lower() + for forbidden in FORBIDDEN: + self.assertNotIn(forbidden, lower, str(path)) + self.assertNotIn("/Users/", raw, str(path)) + self.assertNotIn("/private/tmp", raw, str(path)) + self.assertNotIn("/private/var", raw, str(path)) + self.assertNotIn("/var/folders", raw, str(path)) + self.assertNotIn("saumildiwaker", raw, str(path)) + + def test_release_candidate_prep_runs_rust_wording_after_crates_closeout(self) -> None: + makefile = read(MAKEFILE) + crates_closeout_guard = "$(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_closeout.py" + rust_wording_guard = "$(PYTHON) .github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py" + first_public_guard = "$(PYTHON) .github/scripts/test_first_public_release_artifact_evidence.py" + block = target_block("release-candidate-prep") + + self.assertIn(rust_wording_guard, block) + self.assertEqual(1, makefile.count(rust_wording_guard)) + self.assertLess(block.index(crates_closeout_guard), block.index(rust_wording_guard)) + self.assertLess(block.index(rust_wording_guard), block.index(first_public_guard)) + + +if __name__ == "__main__": + unittest.main() diff --git a/.github/scripts/test_patch_0_1_2_version_activation.py b/.github/scripts/test_patch_0_1_2_version_activation.py index 298aada..9b1edf3 100644 --- a/.github/scripts/test_patch_0_1_2_version_activation.py +++ b/.github/scripts/test_patch_0_1_2_version_activation.py @@ -82,18 +82,16 @@ def test_rust_and_python_versions_are_activated(self) -> None: self.assertIn('version = "0.1.2"', read(PYPROJECT)) self.assertIn('__version__ = "0.1.2"', read(PYTHON_INIT)) - def test_public_install_wording_waits_after_npm_candidate_refresh(self) -> None: + def test_version_activation_record_delays_public_install_wording(self) -> None: npm = json.loads(read(NPM_PACKAGE)) + record = normalized(RECORD) readme = read(README) self.assertEqual("0.1.2", npm["version"]) - self.assertIn("cargo add ethos-doc-core@0.1.1", readme) - self.assertIn("cargo add ethos-verify@0.1.1", readme) - self.assertIn("cargo add ethos-pdf@0.1.1", readme) + self.assertIn("current public install baseline remains `0.1.1`", record) + self.assertIn("does not approve public installation wording for `0.1.2`", record) self.assertIn("python3 -m pip install ethos-pdf==0.1.1", readme) - self.assertIn("npm install -g @docushell/ethos-pdf@0.1.2", readme) - for phrase in FORBIDDEN_RELEASE_CLAIMS: - self.assertNotIn(phrase, readme.lower()) + self.assertNotIn("python3 -m pip install ethos-pdf==0.1.2", readme) def test_boundaries_remain_closed(self) -> None: record = normalized(RECORD) diff --git a/.github/scripts/test_public_prealpha_wording_approval.py b/.github/scripts/test_public_prealpha_wording_approval.py index 398d71c..2949bf8 100644 --- a/.github/scripts/test_public_prealpha_wording_approval.py +++ b/.github/scripts/test_public_prealpha_wording_approval.py @@ -40,7 +40,7 @@ "Ethos is a deterministic document evidence layer for source-grounded verification and " "citation checking across native Ethos JSON and supported foreign parser outputs. The current " "beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, " - "`ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the " + "`ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the " "npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 " "CLI artifacts. PDFium-backed commands use caller-provided PDFium through " "`ETHOS_PDFIUM_LIBRARY_PATH`." diff --git a/.github/scripts/test_public_surface_posture.py b/.github/scripts/test_public_surface_posture.py index f511e59..d0087ab 100644 --- a/.github/scripts/test_public_surface_posture.py +++ b/.github/scripts/test_public_surface_posture.py @@ -51,9 +51,9 @@ def test_readme_status_matches_public_beta_evaluation_scope(self) -> None: self.assertIn("Python `ethos-pdf` wheel", normalized) self.assertIn("caller-provided PDFium", text) self.assertIn("release-scope work", text) - self.assertIn("cargo add ethos-doc-core@0.1.1", text) - self.assertIn("cargo add ethos-verify@0.1.1", text) - self.assertIn("cargo add ethos-pdf@0.1.1", text) + self.assertIn("cargo add ethos-doc-core@0.1.2", text) + self.assertIn("cargo add ethos-verify@0.1.2", text) + self.assertIn("cargo add ethos-pdf@0.1.2", text) self.assertIn("npm install -g @docushell/ethos-pdf@0.1.2", text) self.assertNotIn("not production-ready", text.lower()) self.assertNotIn("not stable production surfaces", text.lower()) diff --git a/.github/scripts/test_release_candidate_prep.py b/.github/scripts/test_release_candidate_prep.py index 06e5d7f..9d86bbd 100644 --- a/.github/scripts/test_release_candidate_prep.py +++ b/.github/scripts/test_release_candidate_prep.py @@ -72,6 +72,7 @@ "$(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_approval_request.py", "$(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_approval_decision.py", "$(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_closeout.py", + "$(PYTHON) .github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py", "$(PYTHON) .github/scripts/test_first_public_release_artifact_evidence.py", "$(PYTHON) .github/scripts/test_first_public_release_final_decider.py", "$(PYTHON) .github/scripts/test_first_public_release_linux_x64_artifact_evidence.py", diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bffdb5..71b32f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- boundary-exception: close patch `0.1.2` Rust public install wording for published crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` while keeping PyPI publication, hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces blocked. - boundary-exception: close patch `0.1.2` crates.io publication for Rust crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` while keeping Rust public install wording, PyPI publication, hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces blocked. - boundary-exception: record decider approval for bounded later crates.io publication of patch `0.1.2` Rust crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` while keeping actual operator publication, package tag creation, Rust public install wording, PyPI publication, hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces blocked. - boundary-exception: request decider review for exact patch `0.1.2` Rust crates.io publication of `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` while keeping `cargo publish`, package tag creation, Rust public install wording, PyPI publication, hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces blocked. diff --git a/Makefile b/Makefile index e2da0d0..29671ca 100644 --- a/Makefile +++ b/Makefile @@ -323,6 +323,7 @@ release-candidate-prep: $(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_approval_request.py $(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_approval_decision.py $(PYTHON) .github/scripts/test_patch_0_1_2_crates_publication_closeout.py + $(PYTHON) .github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py $(PYTHON) .github/scripts/test_first_public_release_artifact_evidence.py $(PYTHON) .github/scripts/test_first_public_release_final_decider.py $(PYTHON) .github/scripts/test_first_public_release_linux_x64_artifact_evidence.py diff --git a/README.md b/README.md index 14f59f1..415a9e9 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ > Ethos is a deterministic document evidence layer for source-grounded verification and > citation checking across native Ethos JSON and supported foreign parser outputs. The current > beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, -> `ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the npm +> `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the npm > `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI > artifacts. PDFium-backed commands use caller-provided PDFium through > `ETHOS_PDFIUM_LIBRARY_PATH`. @@ -122,9 +122,9 @@ ethos --help To add the currently approved Rust library crates to another Rust project: ```bash -cargo add ethos-doc-core@0.1.1 -cargo add ethos-verify@0.1.1 -cargo add ethos-pdf@0.1.1 +cargo add ethos-doc-core@0.1.2 +cargo add ethos-verify@0.1.2 +cargo add ethos-pdf@0.1.2 ``` To install the Python wrapper from PyPI: diff --git a/docs/execution-status.md b/docs/execution-status.md index 54e87e7..5ad7895 100644 --- a/docs/execution-status.md +++ b/docs/execution-status.md @@ -2,7 +2,7 @@ Date: 2026-06-24 Owner: product / decider -Status: Public beta evaluation is approved for the GitHub source repository; the three bounded Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.1`; the Python `ethos-pdf` wheel at `0.1.1`; the npm `@docushell/ethos-pdf` CLI package at `0.1.2`; and the GitHub Release `v0.1.2` macOS arm64 and Linux x64 CLI artifacts. Internal Milestone D source-only closeout remains complete, with Milestone E prep source-only closeout recorded for the internal prep boundary. Week 0 governance is accepted, WS-ENGINE Phase 1 has a real narrow PDFium path, WS-VERIFY-ALPHA has real deterministic evidence checks over native Ethos JSON and pinned OpenDataLoader output, WS-HARNESS has fail-closed readiness scaffolding, the Gate Zero corpus/hardware manifest and direct competitor lock are frozen/signed, ADR-0005 records an accepted `PROCEED` decision for internal Milestone B continuation, ADR-0006 closes package identifier/trademark validation, ADR-0007 locks the product direction, and patch `0.1.1` plus patch `0.1.2` publication/install wording closeouts are recorded for the approved evaluation surfaces. The exact current public sentence approved for source, Rust crate, Python wheel, npm package, macOS arm64 CLI artifact, and Linux x64 CLI artifact evaluation surfaces is: "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs. The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts. PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`." Milestone C has a source-tree internal artifact-validation closeout for the RAG chunk and security-report trust-loop checks. Milestone D has a source-tree internal source-only closeout recorded in `docs/validation/milestone-d-final-closeout-validation-2026-06-19.md`; the narrow `verify_citations` v1 contract in `docs/milestone-d-verify-citations-contract.md` remains carried by the existing `ethos verify` path and fixture-backed validation. The D `crop_element` v1 contract in `docs/milestone-d-crop-element-contract.md` is carried by the source-bound `ethos crop_element` CLI command plus existing `ethos verify --crop-dir` evidence artifacts; `ethos-core::crop_element` validates request identity, resolves one native document element, and emits descriptor/rendered crop metadata for that source-only contract when caller-provided source PDF bytes are bound. The `sandbox_subprocess` v1 contract in `docs/milestone-d-sandbox-subprocess-contract.md` classifies existing PDF worker-process timeout, memory-limit, stable-error, and diagnostics-gated stderr behavior without adding hardened sandbox rules. The first Milestone E prep boundary is recorded in `docs/milestone-e-prep-scope.md`, the internal fixture-candidate inventory is recorded in `docs/milestone-e-fixture-candidates.json`, internal fixture-promotion criteria are recorded in `docs/milestone-e-fixture-promotion-criteria.json`, the internal trust-loop walkthrough plan is recorded in `docs/milestone-e-internal-trust-loop-walkthrough.json`, the internal trust-loop use protocol is recorded in `docs/milestone-e-internal-trust-loop-use-protocol.json`, the internal trust-loop rehearsal/evidence matrix is recorded in `docs/milestone-e-internal-trust-loop-rehearsal-evidence-matrix.json`, and the internal trust-loop blocker ledger is recorded in `docs/milestone-e-internal-trust-loop-blocker-ledger.json`; these E prep JSON artifacts are schema-validated by `schemas/validate_examples.py` and only identify tracked trust-loop fixture candidates, internal promotion criteria, internal walkthrough sequencing, source-checkout rules for internal use, internal evidence-lane rehearsal planning, blocked-output alignment, evidence-lane alignment, diagnostic-boundary alignment, promotion-status alignment at `not_promoted_beyond_internal_fixture_planning`, source-status alignment at `source-only-pre-alpha-internal-milestone-e-prep`, applies-to binding alignment across current E source artifacts, required-before alignment for current readiness gates including `make milestone-e-prep remains green`, validation-record source-head alignment for each `Validated source HEAD before this record` line, and explicit blocker tracking that does not resolve or soften blockers. The Milestone E prep source-only closeout is recorded in `docs/validation/milestone-e-final-closeout-validation-2026-06-20.md` and does not resolve or soften blockers outside the approved public beta evaluation surfaces. Hosted surfaces, production positioning, Windows packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, public benchmark reports, public benchmark claims, and all speed/footprint/parser-quality/table-quality/production claims remain blocked. The controlled-run handoff remains `docs/gate-zero-evidence-runbook.md`; the accepted decision record is `docs/decisions/ADR-0005-gate-zero-decision.md`. +Status: Public beta evaluation is approved for the GitHub source repository; the three bounded Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`; the Python `ethos-pdf` wheel at `0.1.1`; the npm `@docushell/ethos-pdf` CLI package at `0.1.2`; and the GitHub Release `v0.1.2` macOS arm64 and Linux x64 CLI artifacts. Internal Milestone D source-only closeout remains complete, with Milestone E prep source-only closeout recorded for the internal prep boundary. Week 0 governance is accepted, WS-ENGINE Phase 1 has a real narrow PDFium path, WS-VERIFY-ALPHA has real deterministic evidence checks over native Ethos JSON and pinned OpenDataLoader output, WS-HARNESS has fail-closed readiness scaffolding, the Gate Zero corpus/hardware manifest and direct competitor lock are frozen/signed, ADR-0005 records an accepted `PROCEED` decision for internal Milestone B continuation, ADR-0006 closes package identifier/trademark validation, ADR-0007 locks the product direction, and patch `0.1.1` plus patch `0.1.2` publication/install wording closeouts are recorded for the approved evaluation surfaces. The exact current public sentence approved for source, Rust crate, Python wheel, npm package, macOS arm64 CLI artifact, and Linux x64 CLI artifact evaluation surfaces is: "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs. The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts. PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`." Milestone C has a source-tree internal artifact-validation closeout for the RAG chunk and security-report trust-loop checks. Milestone D has a source-tree internal source-only closeout recorded in `docs/validation/milestone-d-final-closeout-validation-2026-06-19.md`; the narrow `verify_citations` v1 contract in `docs/milestone-d-verify-citations-contract.md` remains carried by the existing `ethos verify` path and fixture-backed validation. The D `crop_element` v1 contract in `docs/milestone-d-crop-element-contract.md` is carried by the source-bound `ethos crop_element` CLI command plus existing `ethos verify --crop-dir` evidence artifacts; `ethos-core::crop_element` validates request identity, resolves one native document element, and emits descriptor/rendered crop metadata for that source-only contract when caller-provided source PDF bytes are bound. The `sandbox_subprocess` v1 contract in `docs/milestone-d-sandbox-subprocess-contract.md` classifies existing PDF worker-process timeout, memory-limit, stable-error, and diagnostics-gated stderr behavior without adding hardened sandbox rules. The first Milestone E prep boundary is recorded in `docs/milestone-e-prep-scope.md`, the internal fixture-candidate inventory is recorded in `docs/milestone-e-fixture-candidates.json`, internal fixture-promotion criteria are recorded in `docs/milestone-e-fixture-promotion-criteria.json`, the internal trust-loop walkthrough plan is recorded in `docs/milestone-e-internal-trust-loop-walkthrough.json`, the internal trust-loop use protocol is recorded in `docs/milestone-e-internal-trust-loop-use-protocol.json`, the internal trust-loop rehearsal/evidence matrix is recorded in `docs/milestone-e-internal-trust-loop-rehearsal-evidence-matrix.json`, and the internal trust-loop blocker ledger is recorded in `docs/milestone-e-internal-trust-loop-blocker-ledger.json`; these E prep JSON artifacts are schema-validated by `schemas/validate_examples.py` and only identify tracked trust-loop fixture candidates, internal promotion criteria, internal walkthrough sequencing, source-checkout rules for internal use, internal evidence-lane rehearsal planning, blocked-output alignment, evidence-lane alignment, diagnostic-boundary alignment, promotion-status alignment at `not_promoted_beyond_internal_fixture_planning`, source-status alignment at `source-only-pre-alpha-internal-milestone-e-prep`, applies-to binding alignment across current E source artifacts, required-before alignment for current readiness gates including `make milestone-e-prep remains green`, validation-record source-head alignment for each `Validated source HEAD before this record` line, and explicit blocker tracking that does not resolve or soften blockers. The Milestone E prep source-only closeout is recorded in `docs/validation/milestone-e-final-closeout-validation-2026-06-20.md` and does not resolve or soften blockers outside the approved public beta evaluation surfaces. Hosted surfaces, production positioning, Windows packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, public benchmark reports, public benchmark claims, and all speed/footprint/parser-quality/table-quality/production claims remain blocked. The controlled-run handoff remains `docs/gate-zero-evidence-runbook.md`; the accepted decision record is `docs/decisions/ADR-0005-gate-zero-decision.md`. Older Milestone E paragraphs below preserve historical review records and their blockers at the time they were written. Patch `0.1.1` closeout records supersede those historical blockers only for the approved source, Rust crate, Python wheel, npm package, macOS arm64 CLI artifact, and Linux x64 CLI artifact evaluation surfaces. @@ -66,6 +66,13 @@ installation wording remains blocked until a separate wording and availability c installation remains at `ethos-pdf==0.1.1` until separate PyPI `0.1.2` approval, operator publication, and closeout records pass. +Patch `0.1.2` Rust public install wording closeout is recorded in +`docs/validation/patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md`. +The public README and public boundary inventory now point Rust crate installation to +`ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`. Python installation remains at +`ethos-pdf==0.1.1` until separate PyPI `0.1.2` approval, operator publication, and closeout +records pass. + Public approval lane blocker prep is recorded in `docs/milestone-e-public-approval-lane-blockers.json` and schema-bound by `schemas/ethos-milestone-e-public-approval-lane-blockers.schema.json`. This public approval lane @@ -362,4 +369,4 @@ The patch `0.1.2` npm vendor refresh in `docs/validation/patch-0-1-2-npm-vendor- ## PM Rule -Public language may use this exact approved sentence on the current source, Rust crate, Python wheel, npm package, macOS arm64 CLI artifact, and Linux x64 CLI artifact evaluation surfaces: "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs. The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts. PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`." All wording beyond that sentence still requires claim-audit and decider review for the exact surface. Do not describe Ethos as having public benchmark validation, production readiness, broad parser completeness, speed, footprint, parser-quality, or table-quality claims. Hosted surfaces, Windows packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, and `ethos-rag` remain blocked. Internal parser work should proceed only when it supports accepted evidence paths or the trust layer; the product-differentiating path remains verification and grounding first, with parser expansion serving that path. +Public language may use this exact approved sentence on the current source, Rust crate, Python wheel, npm package, macOS arm64 CLI artifact, and Linux x64 CLI artifact evaluation surfaces: "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs. The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts. PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`." All wording beyond that sentence still requires claim-audit and decider review for the exact surface. Do not describe Ethos as having public benchmark validation, production readiness, broad parser completeness, speed, footprint, parser-quality, or table-quality claims. Hosted surfaces, Windows packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, and `ethos-rag` remain blocked. Internal parser work should proceed only when it supports accepted evidence paths or the trust layer; the product-differentiating path remains verification and grounding first, with parser expansion serving that path. diff --git a/docs/public-boundary-claims.json b/docs/public-boundary-claims.json index cf3bb5f..702bf08 100644 --- a/docs/public-boundary-claims.json +++ b/docs/public-boundary-claims.json @@ -5,9 +5,12 @@ "path": "README.md", "claims": [ "Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs.", - "The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.1`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts.", + "The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts.", "PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`.", "PDFium-backed commands require caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`.", + "cargo add ethos-doc-core@0.1.2", + "cargo add ethos-verify@0.1.2", + "cargo add ethos-pdf@0.1.2", "python3 -m pip install ethos-pdf==0.1.1", "The Python wheel is a thin wrapper around a caller-provided local `ethos` CLI binary.", "It does not bundle the CLI or PDFium.", diff --git a/docs/public-release-checklist.md b/docs/public-release-checklist.md index 5c72718..12b2f72 100644 --- a/docs/public-release-checklist.md +++ b/docs/public-release-checklist.md @@ -143,6 +143,14 @@ blocked, Windows packaged artifacts remain blocked, bundled project-maintained P blocked, `ethos-doc` remains blocked, `ethos-rag` remains blocked, and public benchmark claims remain blocked. +Patch `0.1.2` Rust public install wording closeout is recorded in +`docs/validation/patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md`. +README and claim-inventory wording now point Rust crate installation to `ethos-doc-core`, +`ethos-verify`, and `ethos-pdf` at `0.1.2`. PyPI publication remains blocked, hosted surfaces +remain blocked, production positioning remains blocked, Windows packaged artifacts remain blocked, +bundled project-maintained PDFium builds remain blocked, `ethos-doc` remains blocked, `ethos-rag` +remains blocked, and public benchmark claims remain blocked. + ## Required Before Public Push - Package-name and trademark decision is closed by accepted ADR-0006 in diff --git a/docs/validation/README.md b/docs/validation/README.md index 1cf910d..78ca7f2 100644 --- a/docs/validation/README.md +++ b/docs/validation/README.md @@ -733,6 +733,11 @@ recording the exact current-main source candidate and required follow-up evidenc `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` `0.1.2`; Rust crate public installation wording, PyPI publication, hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces remain blocked until separate closeout or approval records pass. +- `patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md` - patch 0.1.2 + Rust public install wording closeout validation records README and public claim-inventory wording + for `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`; PyPI publication, hosted, + production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces remain + blocked until separate closeout or approval records pass. - `milestone-e-validation-command-index-validation-2026-06-20.md` - internal Milestone E validation-command index validation passed through command-alignment checks, schema enum checks, row-record checks, public-surface posture checks, `make milestone-e-prep`, and diff hygiene; the diff --git a/docs/validation/patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md b/docs/validation/patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md new file mode 100644 index 0000000..f344132 --- /dev/null +++ b/docs/validation/patch-0-1-2-rust-public-install-wording-closeout-validation-2026-06-25.md @@ -0,0 +1,65 @@ +# Patch 0.1.2 Rust Public Install Wording Closeout Validation - 2026-06-25 + +Validated source HEAD before this record: `5ca6e23`. + +Patch 0.1.2 Rust public install wording closeout source commit: `5ca6e237bd12656f894c7a1d70fe57c7385a7c95`. + +Patch 0.1.2 Rust public install wording closeout source tree: `9d0f629bdfb89ae191d971ee4ec9f323a61fba84`. + +Status: **patch 0.1.2 Rust public install wording recorded** + +This record closes only the bounded patch `0.1.2` Rust public install wording lane after crates.io +publication closeout for `ethos-doc-core`, `ethos-verify`, and `ethos-pdf`. It does not approve +Python PyPI `0.1.2` publication, hosted surfaces, production positioning, Windows packaged +artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, public benchmark +reports, public benchmark claims, or broader public wording. + +## Public README Install Wording + +Rust crate installation now points to the published `0.1.2` crates: + +```sh +cargo add ethos-doc-core@0.1.2 +cargo add ethos-verify@0.1.2 +cargo add ethos-pdf@0.1.2 +``` + +The current public README sentence is: + +```text +Ethos is a deterministic document evidence layer for source-grounded verification and citation checking across native Ethos JSON and supported foreign parser outputs. The current beta includes the GitHub source repository, Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel at `0.1.1`, the npm `@docushell/ethos-pdf@0.1.2` package, and GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts. PDFium-backed commands use caller-provided PDFium through `ETHOS_PDFIUM_LIBRARY_PATH`. +``` + +## Retained Blockers + +- Python installation remains at `ethos-pdf==0.1.1` until separate PyPI `0.1.2` publication + records pass. +- Hosted surfaces remain blocked. +- Production positioning remains blocked. +- Public benchmark reports remain blocked. +- Public benchmark claims remain blocked. +- Windows packaged artifacts remain blocked. +- Bundled project-maintained PDFium builds remain blocked. +- `ethos-doc` remains blocked. +- `ethos-rag` remains blocked. +- PDFium remains caller-provided through `ETHOS_PDFIUM_LIBRARY_PATH`. + +## Commands + +```sh +python3 .github/scripts/test_patch_0_1_2_rust_public_install_wording_closeout.py +python3 .github/scripts/test_patch_0_1_2_public_install_wording_closeout.py +python3 .github/scripts/test_patch_0_1_2_crates_publication_closeout.py +python3 .github/scripts/test_public_surface_posture.py +python3 .github/scripts/public_boundary_claims_gate.py +make release-candidate-prep PYTHON=python3 +git diff --check +``` + +## Result + +```text +patch 0.1.2 Rust public install wording closeout recorded +README and public boundary claims now point Rust crate installation to 0.1.2 +Python PyPI, hosted, production, Windows, bundled PDFium, benchmark, ethos-doc, and ethos-rag surfaces remain blocked +```