chore: retire ml-backfill-daily beat + the spent purge-legacy action (operator-approved)

- ml-backfill-daily: the CPU tag_and_embed backfill raced the GPU agent's
  daily embed backfill for the same NULL-embedding images at ~100x the cost
  (B1 audit verdict, milestone #124). The backfill TASK stays — the manual
  /api/ml/backfill button remains the deliberate CPU fallback pending B3.
- purge-legacy: one-time IR-migration cleanup, dry-run verified 0 targets on
  the live library before removal (A2 audit, milestone #123). Fully retired
  per rule 22: tile, store action, route, service fn, tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CDgx8bQS5YrGRK76v8HUnM
This commit is contained in:
2026-07-02 11:24:08 -04:00
parent 95d2ae1d58
commit 1f27189b8f
6 changed files with 1 additions and 203 deletions
@@ -42,53 +42,6 @@
</div>
</MaintenanceTile>
<MaintenanceTile
icon="mdi-tag-off"
title="Legacy migration tags"
blurb="Purge retired archive/post/artist + source:* tags."
destructive
>
<p class="fc-muted text-body-2 mb-3">
Purge legacy IR-migration tags FC no longer uses: retired/system
kinds (<code>archive</code>, <code>post</code>, <code>artist</code> e.g.
<code>BlenderKnight:Hannah_BJ_Loops</code>) plus <code>source:*</code> tags
(ImageRepo's old <code>source</code> kind, migrated to <code>general</code>).
Provenance and artists are their own systems now, so these are pure noise.
Removes them from every image.
</p>
<v-btn
color="accent" variant="flat" rounded="pill"
prepend-icon="mdi-magnify"
:loading="loadingKindPreview"
class="mb-3"
@click="onKindPreview"
>Preview legacy tags</v-btn>
<div v-if="kindPreview">
<p class="text-body-2 mb-2">
<strong>{{ kindPreview.count }}</strong> legacy tag(s).
<span v-for="(n, k) in kindPreview.by_kind" :key="k" class="fc-muted">
{{ k }}: {{ n }}&nbsp;&nbsp;
</span>
<span v-for="(n, p) in kindPreview.by_prefix" :key="p" class="fc-muted">
{{ p }}: {{ n }}&nbsp;&nbsp;
</span>
</p>
<SampleNameGrid
v-if="kindPreview.sample_names?.length"
:names="kindPreview.sample_names" class="mb-3"
/>
<v-btn
color="error" variant="flat" rounded="pill"
prepend-icon="mdi-delete-sweep"
:disabled="!kindPreview.count"
:loading="kindCommitting"
@click="onKindCommit"
>Delete {{ kindPreview.count }} legacy tag(s)</v-btn>
</div>
</MaintenanceTile>
<MaintenanceTile
icon="mdi-tag-multiple"
title="Reset content tagging"
@@ -216,16 +169,6 @@ const {
emptyPreview: (r) => ({ count: 0, sample_names: r.sample_names || [] }),
})
// Legacy migration-tag purge.
const {
previewData: kindPreview, previewing: loadingKindPreview,
committing: kindCommitting, runPreview: onKindPreview, runCommit: onKindCommit,
} = usePreviewCommit({
preview: () => store.purgeLegacyTags({ dryRun: true }),
commit: () => store.purgeLegacyTags({ dryRun: false }),
emptyPreview: { count: 0, by_kind: {}, by_prefix: {}, sample_names: [] },
})
// Reset content tagging (general + character).
const {
previewData: resetPreview, previewing: loadingResetPreview,
-5
View File
@@ -101,10 +101,6 @@ export const useAdminStore = defineStore('admin', () => {
})
}
function purgeLegacyTags(opts = {}) {
return _dryRunPost('/api/admin/tags/purge-legacy', opts)
}
// Destructive: deletes ALL general + character tags so the operator can
// re-tag from scratch via auto-suggest. fandom + series preserved.
function resetContentTagging(opts = {}) {
@@ -154,7 +150,6 @@ export const useAdminStore = defineStore('admin', () => {
pruneUnusedTags,
pruneBarePosts,
reconcileDuplicatePosts,
purgeLegacyTags,
resetContentTagging,
normalizeTags,
pollTaskUntilDone,