-
released this
2026-05-26 16:41:34 -04:00 | 587 commits to dev since this releasePR #23 → main. Pinned head SHA
fb41b90; verified merge commit88cfb3dsecond parent matches.Features
-
Thumbnail backfill — new
backfill_thumbnailsCelery task +POST /api/thumbnails/backfill+ Pinia store + ThumbnailBackfillCard wired into MaintenancePanel. Three-predicate scan (NULL / missing on disk / corrupt magic bytes) re-enqueuesgenerate_thumbnailfor repair candidates. -
Artist view redesign — sticky frosted
ArtistHeader(matches TopNav blur recipe, hosts name + image/post stats + tab strip). Three lazy tabs: Posts (default whenpost_count > 0), Gallery (fallback), Management.?tab=URL state, cross-artist store reset,document.titleper artist. -
ErrorDetailModal redesign —
rowprop carries the failure's task name / queue / target / duration / started / retries / worker / celery-id / args alongside the error message. Pre-block contrast fix (themebackgroundtoken vs auto-derivedsurface-variant).
Fixes
-
psycopg 65535-parameter ceiling, three sites —
recover_interrupted_tasks,/api/import/retry-failed,/api/import/clear-stuckall folded theirSELECT ids → UPDATE WHERE id IN (...)patterns intoUPDATE … WHERE … RETURNING. -
ImageProvenance race + alembic 0021 —
_apply_sidecar's existence-check + INSERT planted(image_record_id, post_id)duplicates under concurrent workers, breaking.scalar_one_or_none()on every later deep-scan rederive (MultipleResultsFound). Migration dedupes + addsuq_image_provenance_image_post. Importer switched to savepoint + IntegrityError recovery. -
Source per (artist, platform), not per post + alembic 0022 — filesystem importer was creating one Source row per imported post URL (Atole's artist page had 406 Sources where 1 was right). Migration collapses per-artist-per-platform groups, reparents Posts + ImageProvenance, merges Post collisions. Importer now reuses the existing subscription Source.
-
Extension race-safety —
ExtensionService._find_or_create_artist+_find_or_create_sourceswitched to the same savepoint + IntegrityError pattern. -
Copy button on plain HTTP —
navigator.clipboardis Secure-Context-gated. NewcopyText()helper falls back todocument.execCommand('copy')via off-screen textarea. Applied to ErrorDetailModal, ExtensionKeyBar, BrowserExtensionCard.
Migrations
0021_image_provenance_unique— dedupe +UNIQUE(image_record_id, post_id).0022_source_per_artist_platform— collapse per-post Sources, reparent Posts + ImageProvenance, merge Post collisions.
Deploy
Pull
:latest, force-updateapp,worker,ml-worker,scheduler,web. Alembic auto-applies 0021 + 0022.Downloads
-