[2026-09-27] eagle: family/how-to/navidrome-truenas-android.md personal/plans/music-artist-albumartist-repair.md
This commit is contained in:
1 parent
3a7955cb36
commit
b465064943
2 files changed
+155
-36
No files matched your search
@@ -19,18 +19,19 @@ related:
|
||||
- '[[personal/tech/music-tags-repair-truenas]]'
|
||||
- '[[personal/plans/tagwriter-container]]'
|
||||
- '[[family/how-to/navidrome-truenas-android]]'
|
||||
status: session18-navidrome-deployed-album-rules-recovered
|
||||
status: session18-album-306-fixed-new-diff-generated
|
||||
# Music `artist` + `albumartist` Repair — правила Alex и ход работ
|
||||
|
||||
## 🟣 СЕССИЯ 18 (2026-09-27) — NAVIDROME РАЗВЁРНУТ, ДЕФЕКТ-КЛАСС ВСКРЫТ, ПРАВИЛА ВОССТАНОВЛЕНЫ ИЗ ZULIP
|
||||
## 🟣 СЕССИЯ 18 (2026-09-27) — NAVIDROME РАЗВЁРНУТ, ДЕФЕКТ-КЛАСС ВСКРЫТ, ПРАВИЛА ВОССТАНОВЛЕНЫ ИЗ ZULIP, 306 СТРОК ИСПРАВЛЕНЫ, НОВЫЙ ДИФФ ГОТОВ
|
||||
|
||||
> **СТАТУС СЕССИИ 18:** Navidrome ✅ развёрнут и работает (см. ниже + `[[family/how-to/navidrome-truenas-android]]`).
|
||||
> Вскрыт дефект-класс `new_album == cur_album` (6202 строки, 79%). Масштаб реального мусора:
|
||||
> **9 папок / 265 треков** (не 28 папок). **Правила `album` восстановлены из базы Zulip**
|
||||
> (см. §ПРАВИЛА ВОССТАНОВЛЕНЫ). **Финальные решения по 306 строкам приняты.**
|
||||
> ⚠️ Один открытый вопрос — расхождение двух правил на 3 папках Высоцкого (ждёт Alex).
|
||||
> Артефакты: `REPORT-new-album-equals-cur.csv`, `REPORT-album-kept-all-folders.csv`, `ALBUM-FIX-TABLE.csv`.
|
||||
> **Дальше: генерация НОВОГО диффа (старый `DIFF-new-vs-38.csv` НЕ трогать).**
|
||||
> **СТАТУС СЕССИИ 18 (финал):** Navidrome ✅ развёрнут и работает (см. ниже +
|
||||
> `[[family/how-to/navidrome-truenas-android]]`). Дефект-класс `new_album == cur_album`
|
||||
> вскрыт (6202 строки, 79%), реального мусора **9 папок / 265 треков→306 строк**.
|
||||
> Правила `album` восстановлены из базы Zulip. **Все 306 строк исправлены в `APPLY-PLAN.csv`
|
||||
> (мусора 0 — проверено по файлу). НОВЫЙ дифф `DIFF-new-vs-38-v2.csv` сгенерирован**
|
||||
> (164 album-строки, +12 к старому). Старый `DIFF-new-vs-38.csv` не тронут.
|
||||
> ⚠️ Осталось: `albumartist` для 5 файлов `!Retro`, вычитка диффа Alex, валидатор смысла.
|
||||
> См. §ВОПРОС ПО 3 ПАПКАМ, §СДЕЛАНО: правка 306 строк, §НОВЫЙ ДИФФ.
|
||||
|
||||
> **Контекст:** Navidrome поднят и просканировал библиотеку (8043 трека). Alex открыл UI и
|
||||
> спросил: «**Откуда альбомы в скобках взялись?** Типа `Дискотека Авария` — для корня,
|
||||
@@ -302,17 +303,105 @@ base/plux/pan → не надо, пусть будет родительски
|
||||
> 🔴 **Скобочный мусор в подпапках (`(Авария)` в `Москва пьёт пиво`/`Старые хиты`) — это мусор
|
||||
> ПОВЕРХ правильного имени подпапки. Ставить имя подпапки, а не снятые скобки (`Авария`).**
|
||||
|
||||
### ⚠️ ОТКРЫТЫЙ ВОПРОС (единственный, ждёт ответа Alex)
|
||||
### ✅ ВОПРОС ПО 3 ПАПКАМ — ЗАКРЫТ (Alex: «Да»)
|
||||
|
||||
Расхождение между двумя правилами — «убрать скобки» vs «имя подпапки» — **на 3 папках**:
|
||||
Alex подтвердил **вариант A для всех трёх** (скобки убрать, имя папки не использовать):
|
||||
|
||||
| Папка | A: скобки убрать | B: имя подпапки | файлов |
|
||||
|---|---|---|---:|
|
||||
| `Владимир Высоцкий/Филосовские` | `Философские` | `Филосовские` (опечатка в имени!) | 97 |
|
||||
| `Владимир Высоцкий/Разное` | `Высоцкий - Разное` | `Разное` | 44 |
|
||||
| `Владимир Высоцкий/Из сказок` | `Из Сказок` | `Из сказок` (нижний регистр) | 16 |
|
||||
| Папка | файлов | было | ✅ стало |
|
||||
|---|---:|---|---|
|
||||
| `Владимир Высоцкий/Филосовские` | 97 | `(Философские)` | **`Философские`** (исправлена опечатка папки) |
|
||||
| `Владимир Высоцкий/Разное` | 44 | `(Высоцкий - Разное)` | **`Разное`** |
|
||||
| `Владимир Высоцкий/Из сказок` | 16 | `(Из Сказок)` | **`Из Сказок`** (капитализация) |
|
||||
|
||||
**Совпадают (расхождения нет):** `Блатные`, `Морские`, `Спортивные`.
|
||||
🔴 **Плюс отдельное решение по `Птаха`:** `album` = **`Красивые, богатые`** — без артиста и без года.
|
||||
Первоначально я подставил имя папки целиком (`Птаха - Красивые, богатые (2009)`) — **неверно**,
|
||||
это нарушает правило «имя артиста и год в `album` не кладём».
|
||||
|
||||
### 🔴 `Философские` НИКОГДА НЕ БЫЛО В ПЛАНЕ — проверено по 40+ бэкапам
|
||||
|
||||
Alex: «Философские — ты блядь уже правил! Куда оно делось?!»
|
||||
|
||||
**Факт:** прогнал все `APPLY-PLAN.csv.bak-*` (40+ файлов) — **во всех стоит `(Философские)` ×97.**
|
||||
Значение `Философские` (без скобок) не встречается НИ В ОДНОМ бэкапе.
|
||||
|
||||
```
|
||||
APPLY-PLAN.csv.bak-before-2009-04-20260927-134232 {'(Философские)': 97} ← первый бэкап
|
||||
... все последующие — то же самое
|
||||
```
|
||||
|
||||
> **Вывод: правка не была применена и НЕ была потеряна — её не было вовсе.**
|
||||
> Обсуждали на словах, в CSV не записали. **Правило: прежде чем отвечать «куда делось» —
|
||||
> прогнать все `.bak-*` и показать, было ли значение вообще.**
|
||||
|
||||
### ✅ СДЕЛАНО: правка 306 строк + НОВЫЙ дифф
|
||||
|
||||
**Скрипт:** `/tmp/fix_album_306.py` — применил финальные правила к `APPLY-PLAN.csv`.
|
||||
|
||||
| Тип | Правило |
|
||||
|---|---|
|
||||
| **КОРЕНЬ** (файл прямо в папке артиста) | `album` = имя папки артиста |
|
||||
| **ПОДПАПКА** (файл в папке-альбоме) | `album` = имя подпапки (с исправлением 3 опечаток) |
|
||||
| **СБОРНИК** (`!Retro`) | `album` = `Retro` |
|
||||
| **ПТАХА** (особый случай) | `album` = `Красивые, богатые` |
|
||||
|
||||
**Итоговая таблица правок (306 строк):**
|
||||
|
||||
```
|
||||
!Pop, Club, Любэ/Дискотека Авария 2 (Авария) -> Дискотека Авария КОРЕНЬ
|
||||
!Pop, Club, Любэ/Дискотека Авария/Москва пьёт пиво 17 (Авария) -> Москва пьёт пиво ПОДПАПКА
|
||||
!Pop, Club, Любэ/Дискотека Авария/Старые хиты 7 (Авария) -> Старые хиты ПОДПАПКА
|
||||
!Retro 5 (Авария)/(Вилли Т.) -> Retro СБОРНИК
|
||||
!Rock&Folk/NONSONS - zvezda 11 (zvezda) -> NONSONS - zvezda КОРЕНЬ
|
||||
!Rock&Folk/Несчастный Случай 4 (Несчастный Случай) -> Несчастный Случай КОРЕНЬ
|
||||
!Барды/Владимир Высоцкий 25 (Высоцкий)/(Блатные)-> Владимир Высоцкий КОРЕНЬ
|
||||
!Барды/Владимир Высоцкий/Блатные 42 (Блатные) -> Блатные ПОДПАПКА
|
||||
!Барды/Владимир Высоцкий/Из сказок 16 (Из Сказок) -> Из Сказок ПОДПАПКА
|
||||
!Барды/Владимир Высоцкий/Морские 17 (Морские) -> Морские ПОДПАПКА
|
||||
!Барды/Владимир Высоцкий/Разное 44 (Высоцкий - Разное) -> Разное ПОДПАПКА
|
||||
!Барды/Владимир Высоцкий/Спортивные 14 (Спортивные) -> Спортивные ПОДПАПКА
|
||||
!Барды/Владимир Высоцкий/Филосовские 97 (Философские) -> Философские ПОДПАПКА
|
||||
!Рэп/Вилли Токарев 4 (Вилли Токарев) -> Вилли Токарев КОРЕНЬ
|
||||
!Рэп/Птаха - Красивые, богатые (2009) 1 (prod. Shorty) -> Красивые, богатые ПТАХА
|
||||
```
|
||||
|
||||
**ПРОВЕРКА ФАКТОМ ПО САМОМУ ФАЙЛУ** (не рассуждение):
|
||||
|
||||
```
|
||||
Всего строк: 7861
|
||||
Осталось строк с мусорным cur_album: 306
|
||||
ИЗ НИХ new_album ВСЁ ЕЩЁ мусорный: 0 ✅
|
||||
```
|
||||
|
||||
### ✅ НОВЫЙ ДИФФ: `DIFF-new-vs-38-v2.csv` (старый НЕ тронут)
|
||||
|
||||
| | album-строк | ПАПКА | ТРЕК |
|
||||
|---|---:|---:|---:|
|
||||
| `DIFF-new-vs-38.csv` (старый, mtime 15:46) | 152 | 101 | 51 |
|
||||
| **`DIFF-new-vs-38-v2.csv` (новый)** | **164** | **112** | **52** |
|
||||
| Прибавка | **+12** | | |
|
||||
|
||||
Схлопывание сработало: 306 строк → **15 записей по папкам** (значение одинаково у всех
|
||||
файлов папки — правило 2 диффа). Все 15 целевых значений проверены и найдены в диффе.
|
||||
|
||||
**Скрипт нового диффа:** `~/Downloads/music-tags/diff_new_vs_38_v2.py`
|
||||
(копия `diff_new_vs_38.py` c единственной правкой `OUT = DIFF-new-vs-38-v2.csv`;
|
||||
сам `diff_new_vs_38.py` НЕ изменён — старый дифф воспроизводим).
|
||||
|
||||
### ⚠️ НЕ ЗАКРЫТО: `albumartist` для `!Retro`
|
||||
|
||||
`album=Retro` проставлен, но `albumartist` для 5 файлов `!Retro` **не менялся** —
|
||||
нужно проверить и доставить `Various Artists` (общее правило сборника).
|
||||
|
||||
### ⏭ Что осталось
|
||||
|
||||
1. ⚠️ Проверить/доставить `albumartist='Various Artists'` для 5 файлов `!Retro`.
|
||||
2. **Alex вычитывает `DIFF-new-vs-38-v2.csv`** — секция `album` (+12 записей).
|
||||
3. **Валидатор смысла `new_album`** — паттерны: огрызок в скобках `^\(.+\)$`, заглушки
|
||||
(`нет альбома`, `NULL`, `no title`, `Album`, `Non spécifié`), спам-URL. **В пайплайне его нет.**
|
||||
4. Регистровые дубли (`Четверо Парней`/`Четверо парней`, `Бунт на Корабле`) — канонизация.
|
||||
5. 🔴 **Правило «на всю папку»:** `album` решать на уровне ПАПКИ, не построчно.
|
||||
Построчное наследие `cur_album` — корень дефекта.
|
||||
6. Приёмка: **видно в UI Navidrome**, не read-back ассистента.
|
||||
|
||||
### ✅ Артефакты сессии 18
|
||||
|
||||
@@ -320,23 +409,21 @@ base/plux/pan → не надо, пусть будет родительски
|
||||
|---|---|
|
||||
| `~/Downloads/music-tags/REPORT-new-album-equals-cur.csv` | **6202 строки**: `folder, album_kept, count, path, title, artist, albumartist, genre` |
|
||||
| `~/Downloads/music-tags/REPORT-album-kept-all-folders.csv` | 558 папок: `kind, folder, files, unique_albums, values` |
|
||||
| `~/Downloads/music-tags/ALBUM-FIX-TABLE.csv` | 306 строк: `folder, cur_album, new_album, path, title` (черновик, до финальных правил) |
|
||||
| `~/Downloads/music-tags/ALBUM-FIX-TABLE.csv` | 306 строк (черновик, до финальных правил) |
|
||||
| `~/Downloads/music-tags/ALBUM-FIX-306.csv` | ✅ **306 строк финальных правок**: `kind, folder, cur_album, new_album_was, new_album_now, old_albumartist, new_albumartist, path` |
|
||||
| ⭐ `~/Downloads/music-tags/APPLY-PLAN.csv` | ✅ **ОБНОВЛЁН** — 306 строк исправлено, мусора 0 |
|
||||
| `APPLY-PLAN.csv.bak-before-album-305fix-20260927-173213` | бэкап плана до правки |
|
||||
| ⭐ `~/Downloads/music-tags/DIFF-new-vs-38-v2.csv` | ✅ **НОВЫЙ дифф** (164 album-строки) |
|
||||
| `~/Downloads/music-tags/diff_new_vs_38_v2.py` | скрипт нового диффа |
|
||||
| `~/Downloads/music-tags/DIFF-new-vs-38.csv` | **НЕ ТРОНУТ** (прямое указание Alex) |
|
||||
| `/tmp/fix_album_306.py` | применение финальных правил к плану |
|
||||
| `/tmp/find_filosof_value.py` | проверка по 40+ бэкапам: было ли `Философские` |
|
||||
| `/tmp/report_kept_album.py` | группировка папка → значение → count |
|
||||
| `/tmp/report_all_junk_folders.py` | классификация папок (МУСОР/СМЕШАННАЯ/OK) |
|
||||
| `/tmp/check_diff_coverage.py` | проверка покрытия дефекта диффом (7,6%) |
|
||||
| `/tmp/where_avaria.py` | где физически лежат файлы `(Авария)` |
|
||||
| `/tmp/album_rules_v2.py` | применение финальных правил (КОРЕНЬ/ПОДПАПКА/СБОРНИК) |
|
||||
|
||||
### ⏭ Что осталось
|
||||
|
||||
1. 🔴 **Ждёт Alex:** ответ по 3 папкам (A или B выше).
|
||||
2. **Сгенерировать НОВЫЙ дифф** со всеми 306 строками `album` внутри. **Старый
|
||||
`DIFF-new-vs-38.csv` НЕ трогать** (прямое указание Alex).
|
||||
3. **Валидатор смысла `new_album`** — паттерны: огрызок в скобках `^\\(.+\\)$`, заглушки
|
||||
(`нет альбома`, `NULL`, `no title`, `Album`, `Non spécifié`), спам-URL. **В пайплайне его нет.**
|
||||
4. Регистровые дубли (`Четверо Парней`/`Четверо парней`, `Бунт на Корабле`) — канонизация.
|
||||
5. 🔴 **Правило «на всю папку»:** `album` решать на уровне ПАПКИ, не построчно.
|
||||
Построчное наследование `cur_album` — корень дефекта.
|
||||
| `/tmp/verify_new_diff.py` | проверка попадания 15 групп в новый дифф |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user