-
released this
2026-05-23 11:21:49 -04:00 | 758 commits to dev since this releasePatch 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_fileexhausted Postgresmax_connections. Centralized into one engine per worker process. - pg_dump URL: strip SQLAlchemy
+psycopg/+asyncpgdriver 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 inApp.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.
/subscriptionsredesigned 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,beatservices to pick up the engine-pool fix and the ruff cleanup.web(frontend) image is in the same build. - The Postgres
max_connections=300workaround 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
- Engine pool leak: Celery task modules were creating a fresh engine per task call; high-fire-rate