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

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 20:39:12 +06:00
1 parent eac340006e
commit cb60ba12f9
2 files changed
+263 -5

No files matched your search

+30 -4
View File
@@ -23,7 +23,33 @@ related:
# Music Tags Repair — TrueNAS (7906 → 7905 файлов)
> ## 🔴 АКТУАЛЬНОЕ СОСТОЯНИЕ (2026-09-27, сессия 28) — ЧИТАЙ ЭТО ПЕРВЫМ
> ## 🔴 АКТУАЛЬНОЕ СОСТОЯНИЕ (2026-09-27, сессия 29-секси) — ЧИТАЙ ЭТО ПЕРВЫМ
>
> 🔴 **ГЕНЕРАТОР ПЛАНА НАЙДЕН И ПОФИКШЕН: `~/Developer/personal-os/tools/music-tags/build_fix_plan2.py`**
> Вызов: `python3 build_fix_plan2.py INVENTORY.csv OUT.csv [HOST_ROOT]`. Ищется **только через
> Zulip DB** — локальный `grep` даёт 63 файла-потребителя и **ни одного генератора**.
>
> 🔑 **КОРЕНЬ ДЕФЕКТА «мусор в album не правится»** (`Песни` у Никулина, `Храбрый Зайчик…`
> у Миансарова) — **не в списках слов**, а в `derive_from_path()`: после среза категории
> (`!Retro`, `!Pop, Club, Любэ` — они в `CATEGORY_DIRS`) остаётся **ОДИН** компонент пути,
> ветка `if len(dirs) >= 2:` (та, что ставит `album`) **не выполняется**, падает в
> `len(dirs) == 1` → `return only, ""` → **album ВСЕГДА пустой**. Правило «файл в корне артиста
> → album = имя папки» в генераторе **отсутствовало вообще**.
> **Фикс (3 правки):** `path_parts(rel, with_flag=True)` отдаёт флаг среза; `derive_from_path`
> возвращает `(only, only)` при срезе; в блоке album добавлено `is_artist_root = bool(d_album)
> and d_artist == d_album` → `album<-artist-root`. Верификация: `/tmp/prove_root_rule.py`.
>
> ✅ **Сделано в сессии 29-секси:** `apply-plan-v2.csv` (**7861**, fix 5079, `album<-artist-root`
> **643**) — **старый `APPLY-PLAN.csv` НЕ тронут**; канонный диф к базе
> `DIFF-base-vs-applyplan-v2.csv` (**1270** = 907 ПАПКА + 363 ТРЕК).
>
> 🔴 **ОТКРЫТО (блокер):** `Sbornik_Novij_Rok` **регрессировал** — правило корня перебивает
> верный `Сборник нового рока` (тот же косяк, за который Alex ругал в 29-бис). Нужен критерий
> **сверки с тегом `artist`**, а не с именем папки. Плюс `albumartist` 7861 (`old_38=''` у всех —
> генератор это поле не заполняет) и `track` 3505 (`0` ↔ `''` нормализовать).
> **Диф НЕ готов к показу Alex.**
>
> Подробно — [[personal/plans/music-artist-albumartist-repair]] § СЕССИЯ 29-СЕКСИ.
>
> ⚠️ **НОВОЕ (сессия 28): детектор «файл в корне папки артиста» сравнивал на РАВЕНСТВО
> и терял папки-огрызки.** `'Руки'` ≠ `'Руки Вверх'` → `!Retro/Руки` (8 файлов) и
@@ -32,17 +58,17 @@ related:
> (`RULE-CHECK.csv` → `RULE-CHECK-v2.csv`, 60 → 169 папок). Подробно —
> [[personal/plans/music-artist-albumartist-repair]] § СЕССИЯ 28.
>
> 🔑 **МЕТОД-УРОК (повторяется 3-й раз):** при сопоставлении имени папки с именем артиста
> 🔑 **МЕТОД-УРОК (повторяется 5-й раз):** при сопоставлении имени папки с именем артиста
> **НИКОГДА не сравнивать на равенство** — только `norm()` + вхождение в обе стороны.
> Иначе теряются ровно те случаи, ради которых правило писалось (папка-огрызок,
> `Забугр`/`Забугор`, разный регистр, `Руки`/`Руки Вверх`).
> `Забугр`/`Забугор`, разный регистр, `Руки`/`Руки Вверх`, `norm(new_al) in NON_ARTIST`).
>
> **Этот файл — исторический лог волны 38 (завершена). Актуальная работа идёт здесь:**
>
> | Документ | О чём |
> |---|---|
> | **[[personal/plans/tagwriter-container]]** | ⭐ скрипт-писатель `apply_tags_v2.py` (566 стр): логика полей, ID3v1-снос, тесты, 18 питфоллов, запуск |
> | **[[personal/plans/music-artist-albumartist-repair]]** | ⭐ **правила формирования плана, `APPLY-PLAN.csv`, диффы, сессии 1-28** |
> | **[[personal/plans/music-artist-albumartist-repair]]** | ⭐ **правила формирования плана, `APPLY-PLAN.csv`, диффы, сессии 1-29** |
> | **[[personal/tech/music-broken-toload]]** | 29 битых/DRM файлов на перезагрузку |
>
> **Состояние:** план `APPLY-PLAN.csv` доведён до **0 пустых полей**. Диффы **ПЕРЕСОБРАНЫ