[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:54:25 +06:00
1 parent c8778307e9
commit 204b254cc5
2 files changed
+142 -15

No files matched your search

@@ -5508,6 +5508,118 @@ track 118
**неподряд**, сортировка битая; если один `folder`+`field` повторяется с разными `new` —
это сборник, не дефект.
## ✅ ЧИСТКА ДИФФА ОТ ШУМА `track N → N/M` (2026-09-27, финал сессии 29-окти)
> **ТРИГГЕР:** Alex: «**я думаю трек 6 не надо править на "6/14" ты как считаешь?**»
### 🔑 ПОДТВЕРЖДЕНО ФАКТОМ ИЗ БД: `track_number` ХРАНИТСЯ ЦЕЛЫМ
```sql
SELECT track_number, COUNT(*) FROM media_file
WHERE path NOT LIKE 'backup%' GROUP BY track_number
```
Дал: `0` (1581) · `1` (510) · `2` (466) · … · `24` (22) — **только целые**, без `/M`
и без ведущих нулей.
**Следствие:** `6 → 6/14` и `8 → 08` — **значение трека НЕ меняется**. База всё равно
приведёт его к целому. Это форматная косметика, не правка.
### ✅ УБРАНО 118 строк шума
| Скрипты | Убрано | Осталось |
|---|---:|---:|
| `/tmp/drop_track_noise.py` (`N → N/M`) | 117 | 945 |
| добор последней `8 → 08` | 1 | **945** |
⚠️ **ПИТФОЛЛ СЧЁТА:** первый подсчёт через `awk ... | grep -c "/"` дал **33** строки —
потому что `awk -F','` разваливает пути с запятыми в кавычках и часть строк теряется.
Реальный объём — **117**. Считать надо CSV-парсером, не `awk` по кавычкам.
**Бэкапы:** `/tmp/DIFF-v3.bak-20260927-205211.csv`, `/tmp/DIFF-v3.bak2-*.csv`
### 🔴 РЕШЕНИЕ ALEX (зафиксировано): `N/M` в треках НЕ ПРАВИМ
Причина, названная Alex и подтверждённая фактом: значение не меняется, правится впустую.
Дополнительно: `TRCK` с `/` ломает часть парсеров и сортировку в Navidrome.
## 🔴 РЕШЕНИЕ ALEX: ПАПКУ `Разное` НЕ РАЗГРЕБАЕМ
> Alex: «**нет. план такой и был что папку Разное мы кидаем как альбом "Разное" а не разгребаем.**»
Класс из 76 файлов (папки-мусорки внутри артиста) — **ЗАКРЫТ БЕЗ ДЕЙСТВИЙ**:
```
44 !Барды/Владимир Высоцкий/Разное album='Разное'
14 !Rock&Folk/Пилот/Избранное album='Избранное'
10 !Rock&Folk/ДДТ/2003 - песни album='Песни'
3 !Rock&Folk/Наутилус Помпилиус/2000 - песни album='песни'
3 !Rock&Folk/Rammstein/misc album='misc'
1 !A Not sorted/SD-card-2026-05/Агата Кристи album='Избранное'
1 !Детские/Из чего же.mp3 album='' → починен, см. ниже
```
🔑 **Это ПЛАН, а не дефект.** Папка-мусорка намеренно становится альбомом-мусоркой.
**НЕ «улучшать»** — Николай/следующая сессия: не предлагать разгребать `Разное`,
`Избранное`, `Песни`, `misc`. Детектор `/tmp/diag_root_junk.py` ловит их как «мусор» —
это **ложное срабатывание по определению плана**.
## ✅ ФИКС ОПЕЧАТКИ `Андервуд` + ДЫРКИ `!Детские` (2026-09-27, финал)
> **ТРИГГЕР:** Alex: «**Андервуд надо исправить еще**» → «**`!Детские/Из чего же.mp3` - где альбом**»
### 1. `Андервуд` (опечатка протекла из имени папки в `album`)
```
folder !A Not sorted/SD-card-2026-05/Андервуд
cur_artist Ундервуд ← уже правильное написание
new_album Андервуд → Ундервуд ← ❌ было имя папки с опечаткой
```
Папка на диске названа с опечаткой (`А` вместо `У`); правило корня взяло её как есть.
Доказательство правильного значения — `cur_artist` у того же файла.
### 2. `!Детские/Из чего же.mp3` (потеря значения)
```
cur_album Íåèçâåñòíîå íàçâàíèå ← битьё CP1251 = «Неизвестное название»
new_album (пусто) → Детские
```
Генератор распознал битый `cur_album` как мусор и **обнулил**, но подставил значение
в `new_albumartist = Детские песни` — не в то поле. `album` остался пустым, диф показывал
`[Unknown Album] → (пусто)`, т.е. план **сотрал бы тег**. Файл лежит в корне `!Детские`.
### Скрипт и верификация
`/tmp/fix_v3_typos.py` — правит **только `/tmp/apply-plan-v3.csv`**,
`APPLY-PLAN.csv` (канон/RC) **НЕ ТРОНУТ**. Бэкап: `/tmp/apply-plan-v3.csv.bak-20260927-204950`.
Проверено `grep` по диффу:
```
строка 2: Андервуд — album: Андервуд -> Ундервуд ✅
строка 28: !Детские — album: [Unknown Album] -> Детские ✅
```
## 📊 ФИНАЛЬНОЕ СОСТОЯНИЕ ДИФФА (2026-09-27, сессия 29-окти — ЗАКРЫТА)
| Артефакт | Значение |
|---|---|
| `~/Downloads/music-tags/DIFF-base-vs-applyplan-v3.csv` | **945 записей** |
| `md5` | `a89d7b56ce65835c361395c5b7d1064d` |
| Сортировка | `field` **по алфавиту**: `album → albumartist → genre` |
```
album 28 склейки, правило корня, опечатки папок
albumartist 6 The Prodigy, Дискотека Авария, Потап, Король и Шут,
Eminem (<2 разных>), Ленинград (<2 разных>)
genre 911 снятие «!» префиксов
```
`track` в диффе **0** — весь блок убран как шум (см. выше).
БД 7861 ↔ план 7861, сопоставлено 7861, **не найдено 0**.
### 🔴 ОСТАЁТСЯ НА РЕШЕНИЕ ALEX
`Sbornik_Novij_Rok` — сборник, `genre` не одно значение (`Folk/Pop/Rock/Punk/Rap`) →
N ПАПКА-строк по одному полю. Alex решения не давал; для сборника это ожидаемо,
но требует подтверждения формы вывода.
## 🔴 ОСТАВШИЙСЯ ДЕФЕКТ: `!Rock&Folk/Rammstein/misc` — 3 файла
Обнаружен Alex в конце сессии: «**`!Rock&Folk/Rammstein/misc` - album - rammstein - неправильно**».
+30 -15
View File
@@ -25,11 +25,12 @@ related:
> ## 🔴 АКТУАЛЬНОЕ СОСТОЯНИЕ (2026-09-27, сессия 29-ОКТИ) — ЧИТАЙ ЭТО ПЕРВЫМ
>
> ✅ **КАНОННЫЙ ДИФФ v3 СОБРАН:** `~/Downloads/music-tags/DIFF-base-vs-applyplan-v3.csv`
> — **1062 записи** (710 ПАПКА + 352 ТРЕК), из них `genre` 911 · `track` 118 · `album` 27 ·
> `albumartist` 6. База 7861 ↔ план 7861, сопоставлено 7861, **не найдено 0**.
> Источник: `/tmp/apply-plan-v3.csv` (7861, собран из `new_*` `APPLY-PLAN.csv` + правило
> корня; **31 правка**, лог с колонкой `reason` — `~/Downloads/music-tags/APPLY-PLAN-v3-changes.csv`).
> ✅ **КАНОННЫЙ ДИФФ v3 СОБРАН И ЗАКРЫТ:** `~/Downloads/music-tags/DIFF-base-vs-applyplan-v3.csv`
> — **945 записей**, `md5 a89d7b56ce65835c361395c5b7d1064d`. Поля: `album` 28 ·
> `albumartist` 6 · `genre` 911. `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`).
> Сборщик: `/tmp/build_canon_diff_v3.py`.
>
> 🔴 **ДЕФЕКТ СОРТИРОВКИ (найден Alex: «почему сортировки по филду нету в диффе») — ИСПРАВЛЕН.**
@@ -40,22 +41,36 @@ related:
> `sorted({...})`, НЕ список в порядке объявления.** Разбор —
> [[personal/plans/music-artist-albumartist-repair]] § СОРТИРОВКА ПО `field` — АЛФАВИТНАЯ.
>
> ⚠️ **ОТКРЫТО (2 дефекта верификации v3-диффа):**
> 1. `!Детские/Из чего же.mp3` — `album` в БД `[Unknown Album]` → `new` в диффе **пусто**
> (потеря значения, не правило корня).
> 2. `Sbornik_Novij_Rok` — сборник, `genre` не одно значение (`Folk/Pop/Rock/Punk/Rap`) →
> N ПАПКА-строк по одному полю. Схлопывание `(folder, field, new)` на сборниках
> разваливается; нужно решение Alex.
> 🔴 **ШУМ `track N → N/M` ВЫЧИЩЕН — 118 строк.** Подтверждено из БД: `track_number`
> хранится **ЦЕЛЫМ** (`0` 1581 · `1` 510 · … · `24` 22), без `/M` и без ведущих нулей →
> `6 → 6/14` и `8 → 08` **значение НЕ меняют**. Скрипты `/tmp/drop_track_noise.py` (+ добор).
> ⚠️ **ПИТФОЛЛ СЧЁТА:** `awk -F',' | grep -c "/"` дал **33** вместо **117** — `awk` разваливает
> пути с запятыми в кавычках. Считать CSV-парсером. **РЕШЕНИЕ ALEX: `N/M` в треках НЕ ПРАВИМ.**
>
> ✅ **ВЕРИФИЦИРОВАН «короткий список опечаток» — все 6 правок УЖЕ в `APPLY-PLAN.csv`**
> (Простоквашено 0 · Агата кристи 0 · 11 Track 11 0 · IM-склейка 0 · `Radio - ` 0 ·
> Бард - Авангард 0 в `new_*`). v3-генератор их наследует автоматически, как и задумано
> архитектурой «от `new_*`, не с нуля». Скрипт проверки: `/tmp/check_shortlist_full.py`.
> ✅ **ОБА ДЕФЕКТА ВЕРИФИКАЦИИ ЗАКРЫТЫ** (`/tmp/fix_v3_typos.py`, бэкап
> `/tmp/apply-plan-v3.csv.bak-20260927-204950`; `APPLY-PLAN.csv` — канон/RC — **НЕ ТРОНУТ**):
> 1. `!Детские/Из чего же.mp3` — битый `cur_album` (`Íåèçâåñòíîå íàçâàíèå`, CP1251) обнулён
> генератором; подстановка ушла в `new_albumartist`, а `album` остался пуст →
> **`[Unknown Album] → Детские`**.
> 2. `!A Not sorted/…/Андервуд` (опечатка в имени папки) протекла в `album` →
> **`Андервуд → Ундервуд`** (доказательство — `cur_artist` того же файла).
>
> ✅ **«КОРОТКИЙ СПИСОК ОПЕЧАТОК» — все 6 правок УЖЕ в `APPLY-PLAN.csv`** (Простоквашено 0 ·
> Агата кристи 0 · 11 Track 11 0 · IM-склейка 0 · `Radio - ` 0 · Бард - Авангард 0 в `new_*`).
> v3-генератор их наследует автоматически. Скрипт: `/tmp/check_shortlist_full.py`.
> 🔑 **ПИТФОЛЛ: `grep` по ВСЕМУ CSV даёт ложную тревогу «правки откатились»** — опечатки
> живут в колонке `title` (название песни). Проверять ТОЛЬКО по колонке через CSV-парсер.
> `Муммий` в `new_*` = 0 (в тегах `Мумий Тролль`), в `path` = 88 (имя папки на диске;
> **продукт не трогается — переименование папок не входило в задачу**).
>
> 🔴 **РЕШЕНИЕ ALEX: ПАПКУ `Разное` НЕ РАЗГРЕБАЕМ.** Класс 76 файлов (папки-мусорки внутри
> артиста: `Высоцкий/Разное` 44 · `Пилот/Избранное` 14 · `ДДТ/2003 - песни` 10 ·
> `Rammstein/misc` 3 и др.) — **ПЛАН, а не дефект**: папка-мусорка намеренно становится
> альбомом-мусоркой. **НЕ «улучшать»**, детектор `/tmp/diag_root_junk.py` ловит их ложно.
>
> ⏳ **ОСТАЁТСЯ:** `Sbornik_Novij_Rok` — сборник, `genre` не одно значение
> (`Folk/Pop/Rock/Punk/Rap`) → N ПАПКА-строк по одному полю. Решения Alex нет.
>
> Подробно — [[personal/plans/music-artist-albumartist-repair]] § СЕССИЯ 29-ОКТИ / 29-СЕПТИ.
> ## 🗄️ ПРЕДЫДУЩЕЕ СОСТОЯНИЕ (сессия 29-секси) — АРХИВ