Сверка с метабазой промахивалась на иностранных фильмах с русским релиз-именем (кейс «Тёмный рыцарь»): поиск шёл по одной строке provider_hint||title и игнорировал original_title, а базы индексированы прежде всего по оригинальным названиям. - matchMetadata ищет по ключам original_title → title → provider_hint с ранним стопом на первом единичном сильном матче; пустые и нормализованно-дублирующие ключи пропускаются, кандидаты для review копятся из всех заходов. - Промпт требует всегда заполнять title и original_title (дублировать при отсутствии оригинала / российском контенте; при неуверенности дублировать, не выдумывать). Разбор остаётся мягким к пустому original_title. - TMDB-поиск передаёт language (по умолчанию ru-RU, настраивается [metadata.tmdb].language); original_title не зависит от локали. - Нормализация названий сводит ё→е. Инварианты не ослаблены: авто только при подтверждённом единичном матче + структурной валидации + согласованности сигналов. Capability recognition впервые перенесена в OpenSpec; change архивирован. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
1. Конфигурация TMDB language
- 1.1 Добавить поле
languageв конфиг TMDB ([metadata.tmdb].language), дефолтru-RU; проброс в клиент TMDB - 1.2 Безопасный дефолт
ru-RUпри пустой локали (вDefault()и фолбэком в клиенте — отдельная валидация-реджект не нужна); обновитьconfig.example.toml
2. Локаль в TMDB-клиенте
- 2.1 В
internal/metadata/tmdb.goпередаватьlanguageвSearch(params.Set("language", ...)) - 2.2 Тест: запрос содержит
language=ru-RU;OriginalTitleне зависит от локали
3. Нормализация названий
- 3.1 В
internal/recognize/metadata.gonormalizeсводитьё→е - 3.2 Тест: «Тёмный рыцарь» и «Темный рыцарь» нормализуются одинаково
4. Многозапросный поиск в matchMetadata
- 4.1 Сформировать упорядоченный список ключей
[original_title, title, provider_hint], отбросив пустые и нормализованные дубли - 4.2 Перебирать ключи: для каждого — поиск по всем провайдерам, ранний стоп на первом единичном сильном матче (
strongMatches) - 4.3 Кандидатов для review копить из всех выполненных заходов (дедуп по
provider:id, потолокmaxCandidates) - 4.4 Тесты: матч по original при пустом совпадении по title; фолбэк на title; фолбэк на provider_hint; пропуск дубль-ключа
5. Контракт LLM на названия (промпт)
- 5.1 В
internal/recognize/prompt.goусилить правила: всегда заполнятьtitleиoriginal_title; дублировать при отсутствии оригинала / российском происхождении; при неуверенности дублировать, не выдумывать - 5.2 Убедиться, что
parsePlanостаётся мягким к пустомуoriginal_title(нет отбраковки/лишнего correction-ретрая); тест на graceful-фолбэк
6. Синхронизация спеки и проверка
- 6.1 Синхронизировать
docs/specs/recognition.mdс дельтой (конвейер сверки, контракт названий, локаль TMDB, нормализация) - 6.2
task testиtask lintзелёные - 6.3
openspec validate recognition-multi-title-match --strictпроходит