CI and images / lint (push) Successful in 2s
CI and images / extension-version (push) Successful in 2s
CI and images / frontend-build (push) Successful in 24s
CI and images / extension-test (push) Successful in 19s
CI and images / backend-lint-and-test (push) Successful in 46s
CI and images / integration (push) Successful in 2m47s
CI and images / sign-extension (push) Successful in 2s
CI and images / build-agent (push) Successful in 4s
CI and images / build-web (push) Successful in 1m59s
CI and images / smoke-web (push) Successful in 49s
CI and images / promote (push) Successful in 1s
CI and images / refresh-dev (push) Skipped
CI and images / unattended-failure (push) Skipped
Importer._import_media and Importer.attach_in_place each carried their own copy of the still-image filters (verify, minimum size, transparency, single colour) and of the phash step, and the copies had drifted: attach_in_place's transparency check had no guard for an OSError from decoding truncated pixel data, so that error escaped into DownloadService's per-file loop and ended the run with the remaining files unattached; its phash step swallowed every error and imported the broken file without a hash. Both paths now call _screen_still and _phash_of, which turn a decode error into an invalid_image skip. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>