[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/tech/id3-tag-repair.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 15:04:49 +06:00
1 parent 85f0f009dd
commit 62c21e4d33
2 files changed
+136 -9

No files matched your search

+49
View File
@@ -274,6 +274,55 @@ md5 out.csv && python3 gen.py > /tmp/run.log 2>&1 && md5 out.csv # MD5 обя
запятой, `$1`/`$4` уезжают в фрагмент имени папки. `scope` считается правильно (`ПАПКА`/`ТРЕК`
первое поле), а `field` — нет. Только `csv.DictReader`.
### 🔴 D10 — запись по ЧИСЛОВОМУ индексу вместо имени колонки затирает соседнее поле
`APPLY-PLAN.csv` — 16 колонок; `changed` = **индекс 15**, а `new_track` = **14**.
Скрипт сессии 14 записал `data[i][14] = "yes"`, полагая, что это `changed` → у 20 строк
`new_track` затёрся на `"yes"`, а `changed` остался прежним. Обнаружено только верификацией.
**Правило:** всегда `H = {c: i for i, c in enumerate(hdr)}` + `assert` на позиции ключевых
колонок. Карта индексов `APPLY-PLAN.csv`:
`0 path · 1 folder · 2 class · 3 cur_title · 4 cur_artist · 5 cur_albumartist · 6 cur_album ·
7 cur_genre · 8 cur_track · 9 new_title · 10 new_artist · 11 new_albumartist · 12 new_album ·
13 new_genre · 14 new_track · 15 changed`.
Обязательный `assert (H["new_track"], H["changed"]) == (14, 15)`.
### 🔴 D11 — значения-СЕНТИНЕЛЫ в тегах: `99 / 51 / 46 / 117 / 238 / 236 / 204`
Теггеры и сайты пишут в поля не «пусто», а магические числа. План копирует их как данные:
| Значение | Смысл | Где найдено |
|---|---|---|
| `99`, `51`, `46` | «номера нет» (сентинел теггера) | все папки, одиночки |
| `236` | счётчик скачанных файлов теггера **muzmo.ru** | `cur_album='[muzmo.ru]'`, 11 строк |
| `204` | не-трек из имени (`204-Infected…`) | Infected Mushroom |
| `238` | один номер на ВСЕ альбомы (Красная Плесень) | 56 строк, 5 альбомов |
| `117` | один номер на 4 разные папки (Король и Шут) | 34 строки |
**Признак сентинела:** одно и то же крупное число у МНОГИХ файлов разных альбомов/папок.
**Проверка:** `Counter(cur_track)` по папке; если одно значение >= 5 файлов и альбомы разные — мусор.
**Правило:** сентинел → пусто; но **сначала** попробовать вытащить номер из имени файла.
### 🔴 D12 — мусорные значения `album` из тега: плейсхолдеры, годы, водяные знаки
План копирует `cur_album` **без фильтра**. Найдено и вычищено 20 строк (сессия 14):
| Значение | Тип |
|---|---|
| `Non spécifié`, `Non specifie` | плейсхолдер (франц. «не указано») |
| `NULL`, `NoTitLe`, `no title`, `Album`, `New`, `mix` | плейсхолдер теггера/техпапка |
| `Неизвестное название` (`Íåèçâåñòíîå…`) | тот же плейсхолдер в CP1251-битье |
| `2005 `, `2007` | только-год |
| `~melody.az - КняZz - Корсар~` | водяной знак сайта + склейка артист-трек |
**Целевое значение = имя корня артиста** (последний сегмент `folder`); если корень —
категория (`!*`) или папка-мусорка (`misc`/`base`/`plux`/`старые`) → артист (сегмент
после категории). `Pushnoy.ru` — сайт-источник: все подпапки (`2007`/`старые`/`NEW`)
не альбомы → `Pushnoy.ru`.
**Скрипт:** `~/Downloads/music-tags/fix_junk_album.py` (dry-run по умолчанию, `--apply` пишет).
**Верификация:** `verify_junk_album.py` — перечитывает файл, сверяет контрольные точки.
## 🔴 Классы порчи `albumartist` (сессия 7, 2026-09-27)
Три класса, найденных сплошным поиском по `APPLY-PLAN.csv`. Все три — из-за того, что правило