From bf95d4c8259ac9277dcc9c69dbbdea047289ede7 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 26 Sep 2026 17:34:12 +0600 Subject: [PATCH] [2026-09-26] eagle: personal/plans/music-tags-review/music-tags-review.md personal/tech/music-tags-repair-truenas.md --- .../music-tags-review/music-tags-review.md | 48 +++++- personal/tech/music-tags-repair-truenas.md | 154 +++++++++++++++++- 2 files changed, 190 insertions(+), 12 deletions(-) diff --git a/personal/plans/music-tags-review/music-tags-review.md b/personal/plans/music-tags-review/music-tags-review.md index a900e230..e76c59d5 100755 --- a/personal/plans/music-tags-review/music-tags-review.md +++ b/personal/plans/music-tags-review/music-tags-review.md @@ -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-конфликтом diff --git a/personal/tech/music-tags-repair-truenas.md b/personal/tech/music-tags-repair-truenas.md index 8f7bba1d..f2e480b8 100755 --- a/personal/tech/music-tags-repair-truenas.md +++ b/personal/tech/music-tags-repair-truenas.md @@ -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 - .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 по блоку «требует решения» — ПОЛУЧЕНЫ (не применены)