• bvandeusen released this 2026-05-24 14:30:26 -04:00 | 724 commits to dev since this release

    Extends the IR migration so post-level data (title, description, source URL, publish date, attachment count) survives IR shutdown, and adds a modal-side artist fallback so IR-imported images without ImageProvenance still show a "by " line.

    IR Post/Provenance restore

    • IR export script bumped to schema v2; dumps PostMetadata as image_posts with per-post sha256 lists.
    • ir_ingest.py accepts schema 1 or 2; carries image_posts into the manifest.
    • tag_apply.py new phase 4: find-or-creates Source + Post + ImageProvenance per IR PostMetadata entry. Idempotent, dry-run safe.

    Modal artist fallback

    • /api/gallery/image/<id> now returns artist: {id, name, slug} when image_record.artist_id is set.
    • ProvenancePanel.vue shows a "by " line when ImageProvenance is empty but a direct artist FK exists.

    Operator workflow

    1. Pull this image; force-update services.
    2. Deploy a one-shot ir-export service inside the IR stack (see chat for snippet) → runs scripts/export_for_fabledcurator.py --output /staging/ir-export-v2.json.
    3. Settings → Maintenance → Legacy migration → upload the new JSON to the IR slot.
    4. Click "3. Ingest IR" (works now thanks to the FormData fix in v26.05.24.1).
    5. Click "5. Apply IR tags" — phase 4 fires alongside phases 1-3.
    6. Open any image modal: ImageProvenance entries render for images-in-posts; artist fallback line renders for everything else.
    Downloads