• bvandeusen released this 2026-05-26 01:42:21 -04:00 | 623 commits to dev since this release

    What's new

    Worker no longer hangs on animated WebPs

    • _transparency_pct and compute_phash now short-circuit is_animated images. Previously PIL's getchannel("A") iterated every frame of a multi-frame WebP, exceeding Celery's 300s soft / 360s hard time limits → SIGKILL and stuck-in-processing rows. Operator-flagged 2026-05-26.

    Gallery-dl post-level sidecars are no longer invisible (BIG)

    • gallery-dl writes 01_HOLLOW-ICHIGO.png but the sidecar is HOLLOW-ICHIGO.json (post stem, no NN_ prefix). FC's find_sidecar only checked <media>.json and <media-stem>.json; it never stripped the prefix. Since FC-3 shipped, every gallery-dl post-level sidecar has been silently invisible. Now strips ^\d+_ from the media stem before lookup. After deploy: run a deep scan of /import against the GS download dir and your post table should finally populate from your existing 57k images.

    Browser extension XPI now actually bundles into :latest

    • build.yml's sign-extension step now uses browser_download_url (the canonical Forgejo asset binary endpoint) instead of /releases/assets/<id> (which returns JSON metadata).
    • curl -f added so HTTP errors fail the build instead of silently writing 404-text-as-XPI.
    • ZIP magic-byte check (PK) on the downloaded file as a defense-in-depth guard.
    • Extension version bumped to 1.0.3 to escape the AMO "version already exists" lock from the earlier partial-failure cycle.

    FC-Cleanup backend (partial — Tasks 1-6 of 17)

    • New migration 0020_library_audit_run — backs async transparency / single_color audits.
    • LibraryAuditRun model + registered in models package.
    • backend/app/services/audits/transparency.py + single_color.py — pure-function rule modules.
    • cleanup_service.py gains project_min_dimension_violations / delete_min_dimension_violations / start_audit_run / apply_audit_run / cancel_audit_run (+ 3 exception classes).
    • backend/app/tasks/library_audit.py::scan_library_for_rule — keyset-paginated PIL inspection task on maintenance queue, soft_time_limit=7200, time_limit=7500. Inherits FC-3i task_run lifecycle.

    This backend is currently dead code from a user perspective — no API or UI exposes it yet. Tasks 7-16 (API blueprint + Pinia store + 4 cards + SettingsView integration) ship in v26.05.25.7.

    Memory banked

    • reference-gallerydl-sidecar-layout — don't repeat the prefix-strip miss
    • reference-forgejo-actions-no-artifact-v4 — Forgejo doesn't support upload-artifact@v4; use Release Assets for cross-job handoff
    • reference-image-record-sha256-fixture — image_record.sha256 is varchar(64); fake fixtures must use ljust(64,...)[:64]
    • reference-path-suffix-sanitize — Path.suffix on URL-encoded basenames returns garbage; sanitize before bounded VARCHAR

    Schema changes

    • 0020_library_audit_run — new table, additive, no backfill needed

    What's still pending

    • FC-Cleanup frontend (Pinia store, 4 cards, CleanupView, SettingsView tab) → v26.05.25.7
    • The :latest extension XPI should land in this image — if it doesn't, see the diagnostic dump in build.yml's sign-extension step.

    🤖 Generated with Claude Code

    Downloads