diff --git a/CLAUDE.md b/CLAUDE.md index e946356..577d9b3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,7 +33,7 @@ Optional features and installation groups are documented in [`docs/installation. Command, gate, typing, and model-test invariants auto-load from [`.claude/rules/development.md`](.claude/rules/development.md). Environment recovery, CI behavior, and fixture policy live in [`docs/development.md`](docs/development.md). -Before a release, read [`docs/release-and-distribution.md`](docs/release-and-distribution.md). Keep the source-distribution public allowlist. +Before a release, read [`docs/release-and-distribution.md`](docs/release-and-distribution.md). Treat the release as complete only after PyPI, Homebrew, the Hugging Face Space, and the ComfyUI Registry are verified; conda is not published. Keep the source-distribution public allowlist. ## Module architecture diff --git a/docs/index.md b/docs/index.md index d73188b..5fed2f8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,7 +22,7 @@ to run the tool. Use the maintainer references only when changing the code. | [Development](development.md) | Environment setup, dependency recovery, CI behavior, and fixture policy. | | [Code provenance](code-provenance.md) | Required notices for licensed derivative work. | | [Verification plan](verification-plan.md) | Verification methods, completed measurements, and remaining validation gaps. | -| [Release and distribution](release-and-distribution.md) | PyPI, Homebrew, Hugging Face Space, and release workflow. | +| [Release and distribution](release-and-distribution.md) | PyPI, Homebrew, Hugging Face Space, ComfyUI Registry, and the release workflow. | | [Watermarking landscape](watermarking-landscape.md) | Vendor signals and detection approaches. | | [SynthID technical reference](synthid.md) | Mechanism, detector access, robustness, and implications for this project. | diff --git a/docs/release-and-distribution.md b/docs/release-and-distribution.md index 44e923e..347beb2 100644 --- a/docs/release-and-distribution.md +++ b/docs/release-and-distribution.md @@ -3,6 +3,21 @@ This page describes the release behavior defined in this repository. External registry state can change independently, so verify it during a release. +## Published surfaces + +A release is complete only after all four published surfaces are verified: + +| Surface | Published result | Automation | +|---|---|---| +| PyPI | The `remove-ai-watermarks` wheel and source distribution | `publish.yml` | +| Homebrew | The `remove-ai-watermarks` formula in `wiltodelta/homebrew-tap` | `distribute.yml` | +| Hugging Face Space | A factory rebuild of `wiltodelta/remove-ai-watermarks` against the new PyPI release | `distribute.yml` | +| ComfyUI Registry | A compatible release of `wiltodelta/ComfyUI-remove-ai-watermarks` with its own node version | `distribute.yml` and the node repository's workflows | + +The GitHub Release is the trigger and release record for this flow. Conda is +not a supported publishing surface: this repository has no conda recipe or +conda publication job. + ## Release sources of truth The package version appears in: @@ -43,7 +58,8 @@ PyPI API token from the repository. waits for the matching source distribution to appear on PyPI, then: - updates the Homebrew tap formula URL and SHA-256; -- triggers a factory rebuild of the Hugging Face Space. +- triggers a factory rebuild of the Hugging Face Space; +- synchronizes, tests, versions, and publishes the ComfyUI nodes. The workflow can also be started manually with an optional version input. diff --git a/pyproject.toml b/pyproject.toml index df686a9..71987b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "remove-ai-watermarks" -version = "0.26.1" +version = "0.26.2" description = "AI watermark remover for visible, invisible, and provenance marks in images and video" readme = "README.md" requires-python = ">=3.10.1" diff --git a/src/remove_ai_watermarks/__init__.py b/src/remove_ai_watermarks/__init__.py index a34122d..7b59708 100644 --- a/src/remove_ai_watermarks/__init__.py +++ b/src/remove_ai_watermarks/__init__.py @@ -32,7 +32,7 @@ _os.environ.setdefault("TRANSFORMERS_VERBOSITY", "error") _warnings.filterwarnings("ignore", message=r".*ImageProcessorFast.*") -__version__ = "0.26.1" +__version__ = "0.26.2" __all__ = [ "BatchSummary", diff --git a/tests/test_distribution_boundary.py b/tests/test_distribution_boundary.py index ce6993b..8c4c914 100644 --- a/tests/test_distribution_boundary.py +++ b/tests/test_distribution_boundary.py @@ -20,3 +20,13 @@ def test_sdist_has_explicit_public_boundary() -> None: assert _array_values(sdist_config, "include") == {"/src", "/LICENSE", "/README.md", "/pyproject.toml"} assert {"/data", "/tmp", "/.sc"} <= _array_values(sdist_config, "exclude") + + +def test_release_guide_names_every_published_surface() -> None: + """A release checklist must not silently forget a downstream surface.""" + root = Path(__file__).resolve().parents[1] + guide = (root / "docs" / "release-and-distribution.md").read_text(encoding="utf-8") + + for surface in ("PyPI", "Homebrew", "Hugging Face Space", "ComfyUI Registry"): + assert surface in guide + assert re.search(r"Conda is\s+not a supported publishing surface", guide) diff --git a/uv.lock b/uv.lock index 9cdaff2..8df8c5b 100644 --- a/uv.lock +++ b/uv.lock @@ -3331,7 +3331,7 @@ wheels = [ [[package]] name = "remove-ai-watermarks" -version = "0.26.1" +version = "0.26.2" source = { editable = "." } dependencies = [ { name = "c2pa-python" },