• bvandeusen released this 2026-05-23 11:21:49 -04:00 | 758 commits to dev since this release

    Patch release rolling up live-migration findings and dogfood polish.

    Fixes

    • Engine pool leak: Celery task modules were creating a fresh engine per task call; high-fire-rate import_media_file exhausted Postgres max_connections. Centralized into one engine per worker process.
    • pg_dump URL: strip SQLAlchemy +psycopg/+asyncpg driver suffix before handing the URL to libpq backup/restore tools.
    • scan_directory idempotency: skip paths with non-failed ImportTask so re-triggered scans don't 3× duplicate work.
    • Modal redirect bug: <ImageViewer> now mounted globally in App.vue; tile clicks in Showcase/Artist views open as overlay instead of navigating to /gallery.

    UX

    • Thumbnail tiles 1.5× larger (gallery + masonry).
    • Settings view fluid width; new "Subscriptions" stat card on the system dashboard.
    • /subscriptions redesigned to a <v-data-table> of artists with expandable nested source rows (GS-style).

    Operator notes

    • Pull the new image; force-update app, worker, ml-worker, scheduler, beat services to pick up the engine-pool fix and the ruff cleanup. web (frontend) image is in the same build.
    • The Postgres max_connections=300 workaround in compose can stay; the new engine pool keeps active connections low single-digits per worker.
    • Backup tooling now works against postgresql+psycopg://... URLs end-to-end — backup → ingest cycle no longer needs the manual driver-strip workaround.
    Downloads