recognize: название из метабазы санитизируется перед попаданием в план
- чистка стоит на каждой точке входа значения метабазы в план — сборка матча, копия кандидата для ревью, набор закреплённых значений источника и его чтение: гарантия, поставленная только на запись, обходится данными, сохранёнными прежними версиями - название, непригодное как имя каталога (пустое или без единой буквы и цифры), не подставляется — раздача уходит в review с названной причиной - гейт подтверждения матча не сдвинут: сравнение с планом идёт по значениям провайдера, чистится только копия, уходящая дальше
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
## 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, и это
|
||||
главный риск изменения.
|
||||
- Пути на диске не меняются ни для одной раздачи с нормальным названием:
|
||||
санитайзинг идемпотентен и на чистом значении не меняет ничего.
|
||||
- Внешних зависимостей, схемы БД и конфигурации изменение не касается.
|
||||
Reference in New Issue
Block a user