[2026-09-26] eagle: personal/plans/music-tags-review/music-tags-review.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 17:34:12 +06:00
1 parent 857b8931fc
commit bf95d4c825
2 files changed
+190 -12

No files matched your search

@@ -9,7 +9,7 @@ updated: '2026-09-26'
# Music Tags — проверка тегов
**К правке:** 6772 файлов · **без изменений:** 1134
**К правке:** 6773 файлов · **без изменений:** 1133
> [!warning] Ничего не изменено
> Это план. Ставь галочки, что одобряешь. После «go» — бэкап в `Music/backup/` и применение.
@@ -20,6 +20,41 @@ updated: '2026-09-26'
| [[2-medium-confidence\|Средняя уверенность]] | 5813 |
| [[3-high-confidence\|Высокая уверенность]] | 959 |
## 🔴 Одиннадцатая волна (2026-09-26): КЛАСС 5 ПЕРЕСЧИТАН + ОТКРЫТ ВОПРОС О МЕТОДЕ
### ⚠️ ИСПРАВЛЕНИЕ ЦИФРЫ: класс «title дублирует имя файла» — 271, а НЕ 1466
Прежняя оценка (1466) была получена детектором «title == имя файла» и оказалась **ложной в ~80%**:
имя файла часто **равно названию песни** — это норма.
```
19 | Шопен — Похоронный марш.mp3 ← НЕ баг, название и есть имя файла
22 | Маленький принц.mp3 ← НЕ баг
23 | Милая моя.mp3 ← НЕ баг
```
**Реальный баг — только когда `artist` продублирован В НАЧАЛЕ `title` через ` - `:**
```
Vanessa Mae - Aurora.mp3 A: Vanessa Mae T: Vanessa Mae - Aurora → T: Aurora
Pushnoy.ru - Песня для ТЭФИ A: Pushnoy.ru T: Pushnoy.ru - Песня... → T: Песня для ТЭФИ
```
**Итог: 271 строка.** Правки начаты — **12 строк сделано** (Vanessa Mae ×10, Pushnoy.ru ×1).
### 🔴 ОТКРЫТ ВОПРОС О МЕТОДЕ
Ручная правка = **1 строка за вызов**, осталось ~450 (класс 5 — 259, класс 6 — 113, знаки — 11,
номер в title — ~20, транслит — ~40). Задан вопрос Alex: **запрет скриптов — это «не уходить
в код вместо данных» или «не править без просмотра»?** Варианты: по одной (часы) либо
один прогон правила + diff всех 271 «было → стало». **Ответа нет — сессия прервана на вопросе.**
### ✅ Дополнительно внесено (109-я правка)
`Отдыхаем хорошо(Ida Corr cocktail).mp3` → artist `DJ Иван Silver & Рэпер Сява`,
title `Отдыхаем хорошо (Ida Corr cocktail)`, `no_change` → `fix`.
`НАШЕСТВИЕ 2009 - ДЕНЬ ВТОРОЙ.mp3` — уже `dropped (file removed by user)`, **не трогать**.
## 🔴 Десятая волна (2026-09-26): 108 ПРАВОК ВНЕСЕНЫ В CSV — 5 ЗАДАЧ ЗАКРЫТО
Правка скриптов **запрещена** — работа идёт построчно по `~/Downloads/music-tags/tag-fix-plan.csv`.
@@ -56,13 +91,16 @@ Alex: **«Ты не пишешь сука скрипт»** → правки то
| # | Дефект | Пример | Строк |
|---|---|---|---:|
| 5 | `new_title` дублирует имя файла целиком | `THE IMMORTALS -MORTAL KOMBAT THEME` | **1466** |
| 5 | `new_title` содержит `artist - title` (artist продублирован) | `Vanessa Mae - Aurora` | **271** ⚠️ пересчитано |
| 6 | Имя папки-сборника в `new_artist` | `disk`, `disk_v2`, `3 SHANSON`, `04` | **113** |
| 7 | Водяной знак в `title` | `goldwarez.org`, `zvukoff.ru`, `muzmo.ru` | 11 |
| 8 | Оборванная скобка в `new_artist` | `Баста & Гуф (` → `Баста & Гуф` | 1 |
| 9 | Номер трека остался в `title` | `143 БЮРО НАХОДОК`, `113 ПЕСНЯ КОТА` | папка `Детский хит` |
| 10 | Транслит вместо русского | `Kontrabandy` ← `Контрабанды` | `Sbornik_Novij_Rok` |
⚠️ **Класс 5 пересчитан: 271, а не 1466** — первый детектор (`title == имя файла`) давал ~80% ложных.
Верный признак — `artist` в НАЧАЛЕ `title` через ` - `. Подробности — в разделе «Одиннадцатая волна» выше.
Прежние аудиты (`audit_plan.py`, `final_gate.py`) эти классы не ловили — в их списке проверок их нет.
✅ **Водяные знаки — решено Alex: ВЫРЕЗАТЬ** (`title` не должен содержать `zvukoff.ru` и подобное).
@@ -78,10 +116,10 @@ Alex: **«Ты не пишешь сука скрипт»** → правки то
Формат отдачи Alex: `строка CSV | файл | new_artist — new_title`, **только строки с сомнением**.
🔴 **Построчный проход по всем 7906 строкам НЕ ЗАКОНЧЕН** — закрыты известные дефекты (80 строк).
🔴 **Построчный проход по всем 7906 строкам НЕ ЗАКОНЧЕН** — закрыты известные дефекты (81 строка).
Alex: **«Ты должен был пройти по каждому треку в csv и вручную убедиться что там адекватные названия. Сделал?»**
Следующая волна: классы 5–10 из таблицы выше (1466 + 113 + 11 строк и папки `Детский хит`,
`Sbornik_Novij_Rok`).
Следующая волна: классы 5–10 из таблицы выше (**271** + 113 + 11 строк и папки `Детский хит`,
`Sbornik_Novij_Rok`). Класс 5 начат — **12 из 271**.
### 🔴 Файл `1-needs-decision.md` сломан merge-конфликтом
+147 -7
View File
@@ -19,19 +19,24 @@ related:
# Music Tags Repair — TrueNAS (7906 файлов)
> **Статус: ДЕСЯТАЯ ВОЛНА ЗАВЕРШЕНА (2026-09-26). NAS ДОСТУПЕН, применение НЕ начато.
> **Статус: ОДИННАДЦАТАЯ ВОЛНА (2026-09-26). NAS ДОСТУПЕН, применение НЕ начато.
> Работа — ручной проход по CSV `tag-fix-plan.csv` построчно; правка скриптов ЗАПРЕЩЕНА.**
> ✅ **108 ПРАВОК ВНЕСЕНЫ В CSV** — баг 1 (26) + баг 3 (50 из 51) + баг 4 (1) + 3 решения Alex.
> Проверка `csv.DictReader`: **7906 строк / 11 колонок / 0 битых**.
> ✅ **109 ПРАВОК ВНЕСЕНЫ В CSV** — баг 1 (26) + баг 3 (50 из 51) + баг 4 (1) + 3 решения Alex
> + `Отдыхаем хорошо (Ida Corr cocktail)`.
> Проверка `csv.DictReader`: **7906 строк / 11 колонок / 0 битых** (`fix` 6773, `no_change` 1133).
> ✅ **Решения Alex по блоку «требует решения» ПРИМЕНЕНЫ** (из файла `1-needs-decision.md` + чата):
> `Kazantip 2008`→artist `Kazantip 2008`; `i am instructor`→artist `Techno Beat`;
> `Из чего же`→artist «Большой детский хор Центрального телевидения и Всесоюзного радио».
> ✅ **Решён вопрос про водяные знаки: ВЫРЕЗАТЬ.** Alex: «БЛЯДЬ как ты думаешь дебил??»
> 🔴 **ОТКРЫТ ВОПРОС О МЕТОДЕ (ждёт Alex):** запрет скриптов — это «не уходить в код вместо данных»
> или «не править автоматически без просмотра»? От ответа зависит темп: ~450 правок по одной
> либо один прогон + diff. См. раздел «ОДИННАДЦАТАЯ ВОЛНА».
> 🔴 **Построчный проход по всем 7906 строкам НЕ закончен** — закрыты известные дефекты
> (26+50+1+3 = 80 строк). Блок 1 `!Radio` (453 строки) вскрыл **новые классы брака**:
> имя файла целиком в `title` (**1466 строк**), имя папки-сборника в `artist` (**113**),
> водяные знаки (11), номер в title (папка `Детский хит`), транслит вместо русского.
> Питфоллы прочитать в разделе «ДЕСЯТАЯ ВОЛНА» ниже.
> (26+50+1+3+1 = 81 строка). Блок 1 `!Radio` (453 строки) вскрыл **новые классы брака**;
> ⚠️ класс «title дублирует имя файла» **ПЕРЕСЧИТАН: 271 реальная строка**, не 1466/1473 —
> первый детектор давал ~80% ложных (см. «ОДИННАДЦАТАЯ ВОЛНА»).
> Осталось: класс C **259**, класс A **113**, водяные знаки **11**, номер в title **~20**,
> транслит **~40**. Питфоллы прочитать в разделах «ОДИННАДЦАТАЯ» и «ДЕСЯТАЯ ВОЛНА» ниже.
>
> ---
>
@@ -51,6 +56,141 @@ related:
> Прогонялись **девять волн** проверок: см. таблицу волн ниже.
> Итог v7: «требует решения» **4**, medium **5811**, high **958**, mojibake = 0, остаточный mojibake = 0.
## 🖐 ОДИННАДЦАТАЯ ВОЛНА: КЛАСС C ПЕРЕСЧИТАН (1473 → 271) + ВОПРОС О МЕТОДЕ (2026-09-26)
### ✅ Дополнительная правка: `Отдыхаем хорошо(Ida Corr cocktail).mp3`
При финальной проверке (запрос Alex: **«Что-то осталось что требует от меня подсказки или все готово?»**)
осталось **2 строки** без `artist` и без `album`:
| Файл | Решение |
|---|---|
| `НАШЕСТВИЕ 2009 - ДЕНЬ ВТОРОЙ.mp3` | уже помечен `dropped (file removed by user)` / `no_change` — **в применение НЕ идёт**, не трогать |
| `Отдыхаем хорошо(Ida Corr cocktail).mp3` | ✅ исправлено: artist `DJ Иван Silver & Рэпер Сява`, title `Отдыхаем хорошо (Ida Corr cocktail)`, `action: no_change` → **`fix`** |
> 🔴 **ПИТФОЛЛ: ассистент заново спросил про `НАШЕСТВИЕ 2009`, хотя Alex уже говорил, что файл удалён.**
> Alex: **«Да блядь! Я тебе уже говорил кажется что нашествие блядь файл удален!!»** — на самом деле
> файл в CSV уже стоял с `dropped (file removed by user)`. **Правило: прежде чем спрашивать про строку —
> посмотреть её `action` и `source` в CSV.** Помеченное `dropped`/`no_change` в применение не идёт.
> Второй вопрос («вписать ли очевидного артиста?») Alex тоже снял: **«ты сам блядь сказал что очевидно,
> в чем блядь вопрос?!»** → очевидное вписывать молча.
### 🔴 КЛАСС C ПЕРЕСЧИТАН: детектор давал ЛОЖНЫЕ
Первый счётчик класса C (title == имя файла) дал **1473 строки**, но при разборе примеров оказалось,
что большинство — **НЕ баг**:
```
19 | Шопен — Похоронный марш.mp3 A: Aya Higuchi T: Шопен — Похоронный марш ← НОРМА
22 | Маленький принц.mp3 A: Микаэл Таривердиев T: Маленький принц ← НОРМА
23 | Милая моя.mp3 A: Юрий Визбор T: Милая моя ← НОРМА
```
Имя файла **равно названию песни** — это законный случай (название и лежит в имени файла).
**Реальный баг — только там, где имя файла содержит `artist + разделитель + title`,
а `new_artist` уже заполнен этим же artist.** Уточнённый детектор:
```python
if ' - ' in t:
first = t.split(' - ')[0].strip()
if first and a.lower().startswith(first.lower()):
# баг: artist продублирован в начале title
```
**Результат: 271 строка** (не 1466/1473).
Примеры (все — реальный брак):
```
Vanessa Mae - Aurora.mp3 A: Vanessa Mae T: Vanessa Mae - Aurora → T: Aurora
Vanessa Mae - Storm.mp3 A: Vanessa Mae T: Vanessa Mae - Storm → T: Storm
Pushnoy.ru - Песня для ТЭФИ A: Pushnoy.ru T: Pushnoy.ru - Песня для ТЭФИ → T: Песня для ТЭФИ
```
Ложное (НЕ править): `01 - Ленин - Град.mp3` — artist `Группировка Ленинград`, title `Ленин - Град`;
artist не совпадает с началом title.
> 🔴 **ПИТФОЛЛ: детектор «title дублирует имя файла» без проверки разделителя даёт ~80% ложных.**
> Сравнение `title == basename` ловит нормальный случай «название и есть имя файла».
> **Правильный признак бага: `artist` присутствует В НАЧАЛЕ `title` через ` - `.**
> Тот же урок, что с детектором «число-часть-названия» (1095 ложных в девятой волне).
**Распределение 271 строки по папкам (топ):**
| Папка | Строк |
|---|---:|
| `!Барды/Владимир Высоцкий` | 267 * |
| `!Pop, Club, Любэ/!Radio` | 106 * |
| `!Rock&Folk/Король и Шут` | 97 * |
| `!Rock&Folk/Наутилус Помпилиус` | 70 * |
| `!Rock&Folk/Агата Кристи` | 66 * |
> ⚠️ Звёздочкой помечено: цифры по папкам получены **первым (неверным) детектором**
> (1473 строки) — после уточнения до 271 распределение **не пересчитано**. Пересчитать при
> следующем заходе.
### 🛠 Правки класса C начаты (12 строк из 271)
Правлено по одной через `patch` по точному тексту (метод — см. «ВОПРОС О МЕТОДЕ» ниже):
`Vanessa Mae` — `Aurora`, `Storm`, `Tocatta & Fugue (D'S Jorney Mix)`, `Storm (Soundscape mix)`,
`I Feel Love (Single)`, `Can Can`, `Mason Wiliams - Classical Gras (Reggae Version)`,
`I Feel Love (Klubbheads .. edit)`, `Toccata & Fugue (D'S Hiphouse mix)`, `I Feel Love`,
плюс `Pushnoy.ru - Песня для ТЭФИ` и `?` — **12 строк**.
Все: `source` → `manual (user decision)`, `action` остался `fix`.
Путь-шаблон для `patch`: `/Vanessa Mae/Vanessa Mae - <Title>.mp3",empty,,,,<Title>,Vanessa Mae,,,fix,manual (user decision)`
(включать имя папки в `old_string` — иначе матчатся дубли из других папок).
### 🔴 ОТКРЫТЫЙ ВОПРОС О МЕТОДЕ (ждёт ответа Alex)
Темп ручной правки — **~1 строка за вызов `patch`**, класс C = 271 строка, всего осталось
~450 правок (C 259 + A 113 + D 11 + номер-в-title ~20 + транслит ~40).
Задан **один** вопрос: **запрет скриптов — это запрет уходить в код вместо данных, или запрет
автоматических правок без просмотра?** Варианты:
- **по одной** — медленно (часы), но полный контроль на каждой строке;
- **правило одним прогоном + показать diff всех 271 «было → стало»** — быстро, проверяемо.
**Ответа нет — сессия прервана на этом вопросе.**
> 🔴 **ПИТФОЛЛ: ассистент задал Alex четыре вопроса подряд про «4 класса» («Какие 4 класса?! Ты о чем?»,
> «Вопрос блядь задай!», «В чем сука вопрос?»).** Alex не понимал, о чём речь, потому что классы
> **не были названы конкретными строками в чате**. Правильно: называть **файлы и номера строк**,
> а не буквенные обозначения классов (`A`, `B`, `C`) из своих скриптов.
> **Правило: внутренние метки чекеров (A/B/C/D/F) в чат не выносить — только «файл + что не так».**
### 📊 СОСТОЯНИЕ НА КОНЕЦ ОДИННАДЦАТОЙ ВОЛНЫ
| Показатель | Значение |
|---|---:|
| Строк в CSV | 7906 |
| Битых строк | **0** |
| `fix` | 6773 |
| `no_change` | 1133 |
| Ручных правок (`source = manual (user decision)`) | **109** |
| Класс C «artist продублирован в title» | 12 / **271** сделано |
| Класс A «имя папки в artist» | **0 / 113** |
| Класс D «водяные знаки» | **0 / 11** |
| Номер трека в title (`!Детские/Детский хит`) | **0 / ~20** |
| Транслит вместо русского (`Sbornik_Novij_Rok`) | **0 / ~40** |
| Применение на NAS | **НЕ начато** |
**Последний бэкап CSV:** `tag-fix-plan.csv.bak-<stamp>` — делается после каждой серии правок,
полный список: `ls ~/Downloads/music-tags/tag-fix-plan.csv.bak-*`.
### ⏭ ЧТО ДЕЛАТЬ ПЕРВЫМ ДЕЛОМ В СЛЕДУЮЩЕЙ СЕССИИ
1. **Дождаться ответа Alex про метод** (по одной / один прогон + diff). Без ответа — идти по одной.
2. Дочистить **класс C: 259 строк** (детектор в этом разделе).
3. **Класс A: 113 строк** — имя папки (`disk`, `disk_v2`, `3 SHANSON`, `04`) в `new_artist`
→ брать artist из имени файла.
4. **Класс D: 11 строк** — водяные знаки из title (правило: вырезать).
5. Остальные: номер в title (~20), транслит (~40).
6. Только после этого — **бэкап в `Music/backup/` и применение** (по «go» Alex).
## 🖐 ДЕСЯТАЯ ВОЛНА: РЕШЕНИЯ ALEX ЗАПИСАНЫ + НАЙДЕН НОВЫЙ КЛАСС БРАКА В `!Radio` (2026-09-26)
### ✅ Решения Alex по блоку «требует решения» — ПОЛУЧЕНЫ (не применены)