[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
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 - неправильно**».
|
||||
|
||||
@@ -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-секси) — АРХИВ
|
||||
|
||||
Reference in new issue
Block a user