FC-1 → FC-5: first dev→main merge for the FabledCurator v1 build #1
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First merge of
devintomainfor FabledCurator. Rolls up every stage from FC-1 (Foundation) through FC-5 (Migration tooling). CI-green ondevat599697c.What this PR contains
FabledCurator is the merge of ImageRepo + GallerySubscriber into a single Vue+Quart app. Five sub-projects, all landed:
FC-1 — Foundation
Repo scaffold, Quart app skeleton, Vue 3 + Vuetify + Pinia + Vite frontend, full unified schema in migration
0001(Artist, Source, Credential, Post, ImageRecord, ImageProvenance, Tag, DownloadEvent + the rest), Celery + Redis with queue lanes, Dockerfile (web/worker/scheduler/ml roles) + Dockerfile.ml, docker-compose, Forgejo CI workflow.FC-2 — Image backbone (a-e)
image_record.artist_idbecomes single source of truth).verify_integritytask with weekly beat schedule, integrity_status surfaced in UI.FC-3 — Subscription backbone (a-f)
Sourceper Artist,/subscriptions.Credentialstore (Fernet + file key), platforms registry, extension API key.downloadqueue,attach_in_placeImporter seam, on-demandPOST /api/sources/<id>/check,/downloadstimeline, richDownloadEventmetadata, Patreon vanity → campaign-ID auto-heal.tick_due_sourcesbeat task (60s) with exponential backoff,SourceHealthDotUI,cleanup_old_download_eventsdaily retention,Source.consecutive_failurescolumn./postscursor-paginated unified feed mirroringGalleryService.scroll, artist + platform filters, HTML-stripped descriptions, inline thumbs + attachment chips./artistsbrowse grid placed between Gallery and Tags,ArtistDirectoryServicemirroringTagDirectoryService(cursor + window-fn previews + correlated EXISTS platform filter).Operational
container.image: ci-python:3.14across all CI/build jobs, shippedci-requirements.md.FC-5 — Migration tooling
MigrationRunmodel + migration0015.backup/rollbackservices (pg_dump + tar.zst).gs_ingest— readsgallerysubscriber-export-v1.json, creates Artist/Source/Credential (re-encrypted with FC's key).ir_ingest— readsimagerepo-export-v1.json, creates Tag rows + writes sha256-keyed manifest.tag_apply— joins the manifest to ImageRecord rows after the operator's filesystem scan.ml_queue/verifyservices./api/migrate/<kind>blueprint with multipart upload for ingest kinds.LegacyMigrationCardUI slotted into Settings → Maintenance.Coordinated with two small export scripts that landed on
mainof the respective repos:bvandeusen/imagerepo@2fb1a2a:scripts/export_for_fabledcurator.py.bvandeusen/GallerySubscriber@d47b4c8:scripts/export_for_fabledcurator.py.Post-merge operator workflow
fabledcurator:main(or thev26.05.22.0release).alembic upgrade head(runs 0001 → 0015 on a fresh DB).ir-export.json+gs-export.json./import/imagerepo:roper thedocker-compose.ymlexample.Constraints honored throughout
Homelab HTTP.
devkept-as-is per slice. Single-line commits with the standard trailer. CI-verified before this merge.