diff --git a/family/projects/media-toolbox-kraken.md b/family/projects/media-toolbox-kraken.md index b9e59192..c96279e2 100644 --- a/family/projects/media-toolbox-kraken.md +++ b/family/projects/media-toolbox-kraken.md @@ -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 сессия 10–11 (продолжение):** Серия кодовых фиксов. **278 applied, 3 skipped (98.9%).** Созданы ручные NFO для 11 тайтлов (нарушение принципа — удалены в сессии 12). -- **2026-05-16 сессия 12:** Удалены 15 ручных NFO. Подтверждён и задокументирован Баг 12 (`_1985_` year extraction). TitleParser регекс исправлен на `(?