fix(cli): preserve SynthID uncertainty in no-visible-mark message

The 'no signal' branch of the visible no-mark path claimed 'No AI provenance
signal found either', which reads as 'the image is clean'. A missing metadata
proxy is not proof an invisible pixel watermark (SynthID) is absent: it cannot
be detected once metadata is gone and may have been stripped upstream. The
message now preserves that uncertainty and routes to both 'all' (regenerate
pixels) and 'erase'. Regression-guarded by the SynthID/all asserts in
test_cli.py. CLAUDE.md visible-command note updated to match.

Also adds a 'Scope and non-goals' section (CLAUDE.md + README): removing
AI-provenance marks on the user's own content is in scope; stripping
stock/paid-content watermarks (Shutterstock/Getty/iStock, classifieds) is out
of scope by principle, not by difficulty.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Victor Kuznetsov
2026-06-13 19:30:49 -07:00
parent d8cdc9f478
commit 41a2af2ecb
4 changed files with 31 additions and 3 deletions
+5
View File
@@ -135,6 +135,11 @@ class TestVisibleCommand:
assert result.exit_code == 2, result.output
assert not output.exists()
assert "erase" in result.output
# The "no signal" branch must NOT imply the image is clean: a missing
# metadata proxy is not proof an invisible pixel watermark (SynthID) is
# absent, so the message preserves that uncertainty and routes to 'all'.
assert "SynthID" in result.output
assert "all" in result.output
def test_visible_auto_no_mark_routes_to_all_when_metadata(self, runner, tmp_path):
# An image whose only signal is an invisible/metadata watermark (here SD