-
released this
2026-05-26 16:51:11 -04:00 | 584 commits to dev since this releaseHotfix for v26.05.26.1. PR #24 → main. Pinned head SHA
0f7cd3cverified as second parent of8c36dd2.What broke in v26.05.26.1
Alembic 0022 aborted on deploy with:
IntegrityError: duplicate key (source_id, external_post_id)=(42, 6166997) violates uq_post_source_external_idSame gallery-dl post was ingested via two different sidecar paths in the operator's history, planting two Post rows with identical
external_post_idunder different per-post Sources. The original 0022 tried to handle this by merging Post collisions AFTER the bulkUPDATE post SET source_id = canonical, but Postgres fires UNIQUE constraints row-by-row during the UPDATE — the merge step never got to run.Fix
Pre-merge colliding
(keep, drop)Post pairs BEFORE the bulk reparent:- JOIN
post AS keepwithpost AS drop_on identicalexternal_post_idwherekeep.source_id = canonicalanddrop_.source_id ∈ others. - For each pair: repoint ImageProvenance + ImageRecord.primary_post_id from drop to keep, dedupe ImageProvenance against alembic 0021's
uq_image_provenance_image_post, delete the drop Post. - Then the bulk reparent runs cleanly (no collisions possible).
The original migration runs in a transaction; operator's failed v26.05.26.1 deploy rolled back to the post-0021 state cleanly. No partial-state damage.
Also included
ci.yml:continue-on-error: trueonCache pip wheels(4 sites). act_runner's cache backend is hard-failing the action JS load itself ("Cannot find module .../dist/restore/index.js"); the install step handles cold caches natively. Workaround until the runner-side cache backend is fixed.
Deploy
Pull
:latest, force-updateapp,worker,ml-worker,scheduler,web. Alembic should apply 0022 cleanly this time.Verify Atole-side:
SELECT id, platform, url, enabled FROM source WHERE artist_id = (SELECT id FROM artist WHERE slug='atole');Expected: 1 row,
url=https://www.patreon.com/cw/Atole,enabled=true.Downloads
- JOIN