Files
jellybit/openspec/changes/archive/2026-07-24-content-language-switch/specs/recognition/spec.md
T
av a2d8140e22 recognition: глобальный переключатель языка вывода [general].language
- новое поле [general].language (ru|en, дефолт en) — единый источник языка
  локализованного title детектора и локали запросов к метабазам; original_title
  всегда на языке оригинала
- локаль TMDB (поиск + credits) выводится из него, [metadata.tmdb].language убран
- промпт LLM явно задаёт язык title с fallback на оригинал
2026-07-24 14:09:04 +03:00

3.7 KiB

MODIFIED Requirements

Requirement: Контракт LLM на оригинальное и локализованное названия

Промпт распознавания SHALL требовать от модели всегда заполнять и title, и original_title. Если отдельного оригинального названия нет или контент российского происхождения, модель SHALL дублировать title в original_title. При неуверенности в оригинальном названии модель SHALL дублировать title, а не выдумывать название (защита от ложного авто-матча).

Промпт SHALL явно задавать язык локализованного title из глобальной настройки language (ru|en, дефолт en): модель SHALL возвращать title на выбранном языке, а при отсутствии перевода — на языке оригинала (fallback). Языковая директива SHALL касаться ТОЛЬКО title; original_title остаётся на языке оригинала независимо от language (правила дублирования выше не меняются). provider_hint и структурные поля (files[].src, роли, нумерация) языковой директивой не затрагиваются.

Разбор ответа SHALL оставаться устойчивым к пустому original_title: пустое значение не отбраковывается и не вызывает correction-ретрай; сверка gracefully использует доступные названия.

Scenario: Российский фильм — дублирование

  • GIVEN раздача российского фильма без отдельного оригинального названия
  • WHEN модель возвращает план
  • THEN title и original_title заполнены одинаковым каноническим названием

Scenario: Пустой original_title не ломает разбор

  • GIVEN ответ модели с пустым original_title
  • WHEN план разбирается
  • THEN разбор успешен без correction-ретрая
  • AND сверка использует titleprovider_hint)

Scenario: title приходит на языке из настройки

  • GIVEN language = en и иностранный фильм с известным английским названием
  • WHEN модель возвращает план
  • THEN промпт требовал title на английском
  • AND original_title остаётся на языке оригинала (директива его не касается)

Scenario: Промпт задаёт fallback на оригинал при отсутствии перевода

  • GIVEN language = en
  • WHEN собирается промпт распознавания
  • THEN промпт требует при отсутствии перевода вернуть title на языке оригинала, а не выдумывать название

Scenario: Дефолтный язык — английский

  • GIVEN language не задан в конфиге
  • WHEN собирается промпт распознавания
  • THEN промпт требует title на английском (дефолт en)