[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:
1 parent
9d5bcf71ba
commit
18386780e3
2 files changed
+87
-19
No files matched your search
@@ -19,16 +19,18 @@ related:
|
||||
|
||||
# Music Tags Repair — TrueNAS (7906 файлов)
|
||||
|
||||
> **Статус: ДЕСЯТАЯ ВОЛНА (2026-09-26). NAS ДОСТУПЕН, применение НЕ начато.
|
||||
> **Статус: ДЕСЯТАЯ ВОЛНА ЗАВЕРШЕНА (2026-09-26). NAS ДОСТУПЕН, применение НЕ начато.
|
||||
> Работа — ручной проход по CSV `tag-fix-plan.csv` построчно; правка скриптов ЗАПРЕЩЕНА.**
|
||||
> ✅ **ПЕРВЫЕ 33 ПРАВКИ ВНЕСЕНЫ В CSV** (баг 1 полностью + баг 4 + начало бага 3).
|
||||
> ✅ **Решения Alex по блоку «требует решения» получены** (из файла `1-needs-decision.md` + чата):
|
||||
> ✅ **108 ПРАВОК ВНЕСЕНЫ В CSV** — баг 1 (26) + баг 3 (50 из 51) + баг 4 (1) + 3 решения Alex.
|
||||
> Проверка `csv.DictReader`: **7906 строк / 11 колонок / 0 битых**.
|
||||
> ✅ **Решения Alex по блоку «требует решения» ПРИМЕНЕНЫ** (из файла `1-needs-decision.md` + чата):
|
||||
> `Kazantip 2008`→artist `Kazantip 2008`; `i am instructor`→artist `Techno Beat`;
|
||||
> `Из чего же`→artist «Большой детский хор ЦТ и Всесоюзного радио».
|
||||
> `Из чего же`→artist «Большой детский хор Центрального телевидения и Всесоюзного радио».
|
||||
> ✅ **Решён вопрос про водяные знаки: ВЫРЕЗАТЬ.** Alex: «БЛЯДЬ как ты думаешь дебил??»
|
||||
> 🔴 **Построчный ручной проход не закончен** — закрыто 86 строк из 7906. Блок 1 `!Radio`
|
||||
> (453 строки) вскрыл **новые классы брака**: имя файла целиком в `title`, имя папки-сборника
|
||||
> в `artist` (`disk`, `disk_v2`, `3 SHANSON`), оборванные скобки, водяные знаки, номер в title.
|
||||
> 🔴 **Построчный проход по всем 7906 строкам НЕ закончен** — закрыты известные дефекты
|
||||
> (26+50+1+3 = 80 строк). Блок 1 `!Radio` (453 строки) вскрыл **новые классы брака**:
|
||||
> имя файла целиком в `title` (**1466 строк**), имя папки-сборника в `artist` (**113**),
|
||||
> водяные знаки (11), номер в title (папка `Детский хит`), транслит вместо русского.
|
||||
> Питфоллы прочитать в разделе «ДЕСЯТАЯ ВОЛНА» ниже.
|
||||
>
|
||||
> ---
|
||||
@@ -150,23 +152,82 @@ python3 dump_block.py ALL --limit 500 # вся библиотека по
|
||||
|
||||
| Артефакт | Статус |
|
||||
|---|---|
|
||||
| `tag-fix-plan.csv` | 7906 строк / 11 колонок, **33 правки внесены** (проверено `csv.DictReader`: 0 битых строк) |
|
||||
| `tag-fix-plan.csv` | 7906 строк / 11 колонок, **108 правок внесены** (проверено `csv.DictReader`: 0 битых строк) |
|
||||
| `tag-fix-plan.csv.bak-20260926-171423` | ✅ бэкап **до** начала правок этой волны |
|
||||
| `tag-fix-plan.csv.bak-20260926-172625` | ✅ бэкап **после** закрытия багов 1/3/4 (до needs-decision) |
|
||||
| `dump_block.py` | ✅ создан (выгрузка блока для ручного прохода) |
|
||||
| `find_defects.py` | ✅ создан (счётчик дефектов A–F) — **Alex запретил писать скрипты после него** |
|
||||
| `check_artist_number.py` | ✅ подтвердил 26 строк с `NNN_`; после правок → **0** |
|
||||
| Блок «требует решения» в CSV | **0 строк** (в ноте 4 файла — расхождение ноты и CSV) |
|
||||
|
||||
### ✅ ЧТО СДЕЛАНО В ЭТОЙ ВОЛНЕ (33 правки, все в `tag-fix-plan.csv`)
|
||||
### 🔴 ПИТФОЛЛЫ ПРАВКИ CSV, найденные в этой волне (обязательно к прочтению)
|
||||
|
||||
**1. Правка идёт по ТЕКСТУ строки, не по номеру из чекера.**
|
||||
Номера строк из `check_artist_number.py` / `find_defects.py` считают **записи данных**,
|
||||
а `sed -n 'Np'` — реальные строки файла с учётом кавычек и переносов. Они **не совпадают**.
|
||||
Правильно: сначала `grep -n '<уникальный фрагмент>'` → взять точный текст строки → `patch` по нему.
|
||||
|
||||
**2. `patch` с двойным совпадением — брать длинный контекст.**
|
||||
Один и тот же файл лежит в двух папках → `old_string` матчится дважды
|
||||
(`Found 2 matches`). Решение: включать в `old_string` уникальный фрагмент пути
|
||||
(`.../z Старое/disk/...`) или полный путь до имени файла.
|
||||
|
||||
**3. ГЛАВНАЯ ЛОВУШКА: `patch` съедал открывающую кавычку пути.**
|
||||
Когда `old_string` начинается с `-Сим-Сим, откройся!.mp3"` (значение с запятой,
|
||||
поле закавычено), замена оставляла строку **без открывающей `"`** → CSV-парсер видел
|
||||
сдвиг колонок. Проверка после КАЖДОЙ серии правок обязательна:
|
||||
```python
|
||||
csv.DictReader(open(f, newline="", encoding="utf-8-sig")) # len(row) == 11 у всех
|
||||
```
|
||||
Именно этой проверкой найдена и починена строка **7273**.
|
||||
|
||||
**4. `patch` дублировал поля при нечётком `old_string`.**
|
||||
Если `old_string` короче строки (нет хвоста `,N,fix,track<-filename`), замена вставляла
|
||||
новые значения, а старый хвост оставался → `manual (user decision)rack<-filename`,
|
||||
`Откровенные фотографии,2,fix,manual (user decision)track<-filename`.
|
||||
**Правило: `new_string` собирать строго на 11 полей, обрезая старый хвост целиком.**
|
||||
|
||||
**5. Значение с ЗАПЯТОЙ обязано быть в кавычках.**
|
||||
`Давно не виделись, здравствуй!` без кавычек → парсер видит 12 полей вместо 11.
|
||||
Правильно: `"Давно не виделись, здравствуй!"`. Проверять после каждой правки title,
|
||||
где встречается запятая.
|
||||
|
||||
**6. `grep -c 'ґ'` даёт 1 даже после фикса** — остаётся в `path` (имя файла) и `cur_title`.
|
||||
В `new_title`/`new_artist` после фикса — чисто. Проверять поля, а не строку целиком.
|
||||
|
||||
### ✅ ИТОГ ВОЛНЫ: 5 задач закрыто
|
||||
|
||||
| Задача | Строк | Итог |
|
||||
|---|---:|---|
|
||||
| Баг 1 — `NNN_` в `new_artist` | 26 | ✅ 0 остатков |
|
||||
| Баг 3 — срезанная `!`/`?` | 51 | ✅ 50 исправлено + 2 ложных отсеяны |
|
||||
| Баг 4 — `ґ` → `'` | 1 | ✅ |
|
||||
| N — `Kazantip 2008 - Beat` | 1 | ✅ artist `Kazantip 2008`, title `Beat` |
|
||||
| N — `i am instructor` | 1 | ✅ artist `Techno Beat` |
|
||||
| N — `Из чего же` | 1 | ✅ artist «Большой детский хор ЦТ и Всесоюзного радио» |
|
||||
|
||||
**Не закрыто (следующая волна) — 4 класса, найдены при проходе:**
|
||||
1. `new_title` дублирует имя файла — **1466 строк**
|
||||
2. имя папки-сборника в `artist` (`disk`, `disk_v2`, `3 SHANSON`, `04`) — **113 строк**
|
||||
3. водяные знаки в title (`zvukoff.ru`, `goldwarez.org`, `muzmo.ru`) — **11 строк**
|
||||
4. номер трека в `new_title` (папка `!Детские/Детский хит`) + транслит вместо русского
|
||||
(`Sbornik_Novij_Rok`: `Kontrabandy`, `Ya Popala`)
|
||||
|
||||
**Применение тегов на NAS НЕ начато** — ждёт «go» Alex + бэкап в `Music/backup/`.
|
||||
|
||||
### ✅ ЧТО СДЕЛАНО В ЭТОЙ ВОЛНЕ (108 правок, все в `tag-fix-plan.csv`)
|
||||
|
||||
| Баг | Строк | Что сделано |
|
||||
|---|---:|---|
|
||||
| **1** — номер плейлиста в `new_artist` (`084_Потап`) | **26** | ✅ **ПОЛНОСТЬЮ ЗАКРЫТ** — срезан `^\d{1,4}_`, проверка даёт 0 |
|
||||
| **4** — `ґ` вместо апострофа | **1** | ✅ `A Far Lґamore` → `A Far L'amore` (стр. 3278) |
|
||||
| **3** — срезанная хвостовая `!`/`?` | **51** | ⏳ **6 сделано, 45 осталось** — из списка исключены 2 ложных (см. ниже) |
|
||||
| **W** — водяные знаки | 11 | ⏳ правило утверждено, правки не начаты |
|
||||
| **3** — срезанная хвостовая `!`/`?` | **51** | ✅ **ЗАКРЫТ: 50 сделано**, 2 ложных исключены (title — другой трек) |
|
||||
| **W** — водяные знаки | 11 | ⏳ правило утверждено (ВЫРЕЗАТЬ), правки не начаты |
|
||||
| **N** — решения Alex (needs-decision) | 3 | ✅ применены: `Kazantip 2008`, `i am instructor`, `Из чего же` |
|
||||
|
||||
У всех правленых строк `source` → **`manual (user decision)`** и `new_track` не менялся.
|
||||
У всех правленых строк `source` → **`manual (user decision)`**, `new_track` не менялся.
|
||||
Ложные для бага 3 (НЕ править): `Комон эврибади!.mp3` (title = `Рио-рита (Mega-Style-Mix)`)
|
||||
и `Уходим в море!.mp3` (title = `Дорожка 08`).
|
||||
|
||||
**Строки бага 1, закрытые (26):** `084_Потап` ×3 (2977/3126/4414), `035_Denis The Menace`,
|
||||
`076_Mednezz`, `163_Gusto`, `093_Kerli`, `150_!Boom!`, `197_Electrodomestici`, `003_Inna`,
|
||||
|
||||
Reference in new issue
Block a user