[2026-09-28] eagle: personal/plans/music-artist-albumartist-repair.md personal/plans/tagwriter-container.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-28 00:32:09 +06:00
1 parent b718a09e95
commit 8ad2c77435
3 files changed
+157 -13

No files matched your search

@@ -1166,7 +1166,10 @@ Dry-run считает ФАЙЛЫ: album 28 · albumartist 6 · genre 4359 (в
| 🔴 **Дифф был собран от КАНОНА** | Птахи в дифе не было, хотя дефект в базе есть (диск ушёл вперёд канона) | ✅ **ЗАКРЫТ 27 сен:** пересобран от БД → `DIFF-db-to-fix.csv` |
| 🔴 **Ложное расхождение по `genre`** | `media_file.genre` пуст у всех 7861 → дифф показывал 7861 «правок» | ✅ **ЗАКРЫТ 27 сен:** жанр читается из `tags` jsonb, `genre` в дифе = 0 |
| 🔴 **Птаха разбит на 2 альбома** | `'Красивые, богатые'` (7 файлов) + `'Птаха - Красивые, богатые (2009)'` (1) | ⏳ **В дифе v5** (`album` 60-я правка), ждёт прогона |
| 🔴 **Альбомы-одиночки** | **215** альбомов из 1 трека, где `album != имя папки` (класс Бумера / Симпатии) | ⏳ **ОТКРЫТ:** нужен разбор «мусор vs законный сингл». См. § АЛЬБОМЫ-ОДИНОЧКИ |
| 🔴 **Альбомы-одиночки** | **215** альбомов из 1 трека, где `album != имя папки` (класс Бумера / Симпатии) | 🔴 **ОТКРЫТ, УТОЧНЁН 27 сен (сессия 39):** цифра `215` неверна → **`56` однотрековых папок**. Класс дефекта разделён на два (см. § АЛЬБОМЫ-ОДИНОЧКИ) |
| 🔴 **Группировка по папкам вне `!`/`Разное`** | `Infected Mushroom`: ~35 альбомов-одиночек вместо одного `album` на папку-владельца. `Other Track's` 23 файла → 6 разных `album` | ⏳ **ОТКРЫТ (сессия 39):** правило реализовано только для папок со `!` и `9999 - Разное`. Ждёт критерия Alex: чем «сборка ремиксов» отличается от настоящего альбома |
| **`albumartist` мусорный при смене `artist`** | Т9: `TPE1='Т9'`, `TPE2` остался `'Вдох-Выдох'` | ✅ **ЗАКРЫТ 27 сен:** правило дописано (`albumartist='Т9'`), повторный прогон, `TPE2` 157 → 158, детектор нашёл ровно 1 такой файл |
| 🔴 **`path` без префикса `/storage/Music/`** | Мой сборщик писал относительный путь → dry-run дал `0 к обработке` и 282 MISSING | ✅ **ЗАКРЫТ 27 сен:** `"path": "/storage/Music/" + rel` |
| **Трофим: 8 альбомов, 3 копии** | 3 физические копии → 8 альбомов, 38 имён задвоено | ✅ **ЗАКРЫТ:** 50 дублей удалены, план v5 правит альбомы/исполнителя |
| **Тема дороги** | `title='AudioTrack 17'`, `artist='Бумер'`, один в альбоме | ⏳ **В дифе v5:** `album='Ленинград'`, `artist='Ленинград'` |
+23 -11
View File
@@ -1201,23 +1201,35 @@ Alex: «**я не буду читать всю твою хуйню. Я жду о
## 5. Запуск
> 🔴 `docker run` и `docker build` на NAS **блокируются апрувом** и сетью.
> Рабочая схема: `docker create` + `docker cp` + `docker start -a`.
> Рабочая схема: `docker create` + `docker start -a`.
> 🔴🔴 **ИСПРАВЛЕНО 27 сен (сессия 39): путь к скрипту — `/app/`, НЕ `/app/data/`.**
> `/app/data` — это **монтируемая папка с планом** (`CSV_IN=/app/data/apply-plan.csv`),
> сам скрипт лежит **в образе**: `/app/apply_tags_v2.py` (25971 B).
> С `/app/data/apply_tags_v2.py` вывод: `can't open file '/app/data/apply_tags_v2.py': No such file`.
> 🔴 **Флага `--plan` НЕ СУЩЕСТВУЕТ** — путь плана захардкожен. Реальные аргументы:
> `--dry-run --apply --readback --verify --force --limit N`.
```bash
# сухой прогон
docker create --name tw --entrypoint python3 \
-v /mnt/RED_2TB/docker/arr/tagwriter:/app/data \
# сухой прогон (Music :ro)
docker create --name twdry --entrypoint python3 \
-v /tmp/tw306:/app/data:ro \
-v /mnt/RED_2TB/storage/Music:/music:ro \
tagwriter:v2 /app/data/apply_tags_v2.py --dry-run
docker cp /mnt/RED_2TB/docker/arr/tagwriter/apply_tags_v2.py tw:/app/apply_tags_v2.py
docker start -a tw && docker rm -f tw
tagwriter:latest /app/apply_tags_v2.py --dry-run
docker start -a twdry && docker rm -f twdry
# боевой прогон + сверка
# (то же, но -v ...Music:/music БЕЗ :ro, и --apply --verify)
# боевой прогон + сверка (Music rw, /app/data rw)
docker create --name twapply --entrypoint python3 \
-v /tmp/tw306:/app/data \
-v /mnt/RED_2TB/storage/Music:/music \
tagwriter:latest /app/apply_tags_v2.py --apply --verify
docker start -a twapply && docker rm -f twapply
```
Режимы: `--dry-run` (по умолчанию) · `--apply` · `--verify` · `--readback` ·
`--force` · `--limit N`
🔴 **`path` в плане ОБЯЗАН начинаться с `/storage/Music/`.** `map_path()` снимает этот префикс;
относительный путь трактуется как «вне /music» → файл уходит в MISSING, `к обработке: 0`.
Тихий отказ: скрипт завершается `exit=0`, а правок ноль. Канон `APPLY-PLAN.csv` префикс имеет —
сверять формат перед первым прогоном.
## 6. Инварианты (падают на старте, до записи)