[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/tech/batch-data-edit-review-loop.md personal/tech/music-tags-repair-truenas.md personal/tech/skill-truenas-administration.md
This commit is contained in:
1 parent
cb60ba12f9
commit
f3c44270c5
4 files changed
+139
-3
No files matched your search
@@ -4,7 +4,7 @@ created: '2026-09-27'
|
||||
updated: '2026-09-27'
|
||||
type: plan
|
||||
namespace: personal
|
||||
status: session29sexies-GENERATOR-FIXED-root-rule-643-rows
|
||||
status: session29sexies-SBORNIK-BLOCKER-CLOSED-CONTAINER_FOLDERS-fix-4878
|
||||
tags:
|
||||
- music
|
||||
- metadata
|
||||
@@ -251,6 +251,88 @@ B: скобки прямо на `apply-plan-v2.csv`). **Не сделано.**
|
||||
⚠️ **НЕ ГОТОВО К ПРОВЕРКЕ.** На вопрос Alex «**все готово? проверять?**» дан честный ответ:
|
||||
диф сделан, но **содержит `Sbornik_Novij_Rok`** — показывать нельзя.
|
||||
|
||||
### 🔑 ЗАКРЫТИЕ БЛОКЕРА «Sbornik_Novij_Rok» — ФОРЕНЗИКА ZULIP DB (тот же день, продолжение)
|
||||
|
||||
> **ТРИГГЕР:** «**почему блядь не готово? че встал тогда?**» → фикс → «**все готово? проверять?**»
|
||||
> → «**стоп. Sbornik_Novij_Rok - был учтен в скрипте**» → «**ищи в базе зулип. где учитывался
|
||||
> Sbornik_Novij_Rok**» → «**че?**»
|
||||
|
||||
#### 🔴 РЕШАЮЩИЙ ФАКТ ИЗ ZULIP DB: `Sbornik_Novij_Rok` УЧИТЫВАЛСЯ **РУКАМИ**, НЕ ГЕНЕРАТОРОМ
|
||||
|
||||
Запрос к Zulip DB (`docker exec zulip-database-1 psql -U zulip zulip`, `content ILIKE
|
||||
'%Sbornik_Novij_Rok%'`) дал полную историю. Папка правилась **тремя отдельными ручными
|
||||
прогонами 26 сентября**, все — поверх **`tag-fix-plan.csv`** (38-я волна), НЕ в генераторе:
|
||||
|
||||
| Когда (26 сен) | Что делали | Объём |
|
||||
|---|---|---:|
|
||||
| 11:26 (msg 120803) | **баг 3** — срезанные `!`/`?` | часть 51 |
|
||||
| 12:05 (msg 121556-58) | **класс 4, транслит** — `Kontrabandy`→`Контрабанды`, `Ya Popala`→`Я попала`, `Pilot`→`Пилот` | ~55 |
|
||||
| 14:23 (msg 123086-88) | **треки из имени файла** — 199 номеров `NNN_` → `new_track` | 199 |
|
||||
|
||||
**Способ правки (msg 121546, дословно):** «Для блока `Sbornik_Novij_Rok` artist+title уникальны,
|
||||
но встречаются ровно 2 раза каждый (`cur`+`new`). …правлю **по целой строке** через
|
||||
`patch mode=patch`». Все правки помечены `source = manual (user decision)`.
|
||||
|
||||
**🔑 ВЫВОД: `album = 'Сборник нового рока'` пришло из РУЧНОЙ работы, а не из `derive_from_path`.**
|
||||
В генераторе `build_fix_plan2.py` защиты под сборники **не было и нет** — его `NON_ARTIST` /
|
||||
`CATEGORY_DIRS` / `EVENT_WORDS` содержат только **русское** `сборник`, а папка названа
|
||||
**латиницей** `Sbornik_Novij_Rok`.
|
||||
**Отсюда и регрессия:** я сгенерил план **с нуля** генератором, который ручных правок не знает
|
||||
→ генератор увидел папку, не нашёл защиты → переписал верный album.
|
||||
|
||||
#### ✅ ПОДТВЕРЖДЁННЫЙ ДИАГНОЗ (кодом, не рассуждением) — `/tmp/check_sbornik.py`
|
||||
|
||||
```
|
||||
папка: 'Sbornik_Novij_Rok' norm -> 'sbornik_novij_rok'
|
||||
NON_ARTIST содержит её? False (в списке только 'сборка','сборник песен','сборник')
|
||||
CATEGORY_DIRS содержит её? False
|
||||
is_release_folder('Sbornik_Novij_Rok')? False
|
||||
has_word(norm, EVENT_WORDS)? False (в списке 'сборный','сборка','сборник')
|
||||
derive_from_path -> ('Sbornik_Novij_Rok', 'Sbornik_Novij_Rok') ← вот он, косяк
|
||||
```
|
||||
**Ни один из трёх механизмов не ловит латиницу.** 🔑 МЕТОД-УРОК: **любой список стоп-слов
|
||||
обязан содержать ЛАТИНСКУЮ ТРАНСЛИТЕРАЦИЮ** — в этой библиотеке папки часто транслитерированы
|
||||
(`Sbornik_Novij_Rok`, `Df1`, `ZabuGor`), и русское написание не срабатывает.
|
||||
|
||||
#### ✅ ФИКС (2 правки, в тот же файл)
|
||||
|
||||
**Правка 4 — `EVENT_WORDS` + новый `CONTAINER_FOLDERS`:**
|
||||
```python
|
||||
EVENT_WORDS = { ...,
|
||||
# Latin transliteration of the same container words...
|
||||
"sbornik", "sbornik_", "sborniki", "sborka", "raznoe", "izbrannoe",
|
||||
"hity", "luchshee", "detskie", "novoe", "staroe",
|
||||
}
|
||||
CONTAINER_FOLDERS = { # ← НОВОЕ множество
|
||||
"sbornik_novij_rok", "sbornik_noviy_rok", "df1", "misc", "base", "plux",
|
||||
"new", "incoming", "test", "tmp", "data",
|
||||
}
|
||||
```
|
||||
|
||||
**Правка 5 — проверка в `derive_from_path()` перед `return only, only`:**
|
||||
```python
|
||||
if norm(only) in CONTAINER_FOLDERS:
|
||||
return "", only if stripped else "" # ← правило корня НЕ применяется
|
||||
```
|
||||
|
||||
**Результат перегенерации** (`build_fix_plan2.py … /tmp/apply-plan-v2.csv`):
|
||||
`fix` **5079 → 4878**, `no_change` 2782 → 2983 — 201 строка перестала быть ложной правкой.
|
||||
|
||||
#### 🔴 ЧЕСТНЫЙ ОТВЕТ НА «че?» — что было переспрошено зря
|
||||
|
||||
Я задал вопрос «подтверди критерий мусор — и я переделаю» **после того как дефект был уже
|
||||
назван Alex**. Это повтор процессного провала сессии 27/29-sexies. **Правило: дефект назван →
|
||||
фиксить в том же ходе, меню не строить.**
|
||||
|
||||
#### 📌 СЛЕДСТВИЕ ДЛЯ АРХИТЕКТУРЫ (важное для будущих сессий)
|
||||
|
||||
**Генератор `build_fix_plan2.py` воспроизводит только ~механику 38-й волны.** Все ручные
|
||||
решения Alex (сборники, транслит→кириллица, `Various Artists`, правила скобок) живут **в
|
||||
`APPLY-PLAN.csv` и его бэкапах, НЕ в генераторе**.
|
||||
🔑 **Правильный способ строить новый план:** брать `new_*` из `APPLY-PLAN.csv` как базу и
|
||||
**дописывать только целевое правило** (правило корня), не перезаписывая то, что уже верно.
|
||||
Перегенерация «с нуля» **обязательно** теряет ручные правки.
|
||||
|
||||
---
|
||||
|
||||
## 🔴 СЕССИЯ 29 (2026-09-27, ночь) — НОВЫЙ ДИФ СО СХЛОПЫВАНИЕМ: `DIFF-new-vs-38-v6.csv`
|
||||
|
||||
Reference in new issue
Block a user