[2026-09-26] eagle: personal/plans/music-tags-review/music-tags-review.md personal/plans/music-tags-wave38-fixes.md personal/tech/music-tags-final-review.md personal/tech/music-tags-rename-audit.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
faa0176287
commit
b1bab81be2
5 files changed
+270
-2
No files matched your search
@@ -10,6 +10,10 @@ updated: '2026-09-26'
|
||||
# Music Tags — проверка тегов
|
||||
|
||||
**К правке:** 6773 файлов · **без изменений:** 1133
|
||||
**Актуальное состояние (волна 38, 2026-09-26):** CSV `tag-fix-plan.csv` структурно цел
|
||||
(7906 строк / 0 битых). Финальный аудит → **[[personal/tech/music-tags-rename-audit]]**:
|
||||
найдено 4 недоделки (335 строк не в сводках, 5 confusable, `new_album='New'` ×1, `Часть N` в title ×33).
|
||||
Блоки ниже устарели — читать техдок [[personal/tech/music-tags-repair-truenas]] волны 34–38.
|
||||
|
||||
> **⚠️ 25-я волна (2026-09-26): ИДЁТ ПОСТРОЧНОЕ РУЧНОЕ ЧТЕНИЕ. Прочитано 1–1401 из 7906 (~18%).**
|
||||
>
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
created: '2026-09-26'
|
||||
namespace: personal
|
||||
related:
|
||||
- '[[personal/tech/music-tags-rename-audit]]'
|
||||
- '[[personal/tech/music-tags-repair-truenas]]'
|
||||
status: plan
|
||||
tags:
|
||||
- music
|
||||
- jellyfin
|
||||
- truenas
|
||||
- metadata
|
||||
- plan
|
||||
title: Music Tags — план волны 38 (4 правки по аудиту)
|
||||
type: plan
|
||||
updated: '2026-09-26'
|
||||
wave: 38
|
||||
---
|
||||
# План волны 38: 4 правки по аудиту `tag-fix-plan.csv`
|
||||
|
||||
_Создан: 2026-09-26. Статус: ПЛАН, ждёт «go». Источник: `~/Downloads/music-tags/tag-fix-plan.csv`._
|
||||
_Основание: [[personal/tech/music-tags-rename-audit]]._
|
||||
|
||||
**Схема каждой правки (обязательна):** скрипт в файле → бэкап `bak-<имя>` → запись в `.tmp` →
|
||||
ревалидация (7906 строк, 11 колонок, 0 битых) → `os.replace`. Идемпотентность: повторный прогон = 0.
|
||||
|
||||
---
|
||||
|
||||
## P1 — 335 строк не в сводках (недолеченный баг волны 33)
|
||||
|
||||
`single(646) + multi(6897) + skip(28) = 7571` ≠ 7906 → **недостача 335**.
|
||||
Все — с **пустым `new_artist`**. `rebuild_summaries.py` выбрасывает строки с пустым `artist`
|
||||
(`if not art: continue`) — тот же фильтр, что прятал 562 сказки.
|
||||
|
||||
| Папка | Строк |
|
||||
|---|---:|
|
||||
| `!Детские/Сборка Песни для детей` | 165 |
|
||||
| `!Детские/Детский хит` | 156 |
|
||||
| `!Pop, Club, Любэ/!Radio` | 8 |
|
||||
| `!Pop, Club, Любэ/Df1` | 4 |
|
||||
| `!Pop, Club, Любэ/Infected Mushroom` | 1 |
|
||||
| `!A Not sorted/НАШЕСТВИЕ 2009 - ДЕНЬ ВТОРОЙ.mp3` | 1 |
|
||||
|
||||
**Правка:** убрать фильтр `if not art: continue` из `rebuild_summaries.py` и заменить на sentinel:
|
||||
строки с пустым `artist` группируются по `album` как `<album> (без исполнителя)`.
|
||||
По образцу волны 18 (там это уже делали для 188 строк — значит фильтр вернулся при переписывании).
|
||||
|
||||
**Приёмка:** `single + multi + skip == 7906`; в обоих файлах `0` пустых `artist`.
|
||||
|
||||
---
|
||||
|
||||
## P2 — 7 строк confusable-скрипт (латиница внутри кириллицы)
|
||||
|
||||
Точный разбор (аббревиатуры `RMX`/`DZA`/`MF`/`DJ` — **легитимны**, не трогаем):
|
||||
|
||||
| # | Поле | Слово | Битый символ | Значение |
|
||||
|---|---|---|---|---|
|
||||
| 1 | `new_title` | `Айбoлит` | лат. `o` | `Айболит` |
|
||||
| 2 | `new_title` | `Cпокойной ночи, малыши!` | лат. `C` | `Спокойной ночи, малыши!` |
|
||||
| 3 | `new_title` | `Авто-мaт` | лат. `a` | `Авто-мат` |
|
||||
| 4 | `new_title` | `Cнайпер feat. Диана Арбенина` | лат. `C` | `Снайпер feat. Диана Арбенина` |
|
||||
| 5 | `new_title` | `Муза (Remix by DJ Kореец + DJ Vini)` | лат. `K` | `…DJ Кореец…` |
|
||||
| 6 | `new_artist` | `Кабарe-Дуэт Академия` | лат. `e` | `Кабаре-Дуэт Академия` |
|
||||
| 7 | `new_artist` | `X-Фактор` | лат. `X` | `Х-Фактор` (кир. `Х`) |
|
||||
|
||||
**Правка:** замена символов в этих 7 значениях + `source` не меняем (правка кодировки).
|
||||
**Проверка:** повторный прогон детектора → 0.
|
||||
|
||||
---
|
||||
|
||||
## P3 — `new_album = 'New'` (техпапка в теге) — 1 строка
|
||||
|
||||
`/storage/Music/!Rock&Folk/Король и Шут/Танец гения.mp3` → `new_album: 'New'` → **пусто**.
|
||||
`cur_album` тоже `'New'` (мусор от граббера). По паттерну волны 19 (техпапки `misc`/`new`/`Album` → пусто).
|
||||
|
||||
---
|
||||
|
||||
## P4 — `new_title = 'Часть N'` — 25 строк (2 альбома)
|
||||
|
||||
| Альбом | Строк | Файлы | Проблема |
|
||||
|---|---:|---|---|
|
||||
| `Новые Бременские` | 19 | `NN - TrackNN.mp3` | `title = Часть N` — номер серии вместо названия |
|
||||
| `Малыш и Карлсон` | 6 | `01..03 - TrackNN.mp3` | 🔴 **регрессия волны 37**: album свели в один, но title остались `Часть N` |
|
||||
|
||||
⚠️ **Требует решения Alex:** 19 строк `Новые Бременские` — реальных названий серий **нет**
|
||||
(файлы называются `TrackNN.mp3`, в имени файла только номер). Варианты:
|
||||
- **(A)** title = `Серия N` (как правили `Трое из Простоквашино 8` → `Серия 8`);
|
||||
- **(B)** title оставить пустым (номер уже в `new_track`);
|
||||
- **(C)** найти названия серий извне (треки не определить без прослушивания).
|
||||
|
||||
6 строк `Малыш и Карлсон` — **чинятся однозначно**: title должен быть названием сказки,
|
||||
сквозная нумерация 1–6 (уже в `new_track`). По образцу волны 37.
|
||||
|
||||
---
|
||||
|
||||
## Порядок выполнения
|
||||
|
||||
1. **P3** (1 строка) — простой, независимый.
|
||||
2. **P2** (7 строк) — замена символов.
|
||||
3. **P4** (25 строк) — после решения Alex по `Новые Бременские`; 6 строк Карлсона чинятся сразу.
|
||||
4. **P1** — правка `rebuild_summaries.py` + пересборка сводок (последним, т.к. зависит от P4).
|
||||
5. Ревалидация: 7906 / 0 битых / сумма сводок = 7906.
|
||||
|
||||
**Не входит в этот план (отдельно, ждёт Alex):** 77 строк `часть` в `album`, 136 пар дублей `(album,track)`.
|
||||
Reference in new issue
Block a user