[2026-09-27] eagle: family/how-to/navidrome-truenas-android.md personal/plans/music-artist-albumartist-repair.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 17:31:36 +06:00
1 parent 0f1cc14ab2
commit 3a7955cb36
2 files changed
+108 -16

No files matched your search

+14 -3
View File
@@ -396,9 +396,20 @@ artist=Maria Makarova (organ) ← исполнитель вмес
`~/Downloads/music-tags/REPORT-new-album-equals-cur.csv` (6202 строки) +
`REPORT-album-kept-all-folders.csv` (558 папок с классификацией kind).
**Уточнено: реальный мусор — 9 папок / 265 треков** (только значения-огрызки в скобках).
- [ ] 🔴 **БЛОКЕР: решение Alex по правке `album` для 9 папок** — какой `album` ставить
(имя папки / реальный альбом из источника). Полный разбор —
[[personal/plans/music-artist-albumartist-repair]] §СЕССИЯ 18.
- [x] ~~Решение Alex по правке `album` для мусорных папок~~ → ✅ **ПРАВИЛА ПОЛУЧЕНЫ 2026-09-27**:
- файл в **корне папки артиста** → `album` = имя папки артиста (`Дискотека Авария`)
- файл в **подпапке-альбоме** → `album` = имя подпапки (`Москва пьёт пиво`)
- **папка-сборник** (`!Retro`, `!Radio`) → `album='Retro'`, `albumartist='Various Artists'`
- правило корня подтверждено из Zulip (сообщение 128410): «то что в корне лежит мы считаем
одним альбомом». **Атрибуты и скобочный мусор разобраны — 306 строк.**
- ⚠️ **Открыто:** расхождение «убрать скобки» vs «имя подпапки» на 3 папках
(`Филосовские`, `Разное`, `Из сказок`) — ждёт ответа Alex.
Разбор — [[personal/plans/music-artist-albumartist-repair]] §СЕССИЯ 18.
- [ ] 🔴 **Сгенерировать НОВЫЙ дифф** со всеми 306 строками `album` внутри.
**Старый `DIFF-new-vs-38.csv` НЕ трогать** (прямое указание Alex).
- [ ] 🔴 **Валидатор смысла `new_album`** — паттерн «значение целиком в скобках» `^\(.+\)$`,
заглушки (`нет альбома`, `NULL`, `no title`, `Non spécifié`), спам-URL. В пайплайне ОТСУТСТВУЕТ:
это и есть причина дефекта (дифф двух планов мусор не ловит — он стоит в обоих).
- [ ] ⚠️ **Проверить, не проиндексировались ли бэкап-папки** (8043 трека vs 7861 на диске,
т.е. +182) — запрос к БД Navidrome. ⚠️ **Скан завершён, проверка НЕ выполнена.**
`.ndignore` создан ПОСЛЕ первого скана → нужен рескан или проверка БД.
@@ -19,15 +19,18 @@ related:
- '[[personal/tech/music-tags-repair-truenas]]'
- '[[personal/plans/tagwriter-container]]'
- '[[family/how-to/navidrome-truenas-android]]'
status: session18-navidrome-deployed-album-kept-defect-open
status: session18-navidrome-deployed-album-rules-recovered
# Music `artist` + `albumartist` Repair — правила Alex и ход работ
## 🟣 СЕССИЯ 18 (2026-09-27) — NAVIDROME РАЗВЁРНУТ, ВСКРЫТ ДЕФЕКТ-КЛАСС «ОСТАВЛЕНО КАК ЕСТЬ»
## 🟣 СЕССИЯ 18 (2026-09-27) — NAVIDROME РАЗВЁРНУТ, ДЕФЕКТ-КЛАСС ВСКРЫТ, ПРАВИЛА ВОССТАНОВЛЕНЫ ИЗ ZULIP
> **СТАТУС СЕССИИ 18:** Navidrome ✅ развёрнут и работает (см. ниже + `[[family/how-to/navidrome-truenas-android]]`).
> Вскрыт дефект-класс `new_album == cur_album` (6202 строки, 79%). Уточнён масштаб реального мусора:
> **9 папок / 265 треков** (не 28 папок). **Решение о правке `album` НЕ принято — ждёт Alex.**
> Артефакты: `REPORT-new-album-equals-cur.csv`, `REPORT-album-kept-all-folders.csv`.
> Вскрыт дефект-класс `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` НЕ трогать).**
> **Контекст:** Navidrome поднят и просканировал библиотеку (8043 трека). Alex открыл UI и
> спросил: «**Откуда альбомы в скобках взялись?** Типа `Дискотека Авария` — для корня,
@@ -246,16 +249,94 @@ Alex: «**Чем тебе не угодили те которые не в ско
> **Правило: мусор определяется по паттерну «значение целиком в скобках», а не по «странности»
> названия. Отсутствие скобок = значение легитимно.**
### ⏭ Что нужно решить (ждёт Alex)
### 🔴 ПРАВИЛА `album` ВОССТАНОВЛЕНЫ ИЗ БАЗЫ ZULIP (решающий шаг сессии)
1. **Валидатор смысла `new_album`** — паттерны: огрызок в скобках `^\(.+\)$`, заглушки
Alex: «**Читай базу зулип как мы его делали и новый дифф готовь чтобы там эта хуйня была
исправлена. Старый диф не трогай.**» → запрос в `zulip-database-1` восстановил правила.
> 🔑 **МЕТОД-УРОК:** правила работы с `album` **обсуждались в Zulip и нигде больше** — ни в скилле,
> ни в доке, ни в комментариях скрипта. Первым шагом надо было идти в Zulip DB, а не
> переспрашивать Alex. **Запрос:** `zerver_message` + `zerver_stream`, фильтр
> `up.full_name='Alex'` + диапазон `date_sent`. Ключевые сообщения: **127513–127593, 128410.**
**Правило КОРНЯ папки артиста (сообщение 128410, дословно):**
> «**Муммий Тролль, Агата, Ария, Rammstein, Жуки, Князь, Benassi, банд эрос — то что в корне
> лежит мы считаем одним альбомом. и albumartist соответственно титульного исполнителя ставим.
> не надо ничего cur брать! редактируешь блядь csv!**»
**Формат `!Radio` — «Категория - Подпапка» (127513–127507):**
```
y OOF → Radio - OOF
z Старое → Radio - Старое
1 DRIVE / 2 ALT,PUNK / 5 POPSA → Radio - DRIVE / Radio - ALT,PUNK / Radio - POPSA
2009-04 → 2009-04 Radio (год-месяц вперёд)
2008-07, 2008-04 → + Radio
t 2009-07 c6Or_NICK → 2009-07 c6Or_NICK (без "!Radio")
s 2009-08 Drinkin Summer → 2009-08 Drinkin Summer
```
**Категории целиком (127523):**
```
!ZabuGor → "Pop - ZabuGor"
!Retro → "Retro"
Забугр → "Retro - Забугор"
```
**`misc`/`base`/`plux` — имя ПОДпапки, НЕ родителя (127436, 127489):**
```
Rammstein/misc → album = "Rammstein - misc" (НЕ "Rammstein"! — отдельная правка)
base/plux/pan → не надо, пусть будет родительский альбом
!rock_o_pop → убрать "!"
!Классика → убрать "!"
```
### ✅ ФИНАЛЬНЫЕ РЕШЕНИЯ ПО 306 СТРОКАМ (Alex, конец сессии)
| Случай | Правило |
|---|---|
| Файл в **корне папки артиста** | `album` = **имя папки артиста** (`Дискотека Авария` вместо `(Авария)`) |
| Файл в **подпапке-альбоме** | `album` = **имя подпапки** (`Москва пьёт пиво`, `Старые хиты`) |
| **Папка-сборник** (`!Retro`, `!Radio`) | общее правило сборника: `album='Retro'`, `albumartist='Various Artists'` |
| `Птаха - Красивые, богатые (2009)` | имя папки как альбом — ОК |
> 🔴 **Скобочный мусор в подпапках (`(Авария)` в `Москва пьёт пиво`/`Старые хиты`) — это мусор
> ПОВЕРХ правильного имени подпапки. Ставить имя подпапки, а не снятые скобки (`Авария`).**
### ⚠️ ОТКРЫТЫЙ ВОПРОС (единственный, ждёт ответа Alex)
Расхождение между двумя правилами — «убрать скобки» vs «имя подпапки» — **на 3 папках**:
| Папка | A: скобки убрать | B: имя подпапки | файлов |
|---|---|---|---:|
| `Владимир Высоцкий/Филосовские` | `Философские` | `Филосовские` (опечатка в имени!) | 97 |
| `Владимир Высоцкий/Разное` | `Высоцкий - Разное` | `Разное` | 44 |
| `Владимир Высоцкий/Из сказок` | `Из Сказок` | `Из сказок` (нижний регистр) | 16 |
**Совпадают (расхождения нет):** `Блатные`, `Морские`, `Спортивные`.
### ✅ Артефакты сессии 18
| Файл | Что |
|---|---|
| `~/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` (черновик, до финальных правил) |
| `/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. **В пайплайне его нет.**
2. Для «скобочных» папок — какой `album` ставить: реальное название из внешнего источника,
имя подпапки, или имя папки артиста. **Кандидат-правило:** `album` = имя папки
минус год; для `misc`/`disk`/`base`/`plux` — имя ПОДпапки; для корня артиста — имя папки.
3. Регистровые дубли (`Четверо Парней`/`Четверо парней`, `Бунт на Корабле`) — канонизация.
4. 🔴 **Правило «на всю папку», которого не хватало:** `album` решать на уровне ПАПКИ,
не построчно. Построчное наследование `cur_album` — корень дефекта.
4. Регистровые дубли (`Четверо Парней`/`Четверо парней`, `Бунт на Корабле`) — канонизация.
5. 🔴 **Правило «на всю папку»:** `album` решать на уровне ПАПКИ, не построчно.
Построчное наследование `cur_album` — корень дефекта.
---