[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/plans/tagwriter-container.md personal/tech/id3-tag-repair.md
This commit is contained in:
1 parent
23a5da004b
commit
1261d89943
3 files changed
+285
-2
No files matched your search
@@ -97,6 +97,17 @@ related:
|
||||
> `306` отсутствует (0 ячеек), те же строки схлопнуты в **15 записей** по D16.
|
||||
> Мой дефект был в **изложении** — Alex прочитал как подмену числа.
|
||||
|
||||
> ⚠️ **Обновлён до v2.7.0 (сессия 20):** **D36** — 🔴 **«сколько правок?» → сначала выяснить,
|
||||
> КАКУЮ работу имеет в виду Alex, и называть только её число.** Четыре числа из четырёх разных
|
||||
> артефактов (`306` задача / `7963` брак / `7649` полный план / `4359` genre) были произнесены
|
||||
> рядом, и Alex прочитал это как подмену. **`7649` — размер ПЛАНА, а не размер ЗАДАЧИ.
|
||||
> `306 ⊂ 7649`** — вложенность, не противоречие. Одновременно: **D37** — 🔴 **в счётном файле
|
||||
> колонка `was` (промежуточная) ≠ `now` (финальная)**: `ALBUM-FIX-306.csv` расходится на
|
||||
> **10 из 17 пар**; механическая таблица `ALBUM-FIX-TABLE.csv` непригодна для приемки.
|
||||
> **D38** — производный план: для прогона ОДНОЙ задачи собрать отдельный CSV
|
||||
> (306 путей ⊂ `APPLY-PLAN.csv` → `/tmp/apply-plan-306.csv`, md5 `8bfa52…`), тогда dry-run
|
||||
> покажет число ЗАДАЧИ. Боевой план при этом НЕ трогать.
|
||||
|
||||
## 📁 Артефакты проекта
|
||||
|
||||
**Путь:** `~/Developer/personal-os/tools/music-tags/`
|
||||
@@ -435,6 +446,67 @@ Alex спрашивал про список снятия скобок дважд
|
||||
306 из 306; уникальных путей 306; уникальных пар «папка+было→стало» — 17.
|
||||
Скрипт: `/tmp/verify_alb_fix.py`.
|
||||
|
||||
### 🔴 D36 — «сколько правок?» → сначала выяснить, КАКУЮ задачу имеет в виду Alex (сессия 20)
|
||||
|
||||
Четыре числа из четырёх **разных** артефактов, произнесённые рядом, читаются как подмена:
|
||||
|
||||
| Число | Источник | Значение |
|
||||
|---:|---|---|
|
||||
| `306` | `ALBUM-FIX-306.csv` | файлов, поле `album`, скобочный мусор — **задача сессии** |
|
||||
| `7963` | **мой брак** (D32) | развёртка ПАПКА-строк `genre` → верное `4359` |
|
||||
| `7649` | **dry-run** | файлов, которые тронет скрипт по **ПОЛНОМУ** плану |
|
||||
| `4359` | `APPLY-PLAN.csv` | файлов `cur_genre != new_genre` |
|
||||
|
||||
**`306 ⊂ 7649`** — это **вложенность, не противоречие**. Dry-run гоняет весь
|
||||
`APPLY-PLAN.csv` (7861 строка), в котором лежит несколько работ сразу
|
||||
(`albumartist` 7213 · `genre` 4359 · `album` 2003 · `track` 344 …).
|
||||
|
||||
🔴 **Правило:** на вопрос «сколько правок» сначала **выяснить, какую работу** имеет в виду
|
||||
Alex, и называть **только число этой работы**. Никогда не давать «число полного плана»
|
||||
(dry-run) как ответ на «сколько правок мы делаем» — это размер **плана**, а не размер **задачи**.
|
||||
Числа других артефактов — отдельным абзацем с явным источником.
|
||||
|
||||
### 🔴 D37 — в счётном файле колонка `was` ≠ `now`; механическая таблица негодна для приемки
|
||||
|
||||
`ALBUM-FIX-306.csv` несёт **две** целевые колонки: `new_album_was` (механическое снятие скобок)
|
||||
и `new_album_now` (финал после правил D27/A3/A5). **Расходятся на 10 из 17 пар:**
|
||||
|
||||
```
|
||||
was='Высоцкий' now='Владимир Высоцкий' (корень = имя артиста, D21/D27)
|
||||
was='Авария' now='Retro' (!Retro — папка-сборник, A3)
|
||||
was='Авария' now='Москва пьёт пиво' (подпапка = имя подпапки, D27)
|
||||
was='zvezda' now='NONSONS - zvezda'
|
||||
was='prod. Shorty' now='Красивые, богатые' (артист/год из album убрать, A3/A5)
|
||||
```
|
||||
|
||||
🔴 **Правило:** таблицу с механическим снятием скобок (`ALBUM-FIX-TABLE.csv`, колонка `was`)
|
||||
**нельзя утверждать как результат**. Принимать только по колонке `now`. Если в артефакте две
|
||||
целевые колонки — всегда проверять их расхождение и называть файл, где лежит ФИНАЛ
|
||||
(ср. D33).
|
||||
|
||||
### 🔴 D38 — для прогона ОДНОЙ задачи собрать производный план, боевой не трогать
|
||||
|
||||
Когда из плана нужно отработать одну задачу (306 из 7861), а не весь план:
|
||||
|
||||
```python
|
||||
want = {r["path"] for r in csv.DictReader(open(LIST306))} # 306 путей
|
||||
sel = [r for r in plan_rows if r["path"] in want] # ⊂ APPLY-PLAN.csv
|
||||
assert len(sel) == 306
|
||||
# запись через tmp + os.replace; APPLY-PLAN.csv НЕ открывать на запись
|
||||
```
|
||||
|
||||
| Что | Значение |
|
||||
|---|---|
|
||||
| Скрипт | `/tmp/make_plan_306.py` |
|
||||
| Выход | `/tmp/apply-plan-306.csv` — 306 строк, md5 `8bfa52389a80119e713b88d05a91b9ef` |
|
||||
| Проверка | `не найдено в плане: 0`; у всех 306 `cur_album != new_album` |
|
||||
|
||||
**Проверять вход, а не только выход:** если часть путей не найдена в плане — это дефект отбора,
|
||||
а не «нормально» (здесь `0`). Боевой `APPLY-PLAN.csv` **не перезаписывать**: производный план
|
||||
кладётся в **отдельную папку-маунт** для dry-run. Ожидаемый вывод dry-run = **306**, а не 7649.
|
||||
|
||||
> Проверочные скрипты сессии 20: `/tmp/count_306.py`, `/tmp/make_plan_306.py`.
|
||||
|
||||
### 🔴 D34 — «откуда взялось это поле?» → сравнить ЗАГОЛОВКИ обеих версий плана
|
||||
|
||||
Alex: «**Откуда там правка жанра то??**». Ответ оказался одним фактом: **в волне 38 колонки
|
||||
|
||||
Reference in new issue
Block a user