From cf695de57fc6472aac21fcd36fba2a584b615887 Mon Sep 17 00:00:00 2001 From: Victor Kuznetsov Date: Fri, 16 Oct 2026 12:15:03 -0700 Subject: [PATCH] Refresh the C2PA soft-binding snapshot and fix Ruff ICN001 The upstream registry gained be.immostory.videoseal.1 at revision d5960248, so `sync_c2pa_soft_bindings.py --check` failed lint on main and on every pull request. That step runs ahead of Ruff, which hid an ICN001 error in scripts/_corpus_scan.py; import `date` directly, as the sibling scripts do. Document the check's live-upstream behavior next to the refresh command. Co-Authored-By: Claude Opus 5.5 --- docs/module-internals.md | 4 ++++ scripts/_corpus_scan.py | 8 ++++---- .../_internal/_generated_c2pa_soft_bindings.py | 15 +++++++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/docs/module-internals.md b/docs/module-internals.md index 8fb3258..b83d915 100644 --- a/docs/module-internals.md +++ b/docs/module-internals.md @@ -637,6 +637,10 @@ the official C2PA registry. Refresh it with upstream schema invariants, records the exact source revision and writes a deterministic module. Runtime inspection remains offline, and registry membership is name-only evidence rather than proof that a compatible decoder ships. +`--check`, run by `maintain.sh` and the CI lint job ahead of Ruff, compares the +snapshot with the live upstream revision, so an upstream registry commit fails +lint on `main` and on every pull request until the snapshot is refreshed, and the +Ruff step behind it does not run until then. The GitHub API revision lookup sends `GITHUB_TOKEN` (or `GH_TOKEN`) when set, because the unauthenticated 60 requests/hour per IP limit is exhausted on shared CI runners; `.env.example` documents the variable. diff --git a/scripts/_corpus_scan.py b/scripts/_corpus_scan.py index cb86a8d..1638256 100644 --- a/scripts/_corpus_scan.py +++ b/scripts/_corpus_scan.py @@ -2,7 +2,7 @@ from __future__ import annotations -import datetime +from datetime import date from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -10,15 +10,15 @@ if TYPE_CHECKING: from pathlib import Path -def corpus_day(path: Path, corpus: Path) -> datetime.date | None: +def corpus_day(path: Path, corpus: Path) -> date | None: """Read the leading YYYY-MM-DD corpus segment, if present.""" try: - return datetime.date.fromisoformat(path.relative_to(corpus).parts[0]) + return date.fromisoformat(path.relative_to(corpus).parts[0]) except (ValueError, IndexError): return None -def corpus_files(corpus: Path, since: datetime.date | None, *, suffixes: Collection[str] | None = None) -> list[Path]: +def corpus_files(corpus: Path, since: date | None, *, suffixes: Collection[str] | None = None) -> list[Path]: """Return a deterministic recursive walk, optionally date- and suffix-bounded.""" if since is None: candidates = corpus.rglob("*") diff --git a/src/remove_ai_watermarks/_internal/_generated_c2pa_soft_bindings.py b/src/remove_ai_watermarks/_internal/_generated_c2pa_soft_bindings.py index 2e0d3dd..064cb42 100644 --- a/src/remove_ai_watermarks/_internal/_generated_c2pa_soft_bindings.py +++ b/src/remove_ai_watermarks/_internal/_generated_c2pa_soft_bindings.py @@ -1,7 +1,7 @@ """Generated C2PA soft-binding registry; do not edit by hand. Source: https://raw.githubusercontent.com/c2pa-org/softbinding-algorithm-list/main/softbinding-algorithm-list.json -Revision: d36d1c1742b1753ca064bb3307abfd95db912a28 +Revision: d5960248ab69c17dc194906d2ef7d11ad164be70 Source license: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) Changes: validated, ordered, and reduced to fields used at runtime; descriptions are shortened to their first sentence for display. @@ -12,7 +12,7 @@ from __future__ import annotations C2PA_SOFT_BINDING_SOURCE_URL = ( "https://raw.githubusercontent.com/c2pa-org/softbinding-algorithm-list/main/softbinding-algorithm-list.json" ) -C2PA_SOFT_BINDING_SOURCE_REVISION = "d36d1c1742b1753ca064bb3307abfd95db912a28" +C2PA_SOFT_BINDING_SOURCE_REVISION = "d5960248ab69c17dc194906d2ef7d11ad164be70" C2PA_SOFT_BINDING_SOURCE_LICENSE = "CC BY 4.0" C2PA_SOFT_BINDING_ROWS: tuple[ @@ -632,4 +632,15 @@ C2PA_SOFT_BINDING_ROWS: tuple[ (), False, ), + ( + 54, + "be.immostory.videoseal.1", + "watermark", + ("video",), + ("video/mp4",), + "ImmoStory AI deployment of Meta FAIR's Video Seal 1.0 invisible video watermark", + "2026-10-12T00:00:00.000Z", + (), + False, + ), )