• bvandeusen released this 2026-05-26 16:51:11 -04:00 | 584 commits to dev since this release

    Hotfix for v26.05.26.1. PR #24 → main. Pinned head SHA 0f7cd3c verified as second parent of 8c36dd2.

    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_id
    

    Same gallery-dl post was ingested via two different sidecar paths in the operator's history, planting two Post rows with identical external_post_id under different per-post Sources. The original 0022 tried to handle this by merging Post collisions AFTER the bulk UPDATE 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 keep with post AS drop_ on identical external_post_id where keep.source_id = canonical and drop_.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: true on Cache 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-update app, 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