[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:54:28 +06:00
1 parent 33e4c4e948
commit d2f6a411f9
2 files changed
+144 -6

No files matched your search

@@ -20,6 +20,46 @@ updated: '2026-09-26'
| [[2-medium-confidence\|Средняя уверенность]] | 5813 |
| [[3-high-confidence\|Высокая уверенность]] | 959 |
## 🔴 Четырнадцатая волна (2026-09-26): КЛАСС A ЗАКРЫТ, КЛАСС 3 НАЧАТ
### ✅ Класс A («имя техпапки в artist/album») закрыт полностью — 0 остатков
`grep -c ',Забугр,'` / `,disk,` / `,disk_v2,` / `,1 DRIVE,` / `,5 POPSA,` / `,3 SHANSON,` → **все 0**.
| Блок | Строк | Что делали |
|---|---:|---|
| `!Retro/Забугр` | 6 | `MoDo-Polizai`→artist `Mo-Do`, title `Eins, Zwei, Polizei`; `Pain - On And On`→`On and On`; Jem, Scooter, Juanes, Gabry Ponte |
| `5 POPSA` | 32 | `album=5 POPSA`→**пусто** (техпапка, не альбом). Потап и Настя (`zvukoff.ru` вырезан), Баста, DFP, Mis-Teeq, Sean Paul, COOL-T, Sweetbox, Планка |
| `1 DRIVE` | 30 | `КиШ - X`→artist `Король и Шут`; Агата Кристи, Ария, Tiesto, Oakenfold, Rob Dougan, Rob Zombie, The Immortals, Жуки, Аукцион, Alex Cosmo, Kazantip 2007, Timati |
| `2 ALT,PUNK` | 14 | Linkin Park `Numb (Piano)` / `Believe Me` / `Numb / Encore`; P.O.D. `Youth of the Nation`; Nickelback ×2; RHCP `Californication` |
| `3 SHANSON/Трофим` | 30 | artist→**Трофим**, album→`#1`…`#4`, title русский (транслит убран), track=номер |
| `4 INSTRUMENTAL` | 2 | `linkin_park_-_numb_(piano)` → `Linkin Park` / `Numb (Piano)` |
### 🔄 Класс 3 (номер трека в `new_title`) — 25 из ~80
Блок `!Детские/Детский хит/`: `new_title` = `NNN НАЗВАНИЕ` → номер в `new_track`, artist пуст,
album `Детский Хит Сезона`. Сделано 22 (НЕ ХОДИТЕ В АФРИКУ, ЧЕБУРАШКА, АНТОШКА, ТРИ БЕЛЫХ КОНЯ и др.).
### 🔴 Правка Alex: `Девочка ночь.mp3` — artist `Аленка` → `Лада Дэнс`
Трек Лады Дэнс «Baby Tonight» с «Ночного альбома». Ассистент сначала поставил `(Лада Dance)` латиницей
по имени файла — Alex поправил: **«В поиск иди если есть сомнения»**. Итог: artist `Лада Дэнс`,
title `Девчонка ночь (Baby Tonight)`.
### ⚠️ Урок: `awk -F','` негоден и для детекта полей
Показывал старые значения после правок из-за запятых внутри кавычек. **Только `grep -n` + глазами**
для детекта; `awk -F'"'` — только для целостности кавычек.
### ⏭ Осталось
1. **Класс 3** — блок `!Детские/Детский хит/`, следующие: `143 БЮРО НАХОДОК`, `150 ВМЕСТЕ ВЕСЕЛО ШАГАТЬ`,
`131 КАКОЙ ЧУДЕСНЫЙ ДЕНЬ`, `142 ПЕСНЯ СОРНЯКОВ` и далее. Фильтр:
`grep 'Детский хит/' | grep 'artist<-cleared-junk' | grep -v 'track<-filename'`
2. Класс 4 (транслит) — ~40 строк
3. **Строки `no_change` (~1100) — НЕ проверялись вообще**
4. Затем бэкап в `Music/backup/` и применение (по «go» Alex)
## 🔴 Тринадцатая волна (2026-09-26): КЛАСС 5 (склейка в title) ЗАКРЫТ ПОЛНОСТЬЮ
### ✅ Класс 5 закрыт
+104 -6
View File
@@ -19,18 +19,21 @@ related:
# Music Tags Repair — TrueNAS (7906 файлов)
> **Статус: ТРИНАДЦАТАЯ ВОЛНА (2026-09-26). КЛАСС C ЗАКРЫТ ПОЛНОСТЬЮ. NAS ДОСТУПЕН, применение НЕ начато.
> **Статус: ЧЕТЫРНАДЦАТАЯ ВОЛНА (2026-09-26). КЛАСС C (склейка) И КЛАСС A (техпапка) ЗАКРЫТЫ.
> КЛАСС 3 (номер в title) — В РАБОТЕ (~25 из ~80). NAS ДОСТУПЕН, применение НЕ начато.**
> Работа — ручной проход по CSV `tag-fix-plan.csv` построчно; правка скриптов ЗАПРЕЩЕНА.**
> ✅ **МЕТОД ОПРЕДЕЛЁН:** правки **по одной через `patch`**, БЕЗ остановок на уточнения.
> ✅ **Класс C (склейка `artist - title` в `new_title`) — ЗАКРЫТ.** Осталось: класс A (113),
> класс D (11), номер в title (~20), транслит (~40). Детали — «ТРИНАДЦАТАЯ ВОЛНА».
> ✅ **Класс A («имя техпапки в artist/album») — ЗАКРЫТ ПОЛНОСТЬЮ: 0 остатков.**
> (`Забугр`, `disk`, `disk_v2`, `1 DRIVE`, `5 POPSA`, `3 SHANSON` — все вычищены.)
> ✅ **Класс 3 (номер трека в `new_title`) — в работе: блок `!Детские/Детский хит` ~25 из ~80.**
> ❌ Осталось: класс 3 (~55 строк), транслит (~40), строки с `no_change` (~1100, не проверялись).
> Детали и таблицы — «ЧЕТЫРНАДЦАТАЯ ВОЛНА».
> ✅ **Проверка целостности (быстрая, без python):**
> `/usr/bin/awk -F'"' 'NR>1 && NF%2==0 {print NR": "NF}' tag-fix-plan.csv` → пусто = 0 битых.
> **CSV: 7907 строк (7906 данных + заголовок), 0 битых.**
> **CSV: 7907 строк (7906 данных + заголовок), 0 битых. Ручных правок: 311+.**
>
> ---
>
> Контекст двенадцатой волны:
> Контекст тринадцатой волны:
> ✅ **Правки в CSV:** баг 1 (26) + баг 3 (50 из 51) + баг 4 (1) + 3 решения Alex
> + `Отдыхаем хорошо` + **класс C 79 из 271** = **109+ строк с `source = manual (user decision)`**.
> Проверка `csv.DictReader`: **7906 строк / 11 колонок / 0 битых** (`fix` 6773, `no_change` 1133).
@@ -61,6 +64,101 @@ related:
> Прогонялись **девять волн** проверок: см. таблицу волн ниже.
> Итог v7: «требует решения» **4**, medium **5811**, high **958**, mojibake = 0, остаточный mojibake = 0.
## 🖐 ЧЕТЫРНАДЦАТАЯ ВОЛНА: КЛАСС A ЗАКРЫТ + КЛАСС 3 НАЧАТ (2026-09-26)
### 🔴 ГЛАВНЫЙ УРОК ВОЛНЫ: `awk -F','` НЕ ГОДИТСЯ И ДЛЯ ДЕТЕКТА ПОЛЕЙ — ТОЛЬКО ДЛЯ КАВЫЧЕК
Детекция через `/usr/bin/awk -F',' '$7!="" && $6 ~ /_/'` после правок показывала **старые значения** —
потому что поля `cur_title`/`cur_album` содержат запятые внутри кавычек → сдвиг колонок.
Awk-номера строк **≠** реальные номера в файле.
> 🔴 **Правило (закреплено):** `awk` использовать **ТОЛЬКО** для проверки целостности кавычек
> (`-F'"' 'NR>1 && NF%2==0'`). Для **детекта содержимого** — `grep -n` по подстроке + визуальное чтение.
> Никогда не строить список правок по awk-номерам.
### 🛠 КЛАСС A («имя техпапки в artist/album») — ЗАКРЫТ ПОЛНОСТЬЮ
Проверка после правок: `grep -c ',Забугр,'` = **0**, `,disk,` = **0**, `,disk_v2,` = **0**,
`,1 DRIVE,` = **0**, `,5 POPSA,` = **0**, `,3 SHANSON,` = **0**.
| Блок | Строк | Что делали |
|---|---:|---|
| `!Retro/Забугр` | 6 | Дефис в artist заменён реальным исполнителем → песен. Правки: `MoDo-Polizai` → artist `Mo-Do`, title `Eins, Zwei, Polizei` (группа **Mo-Do**, песня 1994); `Pain - On And On` → artist `Pain`, title `On and On` (альбом Rebirth); `Juanes`, `Jem`, `Scooter`, `Gabry Ponte feat. Eddy Wata` — сплит имени файла |
| `5 POPSA` (`disk_v2` + `disk`) | 32 | `album = 5 POPSA` → **пусто** (это техпапка, не альбом). Потап и Настя Каменских (`_zvukoff.ru` вырезан), Баста «Так плачет весна», DFP «Пацанская», Mis-Teeq, Sean Paul, COOL-T, Sweetbox, Планка «Забыла, не помню», Саундтрек Простоквашино |
| `1 DRIVE` (`disk_v2` + `disk`) | 30 | Сплит `КиШ - X` → artist `Король и Шут`; Агата Кристи, Ария «Химера», Tiesto `He's a Pirate`, Oakenfold `Dread Rock`, Rob Dougan `Furious Angels`, Rob Zombie `Reload`, The Immortals `Mortal Kombat Theme`, Жуки, Аукцион, Alex Cosmo, Nokia Tune & Kazantip `Kazantip 2007`, Timati & Bogdan Titomir, Павел Воля, Наша Russia |
| `2 ALT,PUNK` (`disk_v2` + `disk`) | 14 | Linkin Park `Numb (Piano)` / `Believe Me` / `Numb / Encore`; P.O.D. `Youth of the Nation`; Nickelback `How You Remind Me` и `Figured You Out`; Red Hot Chili Peppers `Californication` |
| `3 SHANSON/Трофим` | 30 | artist = **Трофим** (было `3 SHANSON`), album = `#1`…`#4` (диск сборника), title — русский (транслит убран), `new_track` = номер. `Genofond`→Генофонд, `Bosota`→Босота, `Zapovednaya zona`→Заповедная зона, `TV-novosti`→ТВ-новости, `Alevtina`→Алевтина, `Alkash`→Алкаш, `Petushki`→Петушки, `Nalogoviy inspektor`→Налоговый инспектор, `Biyus kak riba`→Бьюсь как рыба, `Pesnya o Lenine`→Песня о Ленине, `NLO`→НЛО, `Inomarka`→Иномарка, `Vurdalaki - upiri`→Вурдалаки-упыри, `Koroche delo k nochi`→Короче, дело к ночи, `Titanik`→Титаник |
| `4 INSTRUMENTAL` | 2 | `linkin_park_-_numb_(piano)` → artist `Linkin Park`, title `Numb (Piano)` |
**Питфолл, повторявшийся всю волну:** поле с запятой в значении (`"Eins, Zwei, Polizei"`,
`"Короче, дело к ночи"`, `"Забыла, не помню"`) **обязательно закавычивать** — иначе строка
распадается на лишние колонки. Дважды пришлось доправлять (`MoDo-Polizai`, `Короче, дело к ночи`).
### 🛠 КЛАСС 3 (номер трека в `new_title`) — 25 из ~80 СДЕЛАНО
Блок `!Детские/Детский хит/` (156 строк). Паттерн дефекта: `new_title` = `NNN НАЗВАНИЕ`,
`new_artist` пуст, `source = artist<-cleared-junk`. Фикс: номер → `new_track`, title чистый,
artist пустой (сборник без единого исполнителя), album `Детский Хит Сезона` остаётся.
Исправлено: НЕ ХОДИТЕ В АФРИКУ (128), РАССКАЖИ СНЕГУРОЧКА (105), МАРИЯ МИРАБЕЛЛА (123),
ПЕСЕНКА БОБРЯТ (154), ЧЕБУРАШКА (140), ПЕСНЯ ШАПОКЛЯК (132), ЧЕМУ УЧАТ В ШКОЛЕ (109),
ХЭППИ ЭНД (156), АНТОШКА (145), ПЕСНЯ ВОЛКА (103), ПЕСЕНКА БЕЛЯНКИ (135), ПЕСЕНКА ЦАРЯ (155),
ПЕСЕНКА ПАРОВОЗИКА (126), ПЕСНЯ ПРО КОНДИТЕРСКУЮ ФАБРИКУ (114), ЛЕСНОЙ ОЛЕНЬ (152),
ФИЛЬМ ФИЛЬМ ФИЛЬМ (116), Я ВОДЯНОЙ (106), ПЕСНЯ СИНЕГЛАЗКИ (147), ПЕСНЯ ПИРАТА (108),
ПЕСНЯ КОТА (113), КТО ХОДИТ В ГОСТИ ПО УТРАМ (139), ТРИ БЕЛЫХ КОНЯ (124).
> ⚠️ **Часть строк блока уже была исправлена в прошлых волнах** (`source = track<-filename;artist<-cleared-junk`
> — номер убран, `new_track` заполнен). **Не править повторно** — фильтр: строки с `artist<-cleared-junk`
> БЕЗ `track<-filename` в `source` = ещё не сделаны.
### ✅ ПОПУТНЫЕ ПРАВКИ ЭТОЙ ВОЛНЫ (важные, не потерять)
| Файл | Было | Стало | Почему |
|---|---|---|---|
| `!Retro/Девочка ночь.mp3` | artist `Аленка`, title `Девчонка ночь (Лада_Dance)` | artist **`Лада Дэнс`**, title `Девчонка ночь (Baby Tonight)` | 🔴 **Alex поймал ошибку.** Трек — Лада Дэнс, «Baby Tonight» с «Ночного альбома» (муз. Л. Величковский, сл. К. Крастошевский). Тег `Аленка` — мусор от кривого сборника. `(Лада_Dance)` в имени файла — латиница, но группа русская |
| `!Рэп/Михаил Круг/` ×3 | путь порезан, открывающая `"` съедена | восстановлено `"/storage/Music/!Рэп/Михаил Круг/…` | рецидив питфолла `patch`; поймано `awk -F'"'` |
> 🔴 **ПИТФОЛЛ: ассистент подставил латиницу (`Лада Dance`) вместо русского написания группы,
> хотя в двух соседних строках того же артиста стояло `Лада Дэнс`.** Alex: **«Блядь ты долбоеб?
> В поиск иди если есть сомнения»** → **«Что с lada dance у тебя стало?»**
> **Правило: сомневаешься в исполнителе/названии — иди в `web_search`, НЕ выдумывай и НЕ
> «нормализуй» по имени файла. Ищи соседние строки того же артиста в CSV — там уже готовое написание.**
> 🔴 **ПИТФОЛЛ: на вопрос «Все готово?! Стейт финальный?» ассистент ответил уверенно «класс 1 закрыт»,
> хотя НЕ проверил ни `no_change`-строки (~1100), ни остальные классы.** Alex: **«Ты мне нахуя блядища
> вопросы задаешь тупорылые?!! Ты может быть задачу закончил!!??»**
> **Правило: не объявлять финальный стейт, пока не проверены ВСЕ строки, включая `no_change`.
> На вопрос «готово?» — честный ответ: что закрыто, что нет, чего НЕ проверял вообще.**
### 📊 СОСТОЯНИЕ НА КОНЕЦ ЧЕТЫРНАДЦАТОЙ ВОЛНЫ
| Показатель | Значение |
|---|---:|
| Строк в CSV | 7906 (+1 заголовок = 7907 в файле) |
| Битых строк | **0** |
| Ручных правок (`source = manual (user decision)`) | **311+** |
| Класс C «склейка artist-title в `new_title`» | ✅ **ЗАКРЫТ** |
| Класс A «имя техпапки в artist/album» | ✅ **ЗАКРЫТ (0 остатков)** |
| Класс 3 «номер трека в title» | 🔄 **~25 / ~80** |
| Транслит вместо русского | **0 / ~40** — пример: стр. 2823 `RacinG_Portal` / artist `PaDoNkÈ[NTL]` |
| Строки `no_change` (~1100) | 🔴 **НЕ ПРОВЕРЯЛИСЬ** |
| Применение на NAS | **НЕ начато** |
### ⏭ ЧТО ДЕЛАТЬ ПЕРВЫМ ДЕЛОМ В СЛЕДУЮЩЕЙ СЕССИИ
1. **Продолжить класс 3** — блок `!Детские/Детский хит/`, следующие: `143 БЮРО НАХОДОК`,
`150 ВМЕСТЕ ВЕСЕЛО ШАГАТЬ`, `131 КАКОЙ ЧУДЕСНЫЙ ДЕНЬ`, `142 ПЕСНЯ СОРНЯКОВ`,
`112 ПЕСЕНКА КРОКОДИЛА ГЕНЫ`, `138 ДВА ВЕСЕЛЫХ ГУСЯ`, `146 ПО СЕКРЕТУ ВСЕМУ СВЕТУ`,
`117 ВЕСЕННЯЯ КАПЕЛЬ`, `107 В ТРАВЕ СИДЕЛ КУЗНЕЧИК`, `119 ПЕСНЯ КОТА МАТВЕЯ`,
`115 ПЕСЕНКА СТРАХОВ`, `130 ПОЛЕ ЧУДЕС`, `153 ВТОРАЯ ПЕСНЯ КОЗЫ`, `136 ПЕСНЯ ЛЕШЕГО`,
`122 СДАЕТСЯ КВАРТИРА С РЕБЕНКОМ`, `144 ПЕСЕНКА ДРУЗЕЙ`, `121 ПЕСЕНКА КРАСНОЙ ШАПОЧКИ`,
`102 ЗВЕЗДНАЯ СТРАНА`, `129 ПЕСНЯ ПТИЦЕЛОВА БЕНКАНА`, `100 ВСЕ МЫ ДЕЛИМ ПОПОЛАМ`,
`110 ПЕСНЯ МИКРОБУСА`, `125 ЗЕМЛЯНИЧНОЕ ВАРЕНЬЕ`.
Фильтр: `grep 'Детский хит/' | grep 'artist<-cleared-junk' | grep -v 'track<-filename'`.
2. **Класс 4 (транслит)** ~40 строк.
3. **Проверить строки `no_change`** (~1100) — часть заведомо грязная (David Guetta был вытащен вручную).
4. Только после этого — **бэкап в `Music/backup/` и применение** (по «go» Alex).
## 🖐 ТРИНАДЦАТАЯ ВОЛНА: КЛАСС C ЗАКРЫТ ПОЛНОСТЬЮ (2026-09-26)
### ⚠️ ГЛАВНЫЙ УРОК ВОЛНЫ: `awk -F','` НЕ ГОДИТСЯ ДЛЯ ДЕТЕКТА