[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:
Alexey Martemyanov committed 2026-09-27 20:44:17 +06:00
1 parent cb60ba12f9
commit f3c44270c5
4 files changed
+139 -3

No files matched your search

@@ -414,6 +414,42 @@ RC-сверка (`/tmp/rc_verify.py` → `RC-VERIFY.csv`) дала **7861 рас
`track_number = 0` = «номер не проставлен» — сравнивать с пустым значением из плана
с учётом этого, иначе 1699 ложных расхождений.
### 33. 🔴🔴 ПЕРЕГЕНЕРАЦИЯ «С НУЛЯ» ТЕРЯЕТ РУЧНЫЕ ПРАВКИ — строить от прошлого плана, не от скрипта
Продолжение урока 29, но глубже. Мало найти генератор — надо понять, **чем он НЕ является**.
`Sbornik_Novij_Rok` дал регрессию **второй раз**: генератор `build_fix_plan2.py`, запущенный
с нуля, переписал верный `album = 'Сборник нового рока'` на имя папки на **200 файлов**.
**Причина оказалась НЕ в отсутствии защиты.** Форензика Zulip DB показала: папка правилась
**руками** 26 сентября — тремя прогонами (`patch mode=patch` по целым строкам,
`source = manual (user decision)`): транслит ~55 строк (`Kontrabandy`→`Контрабанды`),
треки из имени файла 199, срезанные `!`/`?`. **Все эти решения жили в `tag-fix-plan.csv`
и `APPLY-PLAN.csv`, а НЕ в генераторе** — генератор воспроизводит только механику 38-й волны.
**Правило:** новый план строить **от `new_*` предыдущего плана как базы**, дописывая только
целевое правило. Перегенерация из исходного инвентаря «с нуля» **обязательно** теряет ручные
решения, потому что они нигде в коде не записаны.
**Проверка перед генерацией:** взять 3-5 известных ручных правок из прошлого плана и убедиться,
что генератор даёт для них то же значение. Иначе — не генерировать.
### 34. 🔴 Стоп-список обязан содержать ЛАТИНСКУЮ ТРАНСЛИТЕРАЦИЮ
`Sbornik_Novij_Rok` **не ловился ни одним из трёх механизмов** генератора (проверено кодом,
`/tmp/check_sbornik.py`): `NON_ARTIST` → `False`, `CATEGORY_DIRS` → `False`,
`is_release_folder` → `False`, `has_word(norm, EVENT_WORDS)` → `False`.
Причина: во всех списках слово `сборник` есть **только по-русски**, а папка названа
**латиницей** (`sbornik_novij_rok`).
В этой библиотеке транслит — норма, не исключение: `Sbornik_Novij_Rok`, `Df1`, `ZabuGor`,
`RacinG_Portal`, `PaDoNkÈ[NTL]`. Любой `grep` по русскому стоп-слову их пропускает.
**Правило:** каждый стоп-список дублировать латиницей (`sbornik`, `sborka`, `raznoe`,
`izbrannoe`, `hity`, `luchshee`, `novoe`, `staroe`, …); для конкретных папок-контейнеров —
отдельное множество точных имён (`CONTAINER_FOLDERS`).
**Проверка:** прогнать стоп-списки по реальным именам папок и убедиться, что известные
контейнеры дают `True`, а известные артисты (`5'nizza`, `Little Big`) — `False`.
## Связанное
- [[personal/tech/music-tags-repair-truenas]] — волновой лог канонического инстанса