[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/plans/music-artist-albumartist-repair.md.bak-20260927-210643 personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 21:09:35 +06:00
1 parent d787749dd5
commit 2d09ae3dff
3 files changed
+7732 -7371

No files matched your search

+46 -4
View File
@@ -26,8 +26,8 @@ related:
> ## 🔴 АКТУАЛЬНОЕ СОСТОЯНИЕ (2026-09-27, сессия 29-ОКТИ) — ЧИТАЙ ЭТО ПЕРВЫМ
>
> ✅ **КАНОННЫЙ ДИФФ v3 СОБРАН И ЗАКРЫТ:** `~/Downloads/music-tags/DIFF-base-vs-applyplan-v3.csv`
> — **945 записей**, `md5 a89d7b56ce65835c361395c5b7d1064d`. Поля: `album` 28 ·
> `albumartist` 6 · `genre` 911. `track` — **0** (весь блок убран как шум, см. ниже).
> — **945 записей**, `md5 bdb20c6ae00e7dfab4da2f76653fe084`. Поля: `album` 28 ·
> `albumartist` 6 · `genre` 427. `track` — **0** (весь блок убран как шум, см. ниже).
> База 7861 ↔ план 7861, сопоставлено 7861, **не найдено 0** (фильтр `path NOT LIKE 'backup%'`).
> Источник: `/tmp/apply-plan-v3.csv` (7861, из `new_*` `APPLY-PLAN.csv` + правило корня;
> **31 правка**, лог с колонкой `reason` — `~/Downloads/music-tags/APPLY-PLAN-v3-changes.csv`).
@@ -46,6 +46,10 @@ related:
> `6 → 6/14` и `8 → 08` **значение НЕ меняют**. Скрипты `/tmp/drop_track_noise.py` (+ добор).
> ⚠️ **ПИТФОЛЛ СЧЁТА:** `awk -F',' | grep -c "/"` дал **33** вместо **117** — `awk` разваливает
> пути с запятыми в кавычках. Считать CSV-парсером. **РЕШЕНИЕ ALEX: `N/M` в треках НЕ ПРАВИМ.**
> 🔑 **РЕГРЕССИЯ ЗАКРЫТА НАВСЕГДА:** фильтр `N/M` **вшит внутрь `build_canon_diff_v3.py`**
> (`_is_track_noise`, строки 99-114), а не в отдельный скрипт. Проверка идемпотентности:
> повторный прогон даёт те же 945 строк. Первая версия фильтра жила отдельно → при пересборке
> шум возвращался (118 строк). **Фильтр обязан быть в самом генераторе.**
>
> ✅ **ОБА ДЕФЕКТА ВЕРИФИКАЦИИ ЗАКРЫТЫ** (`/tmp/fix_v3_typos.py`, бэкап
> `/tmp/apply-plan-v3.csv.bak-20260927-204950`; `APPLY-PLAN.csv` — канон/RC — **НЕ ТРОНУТ**):
@@ -55,6 +59,17 @@ related:
> 2. `!A Not sorted/…/Андервуд` (опечатка в имени папки) протекла в `album` →
> **`Андервуд → Ундервуд`** (доказательство — `cur_artist` того же файла).
>
> ✅ **ЕЩЁ ДВА ФИКСА ПО ЗАМЕЧАНИЯМ ALEX** (`/tmp/fix_ruki.py`, `/tmp/fix_rockopop_track.py`,
> бэкапы `/tmp/apply-plan-v3.csv.bak-20260927-205732` и `-205822`):
> 3. **`!Retro/Руки` → `Руки вверх`** (5 файлов). Alex: «"Руки" поправь чтобы совпадало с
> основным Руки Вверх альбомом». Эталон — `!Pop, Club, Любэ/Руки вверх` (`album='Руки вверх'`).
> В `!Retro/Руки` было 4 разных `album`: `Руки`(5) · `Сделай еще громче`(1) ·
> `Здравствуй, это я`(1) · `Конец попсе, танцуют все`(1) — правились только `Руки`.
> 4. **`!rock_o_pop` → `rock_o_pop`** (2 файла). Alex: «вот это отщепилось от других треков
> там, кажется "!" сносился». Папка `!Rock&Folk/!rock_o_pop`: 28 файлов имели
> `album='rock_o_pop'` (снятый `!`), 2 отстали с `album='!rock_o_pop'` — фикс снятия `!`
> применялся по списку и часть файлов из него выпала. Диагностика: `/tmp/diag_root_junk.py`.
>
> ✅ **«КОРОТКИЙ СПИСОК ОПЕЧАТОК» — все 6 правок УЖЕ в `APPLY-PLAN.csv`** (Простоквашено 0 ·
> Агата кристи 0 · 11 Track 11 0 · IM-склейка 0 · `Radio - ` 0 · Бард - Авангард 0 в `new_*`).
> v3-генератор их наследует автоматически. Скрипт: `/tmp/check_shortlist_full.py`.
@@ -66,12 +81,39 @@ related:
> 🔴 **РЕШЕНИЕ ALEX: ПАПКУ `Разное` НЕ РАЗГРЕБАЕМ.** Класс 76 файлов (папки-мусорки внутри
> артиста: `Высоцкий/Разное` 44 · `Пилот/Избранное` 14 · `ДДТ/2003 - песни` 10 ·
> `Rammstein/misc` 3 и др.) — **ПЛАН, а не дефект**: папка-мусорка намеренно становится
> альбомом-мусоркой. **НЕ «улучшать»**, детектор `/tmp/diag_root_junk.py` ловит их ложно.
> альбомом-мусоркой. Дословно Alex: «план такой и был что папку Разное мы кидаем как альбом
> "Разное" а не разгребаем». **НЕ «улучшать»**, детектор `/tmp/diag_root_junk.py` ловит их ложно.
>
> 🔴 **ЖАНРЫ (`TCON`) — КОРНЕВАЯ ПРИЧИНА НАЙДЕНА, ДЕФЕКТ НЕ ЗАКРЫТ.**
> Факт из БД: **`genre` пусто у ВСЕХ 7861 файлов**; в плане `new_genre` заполнен у **7861**
> (100%), в диффе 427 строк = **911 групп** `(folder, genre, new)` на 7861 файл.
> Причина: **боевой прогон 27 сен не записал `TCON`** — в `/tmp/tagwriter_verify_full.log`
> присутствуют только `TALB 29 · TIT2 25 · TPE1 98 · TRCK 102`, **`TCON` отсутствует**.
> Скрипт в контейнере (`_frames()` не знал про `TPE2`/`TCON`) — **уже исправлен**, образ
> `tagwriter:latest` пересобран 2026-09-27 16:04: `/app/apply_tags_v2.py`, 25971 байт:
> строка 76 `("new_genre", "TCON", "genre")` · 206 `out.append(TCON(...))` ·
> 351 MP3-ветка · 515 верификация читает `TCON` обратно.
> ⏳ **ОСТАЛОСЬ:** прогнать новый образ и убедиться, что `TCON` доехал до файлов.
> ⚠️ Логика записи в других ветках (FLAC/MP4) **не проверена**.
>
> ⏳ **ОСТАЁТСЯ:** `Sbornik_Novij_Rok` — сборник, `genre` не одно значение
> (`Folk/Pop/Rock/Punk/Rap`) → N ПАПКА-строк по одному полю. Решения Alex нет.
>
> Подробно — [[personal/plans/music-artist-albumartist-repair]] § СЕССИЯ 29-ОКТИ / 29-СЕПТИ.
> 🔴 **ПИТФОЛЛ ДОСТУПА К NAS — ПОВТОРЁН 2026-09-27, читать перед любой командой.**
> Я пинговал **`192.168.1.100`** (чужую подсеть) → `100% packet loss`, `No route to host`,
> `Host is down`, пустой ARP → **объявил ложный блокер «NAS недоступен»**.
> Рабочий адрес: **`ssh -i ~/.ssh/id_rsa truenas_admin@mallexxx.duckdns.org`** (сеть NAS —
> `192.168.2.0/24`, сам NAS `192.168.2.197`; `192.168.1.x` — сеть Mac/Кра́кена).
> Это **дословно тот же питфолл**, что записан в `family/how-to/truenas-access.md`
> («агент принял это за "NAS недоступен" и объявил блокер — **ложно**»).
> **Правило: адрес NAS брать ИЗ ДОКИ, не по памяти.** Проверено после — NAS жив,
> `.ndignore` на месте (6 бэкапов).
>
> ⚠️ **НА NAS НЕТ `mutagen`** (и python3 на хосте есть, но без ID3-библиотек) — читать теги
> файлов только через контейнер:
> `docker run --rm --entrypoint python3 -v /mnt/RED_2TB/storage/Music:/music:ro tagwriter:latest -c "…"`
>
> Подробно — [[personal/plans/music-artist-albumartist-repair]] § СЕССИЯ 29-ОКТИ / 29-СЕПТ.
> ## 🗄️ ПРЕДЫДУЩЕЕ СОСТОЯНИЕ (сессия 29-секси) — АРХИВ
>