Three CI-green fixes/features (HEAD 5a6a956, run #519 green). No new migrations (alembic head stays 0036).
Fixes
Gallery similar-search render (26e47a8): the "See all similar" takeover fetched results but drew nothing — GalleryGrid only rendered via date-groups, which similar-mode returns empty (results are ranked, not chronological). Now renders a flat ranked list when there are no date groups (hardens the grid for any non-grouped result set).
Cleanup scans survive navigation (5a6a956): the transparency / single-color audit cards held the run + poll timer in local component state, so navigating away lost them. Each card now reconnects to its rule's latest run on mount (?rule= filter added) — resumes polling if running, or shows the completed result.
Feature
Reset content tagging (91b0145): a Tag-maintenance action that deletes every general + character tag (cascading their applications/aliases/allowlist/rejections/centroids) so the operator can re-tag from scratch via the Camie auto-suggest, while preserving fandoms, series (+ page order), and stored tagger predictions. Dry-run-preview → confirm flow with a back-up-first warning; irreversible except via DB backup restore.
Three CI-green fixes/features (HEAD `5a6a956`, run #519 green). No new migrations (alembic head stays 0036).
## Fixes
- **Gallery similar-search render** (`26e47a8`): the "See all similar" takeover fetched results but drew nothing — `GalleryGrid` only rendered via date-groups, which similar-mode returns empty (results are ranked, not chronological). Now renders a flat ranked list when there are no date groups (hardens the grid for any non-grouped result set).
- **Cleanup scans survive navigation** (`5a6a956`): the transparency / single-color audit cards held the run + poll timer in local component state, so navigating away lost them. Each card now reconnects to its rule's latest run on mount (`?rule=` filter added) — resumes polling if running, or shows the completed result.
## Feature
- **Reset content tagging** (`91b0145`): a Tag-maintenance action that deletes every `general` + `character` tag (cascading their applications/aliases/allowlist/rejections/centroids) so the operator can re-tag from scratch via the Camie auto-suggest, while **preserving fandoms, series (+ page order), and stored tagger predictions**. Dry-run-preview → confirm flow with a back-up-first warning; irreversible except via DB backup restore.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The 'See all similar' takeover fetched /api/gallery/similar fine (200, ~100
results) but the grid showed nothing: GalleryGrid renders ONLY by iterating
store.dateGroups, and similar-mode returns date_groups=[] (results are ranked
by cosine distance, not chronological). Zero groups → zero tiles despite
store.images being full. Add a flat fallback: when there are no date groups
but images exist, render them as one ungrouped list in ranked order (no date
headers). The modal Related strip was unaffected (it renders its images
directly). Test locks both the flat and grouped paths.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wipe every general + character tag so the operator can re-tag from scratch via
the Camie auto-suggest, while PRESERVING fandoms, series (+ series_page order),
and each image's stored tagger_predictions (so suggestions repopulate
immediately). One set-based DELETE FROM tag WHERE kind IN ('general','character')
— the five tag-referencing tables all cascade, so applications + aliases +
allowlist + rejections + centroids clear automatically; series tags aren't
deleted so series survive; Tag.fandom_id is SET NULL so fandoms are untouched.
Reuses the established dry-run-preview -> confirm pattern: cleanup_service.
reset_content_tagging() + POST /api/admin/tags/reset-content +
TagMaintenanceCard section with a backup-first warning and a red confirm
showing exact counts (tags by kind + image applications). Irreversible except
via DB backup restore; the wipe only fires when the operator confirms.
Tests: service dry-run counts + live delete preserves fandom/series/series_page
while content tags + their image_tag cascade away; API dry-run wiring.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The transparency / single-color audit cards held the run + poll timer in
local component state, so navigating away destroyed both and onMounted never
reconnected — the Celery scan kept running and writing LibraryAuditRun, but
the UI forgot it. Now each card, on mount, fetches its rule's latest run
(GET /api/cleanup/audit?rule=<rule>&limit=1) and rehydrates: shows progress +
resumes polling if still running, or shows the completed result (ready/applied/
error) so the operator can act on it after returning. Adds the ?rule= filter
to the audit-history endpoint + cleanup store latestAuditForRule().
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Three CI-green fixes/features (HEAD
5a6a956, run #519 green). No new migrations (alembic head stays 0036).Fixes
26e47a8): the "See all similar" takeover fetched results but drew nothing —GalleryGridonly rendered via date-groups, which similar-mode returns empty (results are ranked, not chronological). Now renders a flat ranked list when there are no date groups (hardens the grid for any non-grouped result set).5a6a956): the transparency / single-color audit cards held the run + poll timer in local component state, so navigating away lost them. Each card now reconnects to its rule's latest run on mount (?rule=filter added) — resumes polling if running, or shows the completed result.Feature
91b0145): a Tag-maintenance action that deletes everygeneral+charactertag (cascading their applications/aliases/allowlist/rejections/centroids) so the operator can re-tag from scratch via the Camie auto-suggest, while preserving fandoms, series (+ page order), and stored tagger predictions. Dry-run-preview → confirm flow with a back-up-first warning; irreversible except via DB backup restore.🤖 Generated with Claude Code
Wipe every general + character tag so the operator can re-tag from scratch via the Camie auto-suggest, while PRESERVING fandoms, series (+ series_page order), and each image's stored tagger_predictions (so suggestions repopulate immediately). One set-based DELETE FROM tag WHERE kind IN ('general','character') — the five tag-referencing tables all cascade, so applications + aliases + allowlist + rejections + centroids clear automatically; series tags aren't deleted so series survive; Tag.fandom_id is SET NULL so fandoms are untouched. Reuses the established dry-run-preview -> confirm pattern: cleanup_service. reset_content_tagging() + POST /api/admin/tags/reset-content + TagMaintenanceCard section with a backup-first warning and a red confirm showing exact counts (tags by kind + image applications). Irreversible except via DB backup restore; the wipe only fires when the operator confirms. Tests: service dry-run counts + live delete preserves fandom/series/series_page while content tags + their image_tag cascade away; API dry-run wiring. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>