2026-05-16 media-toolbox: баги 13-15, QuerySnapshotGenerator, 391 тестов GREEN

This commit is contained in:
Alexey Martemyanov
2026-05-16 11:58:58 +06:00
parent 2470024950
commit 6c14d713da
+23 -1
View File
@@ -186,6 +186,28 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent)
**Тест:** `NameTokenizationTests.yearInUnderscores` + `titleParserYearInUnderscores` — оба GREEN.
**Коммит:** `61be066` (заодно с NFO sidecar fix, фактически в коде с TitleParser.swift line 39).
### Баг 13: `OutputConfig` — `cartoons`/`documentaries` не optional в JSON
**Проблема:** Старые config-файлы и тест-JSON без новых полей бросали `keyNotFound` при декодировании.
**Фикс:** Добавлен `init(from: Decoder)` с `decodeIfPresent` + дефолт `[]`. Backward compatible. Коммит `2db0f81`.
### Баг 14: `xvid`/`divx` не в списке quality markers
**Проблема:** `Nehochuha.XVid.DVDRip``xvid` не стрипался → попадал в title tokens → мусорный запрос.
**Фикс:** Добавлены `xvid|divx` в регекс quality markers в `TitleParser.cleanupTitleAndYear`. Коммит `2db0f81`.
### Баг 15: TitleParser — год как название фильма (1984, 2001)
**Проблема:** `TitleParser` жадно вырезал первый `(19|20)\d\d` — для фильмов `1984`, `2001 Odyssey` оставлял пустой title и ломал TMDb запрос.
**Фикс:** Safety guard: стрип года только если перед ним ≥2 буквенных символа. Применён в обоих year-extraction блоках.
**Тесты:** `TitleParserExhaustiveTests.nineteenEightyFour`, `nineteenEightyFourBDRip`, `spaceOdyssey` — GREEN. Коммит `2db0f81`.
---
### Инструмент: QuerySnapshotGenerator
При изменениях в `TitleParser`/`NameTokenization`/`QueryBuilder` снапшоты в `QueryBuilderFixtureParameterizedTests.swift` устаревают.
**Регенерация:** `swift run QuerySnapshotGenerator` из корня репо.
НЕ использовать `SNAPSHOT_TESTING_RECORD=all` — InlineSnapshotTesting 1.18.7 крашит при 364 concurrent writes (SIGSEGV).
---
### Баг 6: resolve-manual NFO path для single-файлов
`resolve-manual` писал NFO внутрь файла вместо рядом.
**Фикс:** Detect `isDirectory`, для файлов → `deletingPathExtension().appendingPathExtension("nfo")`. Коммит `c0fdc59`
@@ -339,7 +361,7 @@ docker run --rm \
- **2026-05-16 сессия 8:** Обнаружен корневой баг: KP API переехал `api.kinopoisk.dev``api.poiskkino.dev` (301 redirect, Swift теряет X-API-KEY). Исправлен URL. Удалены 359 невалидных KP-кеш записей. Добавлен leet-speak decode (`4``ch`: ni4ego→nichego, muzh4iny→muzhchiny). Починен кеш: KP пустые `docs:[]` больше не кешируются (были причиной повторных промахов после rate-limit/redirect). **Текущий unresolved: 22. Завтра KP лимит сбросится → ожидаем ≤5.**
- **2026-05-16 сессия 9:** Добавлен жанровый роутинг (cartoons/documentaries — только по genres из провайдера, не по source path). Фикс `nfoMeta priority` (provider genres > local empty NFO). Фикс парсинга года `2023г` (русский суффикс). TMDb genres передаются из config. **Убран Cyr→Lat query variant** (не соответствует оригинальному Go-sync, TMDb не ищет по транслиту). Порядок провайдеров подтверждён: TMDb → KP → IMDb (short-circuit после каждого). KP — настоящий fallback (40 запросов vs 8428 TMDb). Текущий unresolved: 30 (ждём сброса KP rate limit).
- **2026-05-16 сессия 1011 (продолжение):** Серия кодовых фиксов. **278 applied, 3 skipped (98.9%).** Созданы ручные NFO для 11 тайтлов (нарушение принципа — удалены в сессии 12).
- **2026-05-16 сессия 12:** Удалены 15 ручных NFO. Подтверждён и задокументирован Баг 12 (`_1985_` year extraction). TitleParser регекс исправлен на `(?<![0-9])…(?![0-9])`. Тесты `yearInUnderscores` + `titleParserYearInUnderscores` GREEN. Текущий unresolved на Кракене: **6** (2 standalone-дубля + папка bezumnyj + 3 BBC/доки genuinely absent). **Следующий шаг:** exhaustive тесты для всех проблемных тайтлов → deploy → agentic flow для оставшихся.
- **2026-05-16 сессия 12:** Удалены 15 ручных NFO. Подтверждён и задокументирован Баг 12 (`_1985_` year extraction). TitleParser регекс исправлен. Exhaustive тесты `TitleParserExhaustiveTests` (24 кейса) — GREEN. Баги 13 (OutputConfig backward compat), 14 (xvid/divx markers), 15 (год-как-название: 1984, 2001). `QuerySnapshotGenerator` executable — регенерация 364 снапшотов без racing. **391/391 тестов GREEN.** Текущий unresolved на Кракене: **6**. Следующий шаг: deploy → clean run → agentic flow для 3 BBC/доков.
### Фиксы сессий 10–11 (код)
-**double-counting fix**`HypothesisArbiter`: `penalizedZeroProviders` в `HypothesisFact`, только newly-zero провайдеры пенализируются за проход. Серебряные коньки resolved.