• v26.05.27.1 Stable

    bvandeusen released this 2026-05-27 17:13:52 -04:00 | 545 commits to dev since this release

    Subscriptions hub + post-card merge + sidecar audit. PR #29 → merge commit 88e53e5 (parent[1] = dev HEAD aa28bdd verified).

    Highlights

    Subscriptions hub/credentials and /downloads collapsed into a single /subscriptions parent with three internal subtabs (Subscriptions default | Downloads | Settings). ?tab= query-param routing mirrors ArtistView. GS-style visuals across all three: color-coded platform chips, stat-chip downloads dashboard with popover filters + maintenance menu + per-row retry, credentials card grid in Settings. Download + schedule settings moved out of Settings → Import into the hub's Settings subtab. Legacy /credentials and /downloads keep working as bookmark-safety redirects. New GET /api/downloads/stats endpoint pinned by two integration tests.

    PostCard absorbs PostModal — the wider PostCard layout had enough real estate to be the canonical post surface. Compact state unchanged; click-to-expand inline yields full title, mosaic of ALL post images (uncapped, lazy-loaded), full sanitized-HTML description, attachment download pills. Mosaic image clicks still open ImageViewer scoped to the post. usePostModalStore and the modal mount deleted.

    Sidecar audit fixes across all non-Patreon platforms (after the operator's sample dump):

    • SubscribeStar id/post_id confusion → external_post_id chain reordered to (post_id, id, index, message_id). Stops multi-image SubscribeStar posts from fragmenting into N Post rows in the DB going forward.
    • SubscribeStar/Pixiv/HF/Discord post_url was a file CDN URL → new _derive_post_url(platform, data) synthesizes proper post permalinks per platform.
    • Discord message body field added to description fallback chain.
    • SubscribeStar title always empty → synthesized from content first line (already in v26.05.27.0 with alembic 0024 backfill).

    Migrations

    • alembic 0024_backfill_post_title_from_description (idempotent) — synthesized titles for any Post with NULL/empty title and a non-empty description.
    • alembic 0025_fix_subscribestar_post_ids (idempotent) — for SubscribeStar/HF/Discord, walks each Post's sidecar from disk and overwrites external_post_id (subscribestar) + post_url (all three). Then merges SubscribeStar fragments grouped under one source by their new shared external_post_id (same ImageProvenance pre-delete + repoint dance as alembic 0022). Pure-SQL Pixiv post_url backfill in the same migration. Posts whose ImageRecord.path doesn't resolve on disk are reported per-platform in the migration output for a future deep-scan.

    Infrastructure

    build.yml race fix — tag-push's "Download signed XPI" step now polls releases/tags/ext-<version> every 30s for up to 10 min before failing. main-push's sign-extension takes 1–5 min for AMO; tag-push used to race past it and 404. This release will exercise the fix in production.

    Deploy

    docker compose pull && docker compose up -d --force-recreate app worker ml-worker scheduler web
    Or pin: image: git.fabledsword.com/bvandeusen/fabledcurator:v26.05.27.1

    Alembic 0024 + 0025 will apply automatically. Watch the worker log for the per-platform migration counts (0025: subscribestar — read N sidecars, updated N Posts, ...).

    Downloads