bvandeusen
bf8eb4468f
feat(tags): legacy-tag purge also catches source:* general tags
...
Operator-confirmed 2026-05-28: the BlenderKnight:* tags are `archive`
kind (caught by the kind purge), but the `source:patreon`-style tags
are IR's old `source` kind that fell back to `general` during migration
(FC's enum has no `source` kind) — so they can't be matched by kind.
Broadened the purge to a two-rule match and renamed it for accuracy
(all dev-only, unreleased):
- cleanup_service.purge_tags_by_kind → purge_legacy_tags. Predicate is
now `kind IN (archive, post, artist) OR name LIKE 'source:%'`
(LEGACY_NAME_PREFIXES). Preview classifies each row into by_kind OR
by_prefix (source:* counts once under the prefix bucket regardless of
its general kind).
- endpoint /tags/purge-retired-kinds → /tags/purge-legacy. dry-run
returns by_kind + by_prefix + count + sample.
- store purgeRetiredKindTags → purgeLegacyTags.
- Tag Maintenance card copy + breakdown updated to show both buckets;
button reads "Preview/Delete legacy tags".
Tests updated + extended: dry-run reports by_kind {archive,post,artist}
AND by_prefix {source:*}, plain general/character tags survive; commit
deletes both the kind-matched and source:*-matched rows and leaves the
rest.
2026-05-28 01:20:41 -04:00
..
2026-05-14 07:32:17 -04:00
2026-05-15 22:43:46 -04:00
2026-05-28 01:20:41 -04:00
2026-05-15 07:46:38 -04:00
2026-05-15 07:46:38 -04:00
2026-05-26 15:59:28 -04:00
2026-05-20 12:55:51 -04:00
2026-05-21 22:14:42 -04:00
2026-05-19 11:16:01 -04:00
2026-05-16 18:15:23 -04:00
2026-05-27 20:59:58 -04:00
2026-05-20 18:35:54 -04:00
2026-05-27 13:02:24 -04:00
2026-05-20 18:36:28 -04:00
2026-05-23 23:40:00 -04:00
2026-05-14 15:23:07 -04:00
2026-05-28 00:08:03 -04:00
2026-05-24 23:03:57 -04:00
2026-05-15 07:54:12 -04:00
2026-05-20 18:34:23 -04:00
2026-05-26 20:47:18 -04:00
2026-05-18 18:07:06 -04:00
2026-05-16 23:35:12 -04:00
2026-05-20 20:44:58 -04:00
2026-05-22 23:18:22 -04:00
2026-05-15 15:49:25 -04:00
2026-05-20 20:43:48 -04:00
2026-05-21 16:03:48 -04:00
2026-05-15 07:45:55 -04:00
2026-05-24 21:22:42 -04:00
2026-05-24 23:37:06 -04:00
2026-05-16 13:40:37 -04:00
2026-05-16 15:51:27 -04:00
2026-05-27 11:09:04 -04:00
2026-05-26 10:36:38 -04:00
2026-05-19 11:11:37 -04:00
2026-05-21 22:14:15 -04:00
2026-05-20 12:54:47 -04:00
2026-05-18 21:47:45 -04:00
2026-05-19 11:11:07 -04:00
2026-05-26 01:18:38 -04:00
2026-05-26 01:18:07 -04:00
2026-05-19 14:59:04 -04:00
2026-05-26 10:36:21 -04:00
2026-05-24 23:37:06 -04:00
2026-05-16 18:02:01 -04:00
2026-05-14 07:34:47 -04:00
2026-05-21 16:02:36 -04:00
2026-05-26 08:13:53 -04:00
2026-05-25 01:28:54 -04:00
2026-05-20 18:46:59 -04:00
2026-05-27 19:12:51 -04:00
2026-05-25 11:12:55 -04:00
2026-05-21 16:00:40 -04:00
2026-05-20 21:20:30 -04:00
2026-05-26 19:43:31 -04:00
2026-05-15 13:53:42 -04:00
2026-05-20 20:39:17 -04:00
2026-05-18 21:36:16 -04:00
2026-05-20 20:41:42 -04:00
2026-05-26 13:47:55 -04:00
2026-05-25 12:30:18 -04:00
2026-05-22 13:29:09 -04:00
2026-05-14 15:40:47 -04:00
2026-05-18 18:05:45 -04:00
2026-05-19 11:14:49 -04:00
2026-05-19 11:22:17 -04:00
2026-05-18 21:33:55 -04:00
2026-05-20 22:01:26 -04:00
2026-05-25 20:33:44 -04:00
2026-05-25 22:16:26 -04:00
2026-05-26 14:39:57 -04:00
2026-05-26 14:19:29 -04:00
2026-05-25 02:34:36 -04:00
2026-05-22 09:00:29 -04:00
2026-05-27 23:54:35 -04:00
2026-05-26 21:23:12 -04:00
2026-05-15 07:35:22 -04:00
2026-05-15 15:48:29 -04:00
2026-05-18 09:38:43 -04:00
2026-05-18 21:33:11 -04:00
2026-05-19 11:10:53 -04:00
2026-05-20 12:53:34 -04:00
2026-05-20 18:32:52 -04:00
2026-05-20 18:33:14 -04:00
2026-05-20 20:36:19 -04:00
2026-05-22 09:01:46 -04:00
2026-05-15 07:37:13 -04:00
2026-05-15 07:39:33 -04:00
2026-05-18 21:36:43 -04:00
2026-05-15 07:37:53 -04:00
2026-05-15 07:36:17 -04:00
2026-05-15 07:38:33 -04:00
2026-05-25 02:25:30 -04:00
2026-05-14 07:34:29 -04:00
2026-05-14 14:24:25 -04:00
2026-05-20 20:39:50 -04:00
2026-05-25 22:16:26 -04:00
2026-05-17 22:18:07 -04:00
2026-05-20 18:34:02 -04:00
2026-05-21 18:54:49 -04:00
2026-05-19 11:22:17 -04:00
2026-05-28 00:01:32 -04:00
2026-05-25 22:16:26 -04:00
2026-05-19 11:14:49 -04:00
2026-05-21 15:59:35 -04:00
2026-05-16 23:33:12 -04:00
2026-05-17 16:28:20 -04:00
2026-05-15 15:49:25 -04:00
2026-05-18 15:13:48 -04:00
2026-05-27 15:35:25 -04:00
2026-05-14 12:04:05 -04:00
2026-05-20 18:37:17 -04:00
2026-05-16 18:03:16 -04:00
2026-05-25 12:30:18 -04:00
2026-05-15 15:50:41 -04:00
2026-05-16 23:36:04 -04:00
2026-05-26 21:00:12 -04:00
2026-05-15 07:39:33 -04:00
2026-05-14 15:23:07 -04:00
2026-05-24 21:22:42 -04:00
2026-05-25 01:28:54 -04:00
2026-05-24 23:37:06 -04:00
2026-05-26 01:32:50 -04:00
2026-05-15 07:43:39 -04:00
2026-05-27 22:45:11 -04:00
2026-05-21 18:53:35 -04:00
2026-05-14 12:05:19 -04:00
2026-05-21 16:01:59 -04:00
2026-05-19 18:15:59 -04:00