[2026-09-26] eagle: personal/plans/music-tags-wave38-fixes.md personal/plans/music-tags-wave38-fixes.md.bak-w38c personal/tech/music-tags-final-review.md personal/tech/music-tags-rename-audit.md personal/tech/music-tags-repair-truenas.md personal/tech/music-tags-repair-truenas.md.bak-w38c
This commit is contained in:
1 parent
89e5aa9d45
commit
1136171ab3
6 files changed
+4341
-13
No files matched your search
@@ -67,10 +67,34 @@ Alex в 10-й волне уже пометил её `dropped (file removed by us
|
||||
Скрипт `fix_wave38_nashestvie.py` (идемпотентен), бэкап `tag-fix-plan.csv.bak-wave38-nashestvie`.
|
||||
**База: 7906 → 7905 строк.** Сводки пересобраны: **653 + 7224 + 28 = 7905**.
|
||||
|
||||
---
|
||||
### ✅ ДОП. ПРАВКА: `часть N` ИЗ `album` УБРАНА — 77 строк
|
||||
|
||||
Правило Alex (волна 36): `(часть N)` в `album` — **выдумка ассистента, стоп-слово**;
|
||||
один альбом = сквозная нумерация. Применено к 77 строкам.
|
||||
|
||||
| Альбом (было) | Строк | Стало |
|
||||
|---|---:|---|
|
||||
| `Избранное I - часть 1` / `часть 2` | 19 | **`Избранное I`** (треки уже сквозные 1–19) |
|
||||
| `Избранное II - часть 1` / `часть 2` | 22 | **`Избранное II`** (1–22, сквозные) |
|
||||
| `Сделано в России - часть 1` / `часть 2` (Ария) | 20 | **`Сделано в России`**, треки **1–20** (ч.1=1–10, ч.2=11–20) |
|
||||
| `Триллер часть1` / `Триллер. Часть 2` (Агата Кристи) | 14 | **`Триллер`** |
|
||||
| `Весь Булат Окуджава. Часть 6. Ваше благородие…` | 1 | `Весь Булат Окуджава` |
|
||||
| `Лучшие песни. Часть 2` (Магомаев) | 1 | `Лучшие песни` |
|
||||
|
||||
Скрипты: `fix_wave38_chast.py` (77 правок), `fix_wave38_aria.py` (20 номеров),
|
||||
`fix_wave38_gorigori.py` (1). Все идемпотентны. Бэкапы `bak-wave38-chast`, `-chast2`, `-gorigori`.
|
||||
|
||||
⚠️ **Побочная находка:** `!Rock&Folk/ДДТ/Гори, гори.mp3` имел `cur_album='Сделано в России'`
|
||||
— **чужой тег от граббера**, попадал в альбом Арии. Поставлено пусто.
|
||||
**Урок:** название `cur_album` при группировке проверять по папке файла, не доверять тегу.
|
||||
|
||||
Дубли `(album, track)` — без изменений (136 пар), по решению Alex **не трогаем**.
|
||||
|
||||
---
|
||||
## Не входило в волну 38 (ждёт решения Alex)
|
||||
|
||||
- **77 строк** `часть` в `new_album` (`Избранное II - часть 1`, `Весь Булат Окуджава. Часть 6…`).
|
||||
- ~~**77 строк** `часть` в `new_album`~~ — ✅ убраны (`fix_wave38_chast.py`).
|
||||
- **136 пар** дублей `(album, track)` — дедупликация файлов (правило Alex: папки не трогать).
|
||||
- ~~**1 строка** НАШЕСТВИЕ 2009~~ — ✅ удалена.
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
---
|
||||
created: '2026-09-26'
|
||||
namespace: personal
|
||||
related:
|
||||
- '[[personal/tech/music-tags-rename-audit]]'
|
||||
- '[[personal/tech/music-tags-repair-truenas]]'
|
||||
status: done
|
||||
tags:
|
||||
- music
|
||||
- jellyfin
|
||||
- truenas
|
||||
- metadata
|
||||
- plan
|
||||
title: Music Tags — волна 38 (4 правки по аудиту) — ВЫПОЛНЕНО
|
||||
type: plan
|
||||
updated: '2026-09-26'
|
||||
wave: 38
|
||||
---
|
||||
# План волны 38: 4 правки по аудиту `tag-fix-plan.csv`
|
||||
|
||||
_Создан: 2026-09-26. **Статус: ✅ ВЫПОЛНЕНО.** Источник: `~/Downloads/music-tags/tag-fix-plan.csv`._
|
||||
_Основание: [[personal/tech/music-tags-rename-audit]]._
|
||||
|
||||
**Схема каждой правки:** скрипт в файле → бэкап → `.tmp` → ревалидация (7906 / 11 колонок / 0 битых) → `os.replace`.
|
||||
|
||||
---
|
||||
|
||||
## ✅ ВЫПОЛНЕНО (волна 38, 2026-09-26)
|
||||
|
||||
Бэкапы: `tag-fix-plan.csv.bak-wave38-p2p3`, `.bak-wave38-p4`.
|
||||
Скрипты: `fix_wave38_p2p3.py`, `fix_wave38_p4.py` (оба идемпотентны, повтор = 0) + правка `rebuild_summaries.py`.
|
||||
|
||||
| # | Что | Объём | Результат |
|
||||
|---|---|---:|---|
|
||||
| **P1** | 335 строк не в сводках | 335 | ✅ фильтр `if not art: continue` убран; строки без исполнителя группируются по папке-сборнику как `<сборник> (без исполнителя)` |
|
||||
| **P2** | Confusable-скрипт | 7 | ✅ `Айболит`, `Спокойной ночи, малыши!`, `Авто-мат`, `Снайпер`, `DJ Кореец`, `Кабаре-Дуэт Академия` (лат. `X-Фактор` уже был кириллицей) |
|
||||
| **P3** | `new_album='New'` | 1 | ✅ `Король и Шут/Танец гения.mp3` → пусто |
|
||||
| **P4** | `new_title='Часть N'` | 25 | ✅ `Новые Бременские` 19 → `Серия N`; `Малыш и Карлсон` 6 → название сказки (регрессия волны 37 закрыта) |
|
||||
|
||||
### 📊 ФИНАЛЬНЫЕ ИНВАРИАНТЫ (все зелёные)
|
||||
|
||||
| Проверка | Значение |
|
||||
|---|---|
|
||||
| `tag-fix-plan.csv` | **7905** строк, 11 колонок, **0 битых** |
|
||||
| Пустых `new_title` / нечисловых `new_track` | **0 / 0** |
|
||||
| `new_album == 'New'` / `new_title == 'Часть N'` | **0 / 0** |
|
||||
| **`single + multi + skip == строк в CSV`** | ✅ **653 + 7224 + 28 = 7905** |
|
||||
| Строк не в сводках (не skip) | **0** |
|
||||
| Пересечение `single`∩`multi` (нормализованно) | **0** |
|
||||
| Артистов с >1 треком в `single` | **0** |
|
||||
| Пустых `artist` в сводках | **0 / 0** |
|
||||
| Идемпотентность `rebuild_summaries.py` | ✅ (shasum обеих сводок совпал) |
|
||||
|
||||
### 🔴 УРОК ВОЛНЫ 38: sentinel-группа собирается по КОРНЮ сборника, не по ближайшей папке
|
||||
|
||||
Первая версия правки P1 группировала пустой `artist` по `parts[-2]` — и 165 файлов
|
||||
`Сборка Песни для детей/<буква>/файл` разбились на 9 фальшивых «артистов» (`M` 30, `2` 28,
|
||||
`L` 24, `1` 23, `Y` 21, `C`, `K`, `P`, `Les`). Исправлено: ищем сегмент `Сборка Песни для детей`
|
||||
в пути и берём его как корень. Итог — 165 строк в одной группе `Сборка Песни для детей (без исполнителя)`.
|
||||
|
||||
---
|
||||
|
||||
### ✅ ДОП. ПРАВКА: строка `НАШЕСТВИЕ 2009` УДАЛЕНА
|
||||
|
||||
Файла нет на диске (подтверждено в волне 35 через `os.walk`).
|
||||
Alex в 10-й волне уже пометил её `dropped (file removed by user)`.
|
||||
Скрипт `fix_wave38_nashestvie.py` (идемпотентен), бэкап `tag-fix-plan.csv.bak-wave38-nashestvie`.
|
||||
**База: 7906 → 7905 строк.** Сводки пересобраны: **653 + 7224 + 28 = 7905**.
|
||||
|
||||
---
|
||||
## Не входило в волну 38 (ждёт решения Alex)
|
||||
|
||||
- **77 строк** `часть` в `new_album` (`Избранное II - часть 1`, `Весь Булат Окуджава. Часть 6…`).
|
||||
- **136 пар** дублей `(album, track)` — дедупликация файлов (правило Alex: папки не трогать).
|
||||
- ~~**1 строка** НАШЕСТВИЕ 2009~~ — ✅ удалена.
|
||||
|
||||
---
|
||||
|
||||
## Детали правок (для истории)
|
||||
|
||||
### P1 — 335 строк не в сводках (недолеченный баг волны 33)
|
||||
|
||||
`single(646) + multi(6897) + skip(28) = 7571` ≠ 7906 → **недостача 335**.
|
||||
Все — с пустым `new_artist`: `!Детские/Сборка Песни для детей` 165, `!Детские/Детский хит` 156,
|
||||
`!Pop, Club, Любэ/!Radio` 8, `Df1` 4, `Infected Mushroom` 1, `НАШЕСТВИЕ 2009` 1.
|
||||
|
||||
**Правка:** убрать `if not art: continue`; строки без artist группируются по album
|
||||
(или по корню папки-сборника, если album пуст) как `<сборник> (без исполнителя)`.
|
||||
|
||||
### P2 — 7 строк confusable-скрипт (латиница внутри кириллицы)
|
||||
|
||||
Аббревиатуры `RMX`/`DZA`/`MF`/`DJ` и стилизации (`изBESTняк`, `ИNOМАРКИ`) — **легитимны**, не трогали.
|
||||
|
||||
### P3 — `new_album = 'New'` (техпапка в теге)
|
||||
|
||||
`/storage/Music/!Rock&Folk/Король и Шут/Танец гения.mp3` → `new_album: 'New'` → **пусто** (паттерн волны 19).
|
||||
|
||||
### P4 — `new_title = 'Часть N'` — 25 строк
|
||||
|
||||
`Новые Бременские` 19 (файлы `TrackNN.mp3`, названий серий нет → `Серия N` по образцу
|
||||
`Трое из Простоквашино`) + `Малыш и Карлсон` 6 (регрессия волны 37 → title = название сказки).
|
||||
@@ -31,6 +31,8 @@ _Обновлено: 2026-09-26 (волна 38). Источник: `~/Downloads/
|
||||
> | P2 | Confusable-скрипт в title/artist | 7 | **0** |
|
||||
> | P3 | `new_album='New'` (техпапка) | 1 | **0** |
|
||||
> | P4 | `new_title='Часть N'` | 25 | **0** (`Серия N` / название сказки) |
|
||||
> | P5 | `часть N` в `album` | 77 | **0** (`Избранное I/II`, `Сделано в России`, `Триллер`; Ария пронумерована 1–20) |
|
||||
> | P6 | строка `НАШЕСТВИЕ 2009` (нет файла на диске) | 1 | **удалена**, база 7906 → **7905** |
|
||||
>
|
||||
> 🔴 **Главный урок:** `rebuild_summaries.py` выбрасывал строки с пустым `artist`
|
||||
> (`if not art: continue`) — это тот же баг, что прятал 562 сказки в волне 33, но **не был
|
||||
@@ -44,8 +46,7 @@ _Обновлено: 2026-09-26 (волна 38). Источник: `~/Downloads/
|
||||
> 0 битых · 0 пустых title · 0 нечисловых треков · 0 пересечений single∩multi (нормализованно).
|
||||
> Скрипты `fix_wave38_p2p3.py`, `fix_wave38_p4.py` идемпотентны (повтор = 0);
|
||||
> `rebuild_summaries.py` идемпотентен (shasum совпал).
|
||||
> ⚠️ Открыто (ждёт Alex): 77 строк `часть` в album, 136 пар дублей `(album, track)`,
|
||||
> ✅ строка `НАШЕСТВИЕ 2009` удалена (база 7905).
|
||||
> ⚠️ Открыто (решение Alex, не трогаем): 136 пар дублей `(album, track)` — папки не удалять/не переименовывать.
|
||||
|
||||
> ## 🔍 38-я волна — ФИНАЛЬНЫЙ АУДИТ CSV («список на переименование»)
|
||||
>
|
||||
|
||||
@@ -84,10 +84,14 @@ _Триггер: Alex — «проводи финальный полный ау
|
||||
`/storage/Music/!Rock&Folk/Король и Шут/Танец гения.mp3` → `new_album = 'New'` → **пусто**
|
||||
(имя подпапки-техпапки, не альбом; паттерн волны 19).
|
||||
|
||||
### 4. ⚠️ ОТКРЫТО — `new_album` содержит `(часть N)` / `- часть N` — 77 строк
|
||||
`Избранное II - часть 1` (12), `Весь Булат Окуджава. Часть 6…` (1) и др.
|
||||
Прямого запрета Alex на `часть` в этом контексте не давал (стоп-слово касалось `Али-Баба`),
|
||||
но в 36-й волне формулировка была «`(часть N)` в album — выдумка ассистента». **Ждёт решения Alex.**
|
||||
### 4. ✅ ИСПРАВЛЕНО — `new_album` содержит `(часть N)` / `- часть N` — 77 строк
|
||||
`Избранное I/II - часть 1/2`, `Сделано в России - часть 1/2` (Ария), `Триллер часть1`,
|
||||
`Весь Булат Окуджава. Часть 6…`, `Лучшие песни. Часть 2`.
|
||||
Правило Alex (волна 36): `(часть N)` в album — **выдумка ассистента, стоп-слово**; один альбом =
|
||||
сквозная нумерация. ✅ **Фикс:** `часть N` убран (`fix_wave38_chast.py`); Ария пронумерована 1–20
|
||||
(`fix_wave38_aria.py`).
|
||||
⚠️ **Побочная находка:** `!Rock&Folk/ДДТ/Гори, гори.mp3` имел `cur_album='Сделано в России'` —
|
||||
чужой тег от граббера; поставлено пусто. **Урок: `cur_album` проверять по папке файла, не доверять тегу.**
|
||||
|
||||
### 5. ✅ ИСПРАВЛЕНО — `new_title = 'Часть N'` — 25 строк (не 33)
|
||||
Уточнено в ходе правки: `Новые Бременские` 19 + `Малыш и Карлсон` 6.
|
||||
@@ -106,8 +110,9 @@ _Триггер: Alex — «проводи финальный полный ау
|
||||
|
||||
- ✅ **CSV структурно цел:** **7905** / 0 битых / 11 колонок — к применению технически готов.
|
||||
- ✅ **Сводки полные:** `single 653 + multi 7224 + skip 28 = 7905`; 0 строк не в сводках.
|
||||
- ✅ **Закрыто волной 38:** P1 (335 строк), P2 (7 confusable), P3 (техпапка `New`), P4 (25 `Часть N`).
|
||||
- ⚠️ **Ждёт решения Alex (2):** 77 строк `часть` в album; 136 пар дублей.
|
||||
- ✅ **Закрыто волной 38:** P1 (335 строк), P2 (7 confusable), P3 (техпапка `New`), P4 (25 `Часть N`),
|
||||
77 строк `часть` в album, строка `НАШЕСТВИЕ 2009`.
|
||||
- ⚠️ **Осталось (решение Alex, не трогаем):** 136 пар дублей `(album, track)` — папки не удалять/не переименовывать.
|
||||
- ✅ **Строка `НАШЕСТВИЕ 2009` удалена** (`fix_wave38_nashestvie.py`, бэкап `bak-wave38-nashestvie`); база 7906 → 7905.
|
||||
|
||||
_Связано: [[personal/tech/music-tags-final-review]], [[personal/tech/music-tags-repair-truenas]],
|
||||
|
||||
@@ -19,7 +19,7 @@ related:
|
||||
- '[[personal/tech/music-tags-rename-audit]]'
|
||||
---
|
||||
|
||||
# Music Tags Repair — TrueNAS (7906 файлов)
|
||||
# Music Tags Repair — TrueNAS (7906 → 7905 файлов)
|
||||
|
||||
> ## ✅ ТРИДЦАТЬ ВОСЬМАЯ ВОЛНА (2026-09-26) — ФИНАЛЬНЫЙ АУДИТ + 4 ПРАВКИ ВЫПОЛНЕНЫ
|
||||
>
|
||||
@@ -61,11 +61,11 @@ related:
|
||||
>
|
||||
> Скрипты: `fix_wave38_p2p3.py`, `fix_wave38_p4.py` (идемпотентны, повтор = 0),
|
||||
> правка `rebuild_summaries.py` (идемпотентна, shasum совпал).
|
||||
> Бэкапы: `tag-fix-plan.csv.bak-wave38-p2p3`, `.bak-wave38-p4`.
|
||||
> Бэкапы: `tag-fix-plan.csv.bak-wave38-p2p3`, `.bak-wave38-p4`, `.bak-wave38-nashestvie`.
|
||||
> Аудиторы: `audit38_probe.py`, `audit38_probe2.py`, `audit38_final.py`, `audit38_check_*.py`.
|
||||
>
|
||||
> ⚠️ Всё ещё открыто (ждёт Alex): 77 строк `часть` в `album`,
|
||||
> 136 пар дублей `(album, track)`. ✅ Строка `НАШЕСТВИЕ 2009` удалена (`fix_wave38_nashestvie.py`).
|
||||
> ✅ `часть N` из `album` убрана — 77 строк (`fix_wave38_chast.py`); Ария пронумерована 1–20.
|
||||
> ⚠️ Остаётся только 136 пар дублей `(album, track)` — по решению Alex **не трогаем**.
|
||||
>
|
||||
> ## ✅ ТРИДЦАТЬ СЕДЬМАЯ ВОЛНА (2026-09-26) — 7 АЛЬБОМОВ СКАЗОК ЗАКРЫТЫ + 🔴 ВЫДУМАННЫЙ `(3)` ОТКАЧЕН
|
||||
>
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user