• bvandeusen released this 2026-05-26 17:53:21 -04:00 | 581 commits to dev since this release

    Second hotfix for v26.05.26.1's alembic 0022 migration. v26.05.26.2 fixed case (A); this fixes case (B). PR #25 → main, merge commit c14338c, pinned head 7a64730 verified.

    What still broke after v26.05.26.2

    IntegrityError: duplicate key (source_id, external_post_id)=(42, 6166997)
    

    v26.05.26.2's pre-merge only handled the case where canonical already had a Post with the colliding epid. It missed: two non-canonical Sources both have Posts with the same external_post_id, canonical has none. The bulk UPDATE moves the first cleanly onto canonical, then collides on the second.

    Fix

    Group ALL Posts in the (artist, platform) by external_post_id (across canonical AND all others). For any group with count > 1:

    • Keep = a Post under canonical (if any) or the lowest-id Post in the group
    • Merge the rest into keep (repoint ImageProvenance + ImageRecord.primary_post_id, dedupe ImageProvenance against alembic 0021's UNIQUE, delete drop Posts)

    Now handles all three patterns:

    • canonical has Post + "other" has duplicate → keep canonical's
    • two "others" both have duplicates (canonical has none) → keep lowest-id one
    • canonical + multiple "others" all share epid → keep canonical's, drop all others

    Also included

    ci.yml: the four Cache pip wheels steps were removed entirely (act_runner cache backend has been broken for 11+ days; cached path wasn't uv's actual cache anyway). Was on dev as 1803a09; rides along here.

    Deploy

    Pull :latest, force-update app, worker, ml-worker, scheduler, web. Alembic should apply 0022 cleanly this time.

    Verify Atole:

    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