diff --git a/personal/plans/watchlist-tmdb-missing-marker.md b/personal/plans/watchlist-tmdb-missing-marker.md new file mode 100644 index 00000000..8e8cac14 --- /dev/null +++ b/personal/plans/watchlist-tmdb-missing-marker.md @@ -0,0 +1,144 @@ + +# Watchlist — маркер «нет в TMDB» + заглушка карточки + +**Дата:** 2026-09-22 +**Статус:** черновик, ждёт апрува +**Связано:** [[personal/plans/lampac-watchlist-plugin]], [[family/projects/watchlist-automation]] + +--- + +## Задача (дословно Alex) + +> «Их нет?! Тогда какого хуя они БЛЯДЬ в списке вообще?! Скрипт должен поставить вопрос +> в списке напротив такого (кроме тех что ещё не вышли, там календарь стоит)» + +> «В смысле блядь прописал соответствия вручную?! Че за нахуй?! Убирай нахуй! +> Это блядь скрипт должен делать!» + +--- + +## Что установлено фактами + +### 1. Ручные соответствия — УБРАНЫ (2026-09-22) + +Я вписал в генератор словарь `MANUAL_TMDB` (Хамнет → 858024, WeWork → 795622, +Астрал 2 → 1291595) и «починил» 3 фильма руками. **Откачено по требованию Alex.** +Причина корректная: подмена результатов — не решение, а маскировка проблемы. + +⚠️ **Побочный эффект отката:** постеры у Хамнета, WeWork и Астрала 2 вернутся к «НЕТ», +пока не будет автоматического механизма. Данные в `/tmp/wl-out` пока содержат ручные +результаты (задеплоено) — при следующем прогоне генератора они исчезнут. + +### 2. 4 фильма отсутствуют в TMDB физически + +| Фильм | Кинопоиск-ID | Маркер | TMDB | +|---|---|---|---| +| Рассекая волны: экспедиция «Лас Бальсас» (2025) | 12432920 | 🗓️ | нет | +| Цена вершины (2025) | 11888712 | 🗓️ | нет | +| О добре и зле (2025) | 8184798 | 🗓️ | нет | +| Эхопраксия | — | ❓ | id=1650284 есть, но **без постера** | + +Проверено запросами: RU-название, EN-алиас, разные годы — пусто. + +### 3. Корень: `discover` не проверяет наличие в TMDB + +`discover.py` тянет новинки из Кинопоиска и фильтрует **только по рейтингу и голосам** +(IMDb ≥ 7.0 / KP ≥ 8.5 для РФ, голосов ≥ 1000/500). Проверки «есть ли фильм в TMDB» +**нет**. Поэтому в `## Новинки` попадают позиции, которых TMDB не знает → +`resolve` их не может сопоставить → нет `tmdb_id` → нет постера → клик даёт «здесь пусто». + +### 4. Почему маркер не сработал + +`🗓️` (upcoming) ставится **при добавлении** в `discover` для ещё не вышедших фильмов. +`resolve` **пропускает** позиции с `❓`/`🗓️` (флаг `ambiguous` в `WatchItem`). +Итог: маркер есть, но он про «не вышел», а не про «нет в TMDB» — и повторно +позиция не проверяется никогда. Для `Эхопраксии` стоит `❓` с прошлых прогонов, +но резолвер её не тронет, пока маркер не снят (`--recheck`). + +### 5. Текущие цифры (после деплоя) + +| Категория | Позиций | Постеров | TMDB-ID | +|---|---|---|---| +| films | 360 | 310 | 314 | +| new | 33 | 31 | 31 | +| cartoons | 3 | 3 | 3 | +| anime | 7 | 7 | 7 | +| **итого** | **403** | **351** | **355** | + +Без TMDB-ID: **48 позиций**. + +--- + +## ПЛАНА РАБОТ (ждёт апрува) + +### Шаг 1 — маркер `❓` автоматически в генераторе + +**Файл:** `gen_watchlist_v2.py` (на Маке), функция `enrich` + новый writer в watchlist. + +Логика: + +``` +для каждой позиции: + если tmdb_id найден -> как сейчас (постер + карточка) + иначе если маркер 🗓️ (upcoming) -> НЕ трогать (календарь = ещё не вышел) + иначе -> поставить ❓ в movies-watchlist.md +``` + +Что писать в `.md`: заменить/добавить `❓` перед названием, как это делает `resolve`. +Формат (как уже принято в файле): +``` + - [ ] ❓ Название фильма +``` + +Питфоллы: +- не дублировать `❓`, если он уже стоит; +- **не трогать** позиции с `🗓️` — явное исключение по требованию Alex; +- не трогать `[x]` (просмотренные); +- писать атомарно: backup `.md` → запись → проверка размера. + +### Шаг 2 — заглушка карточки для позиций без TMDB + +Сейчас клик по такому элементу → `cards/card-movie-.json` не существует → +«здесь пусто». Решение: генерировать карточку-заглушку с тем, что есть. + +Содержимое заглушки: название, год, рейтинг, ссылка на Кинопоиск, пометка +«нет данных TMDB». + +⚠️ **Пункт под вопросом** — Alex не подтвердил. Возможно, достаточно маркера `❓` +в списке (он сам увидит список и поправит названия). **Уточнить перед реализацией.** + +### Шаг 3 — `discover` не добавляет то, чего нет в TMDB + +**Файл:** `discover.py` в `~/Developer/watchlist-sync/`. + +Добавить проверку в `_has_enough_votes()`-цепочку: после KP-фильтра делать +TMDB-поиск и **пропускать** фильм, если TMDB его не знает. Тогда мусор не попадает +в список вообще. + +⚠️ **Риск:** фильмы, которых ещё нет в TMDB, но которые реально существуют, будут +потеряны для списка. Для upcoming (`🗓️`) можно оставить — они и так не резолвятся. + +**Уточнить:** применять ли эту проверку к upcoming тоже. + +--- + +## Порядок работ + +| # | Шаг | Файл | Апрув | +|---|---|---|---| +| 1 | Маркер `❓` в генераторе | `gen_watchlist_v2.py` | ⏳ | +| 2 | Заглушка карточки (?) | `gen_watchlist_v2.py` | ⏳ требует уточнения | +| 3 | Фильтр TMDB в `discover` | `discover.py` | ⏳ | + +**Приёмка:** открыть список — напротив фильмов, которых нет в TMDB и которые НЕ +upcoming, стоит `❓`. Фильмы с `🗓️` не тронуты. + +--- + +## Открытые вопросы (нужен ответ Alex) + +1. **Заглушка карточки** — нужна вообще, или достаточно маркера `❓` в списке? +2. **`discover`** — фильтровать по TMDB только для вышедших, или для upcoming тоже? +3. **Откат 3 постеров** — принять откат (Хамнет/WeWork/Астрал без постера, пока нет + автоматики), или сделать автопоиск по альтернативным названиям через Кинопоиск + (`alternativeName`), как уже делается в `watchlist-sync` резолвере?