- каталог задач: PLAN.md → ROADMAP.md с каноническими секциями, все 44 записи получили тип, заголовки приведены к форме своего типа - расхождения, найденные судьями канона: исключения инварианта «источник неприкосновенен», инвариант про один активный infohash, UTC в logging.md, поведение из architecture.md заменено ссылками на спеки - триггеры профиля ревью переписаны под умолчание standard
4.4 KiB
✨ Брать у TVDB название на языке настройки и оригинальное название
- Тип: feature
- Категория: Ядро продукта
- Зачем: [general].language правит только TMDB и промпт LLM — TVDB отдаёт primary name, и при language=ru в карточку ревью и имя папки попадает 哪吒之魔童降世 вместо «Нэчжа»
- Теги: goal:recognition-accuracy
Кандидат от TVDB начинает приходить с названием на языке [general].language
и с отдельно заполненным оригинальным названием — как это уже делает TMDB.
Сегодня глобальная настройка до клиента TVDB не доезжает вовсе:
TVDBConfig (internal/metadata/tvdb.go) поля языка не имеет, serve.go
собирает провайдер без него, Search шлёт только query/type/year, а из
ответа разбирает единственное поле name — это primary name записи, то есть
название на языке оригинала. Блок переводов не читается, OriginalTitle TVDB
не заполняет вовсе, хотя это ось сравнения при матче. Наблюдаемый случай —
movie 131155: primary name
哪吒之魔童降世, русский перевод у записи есть («Нэчжа»), но до нас не доходит.
Что сделать:
- прокинуть локаль в
TVDBConfigизcfg.ContentLanguage(), диалект вывести внутриtvdb.go— знание диалекта принадлежит тому, кто на нём говорит (ADR решения 2 в архиве); - разобрать переводы в выдаче поиска (точные имена полей —
name_translatedи блокtranslations; форму сверить с живым API черезTVDB_API_KEY=… go test ./internal/metadata/ -run Integration, наугад не писать); - фолбэк на primary name, когда перевода на нужный язык нет, — молчаливой
пустоты в
Titleбыть не должно; - заполнить
OriginalTitleprimary name'ом; - заказать поведение спекой: требование «Локаль запроса к TMDB» (metadata-match) написано только под TMDB — либо обобщается на провайдеров, либо получает соседа.
Критерии приёмки
- Запрос поиска TVDB содержит параметр языка, выведенный из
[general].language(оракул: тест наhttptest-сервере вtvdb_test.go— проверяет строку запроса приlanguage = ruи при незаданном, как это сделано для TMDB). - При наличии перевода
Candidate.Titleприходит на языке настройки, при отсутствии — равен primary name (оракул: два случая в одном табличном тесте на фикстуре ответа). Candidate.OriginalTitleу TVDB непуст и равен primary name (оракул: тот же тест; плюс интеграционный прогон заTVDB_API_KEYпечатает оба поля).- Дельта-спека
metadata-matchзаказывает локаль TVDB и фолбэк на оригинал (оракул:openspec validate --strict).
Рамки
Матч и гейт авто-раскладки не трогаются — локализованное название косметическое, сравнение идёт по оригинальному; менять из-за него поведение выборки нельзя. Живой API дёргается только вручную под env-гейтом, лимиты ключа беречь. TVMaze вне охвата — переводов не отдаёт.