## Why

Название, которое система берёт из метабазы (TMDB, TVDB, TVMaze) при
подтверждённом матче, попадает в имя каталога библиотеки Jellyfin дословно —
таким, каким его отдал внешний сервис. Вывод LLM мы чистим и считаем
недоверенным; название из метабазы того же обращения не получает, хотя приходит
ровно так же — из-за периметра.

Итог наблюдаем: название из трёх невидимых символов (zero-width) даёт каталог,
имя которого выглядит пустым; название с кириллической `а` внутри латинского
слова даёт второй каталог, визуально неотличимый от первого; перевод строки
внутри названия доезжает до плана. Ни один из этих случаев авто-раскладку не
останавливает — она проходит, и разбирается это потом руками в библиотеке.

Класс не новый: тем же путём ходит TMDB с самого начала. Разговор поднят
ревью изменения `tvdb-title-locale`, где тот же путь распространили на второго
провайдера.

## What Changes

- Название, взятое из метабазы при подтверждённом матче, проходит ту же чистку,
  что и название от LLM, — **до** того, как попасть в план и оттуда в путь на
  диске. Дом чистки остаётся один, второго способа чистить названия не заводится.
- Ту же чистку проходят названия кандидатов, уходящих на ревью: выбор кандидата
  человеком — полноправный путь подтверждения матча, и закреплённое им название
  становится именем каталога так же, как название авто-матча. Условия
  подтверждения сильного матча при этом не меняются: сравнение с планом идёт по
  значению, как его отдал провайдер.
- Название, от которого после чистки ничего не остаётся, план не перезаписывает:
  раздача уходит в ревью с названной причиной, а не раскладывается автоматически
  и не падает на пустом имени каталога.
- Режиссёр остаётся как есть — он не участвует в пути на диске, и его чистка по
  действующему требованию делается при выводе отображаемого имени.

## Capabilities

### New Capabilities

Новых нет.

### Modified Capabilities

- `metadata-match`: требование «Подтверждение матча и каноническое имя»
  дополняется — каноническое название перед подстановкой в план санитизируется,
  а название, схлопнувшееся в пустое, подстановку не выполняет и блокирует
  авто-раскладку.
- `recognition`: требование «Санитайзинг человекочитаемых полей плана»
  перестаёт быть требованием только о выводе LLM — оно называет чистку общей для
  обоих источников названия и фиксирует, что после сверки с базой в плане не
  остаётся несанитизированных человекочитаемых полей.

## Impact

- `internal/recognize` — порядок подстановки канонического названия
  относительно санитайзинга (`recognize.go`), причина ухода в review
  (`validate.go`).
- Поведение **обоих** провайдеров: правка меняет уже работающий путь TMDB, и это
  главный риск изменения.
- Пути на диске не меняются ни для одной раздачи с нормальным названием:
  санитайзинг идемпотентен и на чистом значении не меняет ничего.
- Внешних зависимостей, схемы БД и конфигурации изменение не касается.
