- в наборе шесть задач: локаль TVDB и confidence-гейт под цель, плюс баги и техдолг помимо неё - взятым дописаны разделы своего типа: «Затрагивает», критерии с оракулами, воспроизведение - решены развилки: оба расхождения код↔спека правятся спекой (и потому стали chore), опрос qBittorrent тормозится бэкоффом до минутного потолка
5.1 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 — либо обобщается на провайдеров, либо получает соседа.
Затрагивает
internal/metadata/tvdb.go—TVDBConfig(поле языка), строка запросаSearch, разбор переводов иOriginalTitleв кандидате;cmd/jellybit/serve.go— сборка провайдера TVDB из конфига;openspec/specs/metadata-match/spec.md— требование «Локаль запроса к TMDB»: обобщается на провайдеров либо получает соседа под TVDB;- внешний контракт: поиск TVDB (
/search) и его блок переводов — формат сверяется живым прогоном подTVDB_API_KEY, наугад не пишется.
Критерии приёмки
- Запрос поиска 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 вне охвата — переводов не отдаёт.