[2026-09-24] eagle: family/projects/watchlist-automation.md personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md personal/tech/watchlist-sync-feed.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-24 17:23:09 +06:00
1 parent 81467fe14f
commit c8b9e5a082
4 files changed
+156 -16

No files matched your search

+38 -9
View File
@@ -8,7 +8,7 @@ related:
- '[[family/projects/watchlist-automation]]'
- '[[family/documents/movies-watchlist]]'
- '[[personal/plans/lampac-watched-to-watchlist]]'
status: sync-down-feed-implemented-392-parity-pending
status: sync-down-feed-implemented-matcher-parity-blocked
tags:
- lampac
- lampa
@@ -23,6 +23,7 @@ tags:
- tmdb
- card-parse
- feed
- matcher-parity
title: Watchlist в UI Lampa — каталог из списка
type: plan
updated: '2026-09-24'
@@ -77,13 +78,37 @@ Alex уточнил требование: «это же чистая дораб
в `all_candidates` — среди них верный. Старый генератор брал первый результат TMDB.
Если строить фид строго по `result.status == "ok"`, теряется **54 позиции**
(девять, Мементо, Babylon, Orville, Матрица-класс названий: Казино, Сияние, Оно,
Отступники, Бешеные псы…). 🟡 **На момент записи дока это НЕ решено** — ждёт решения
Alex: брать `all_candidates[0]` (полный фид 392, как раньше, но спорящие позиции
могут показать не тот фильм) **или** пропускать спорные (фид честный, ~54 позиции
пропадут до уточнения года в `.md`).
Отступники, Бешеные псы…).
✅ **РЕШЕНО 2026-09-24:** Alex — «бери лучшего кандидата и пиши вопрос». Фид берёт
`all_candidates[0]`, а название уходит в `missing` → ❓ в `.md` (год, добавленный
после ❓, пиннит позицию на следующем прогоне). Реализовано в `sync_down.py`.
**🔴 ГЛАВНЫЙ БЛОКЕР, вскрытый переносом (не закрыт):** резолвер проекта матчит
**хуже** старого генератора. Сверка по TMDB-номеру (не по названию — в фиде имена
из TMDB, в `.md` из строки, сравнение по имени бесполезно):
```
было в живом фиде, в новом с ДРУГИМ tmdb_id: 86 позиций
примеры: Злая: Часть 2, Разделение, Дракула, Ван Хельсинг, Судья Дредд, Дюна-класс
плюс мусорные матчи по кривым строкам: «[Убийственная вечеринка] (2025)» → фильм 2007
```
**Причина:** в старом генераторе 4 ступени резолва — Radarr → TMDB → **КП-по-номеру
из ссылки `kinopoisk.ru/film/N/`** → КП-по-названию. Самая надёжная ступень
(номер из ссылки — машинный ключ, не зависит от переименований) в `resolver.py`
**отсутствует вообще**. До переноса это маскировал Radarr-фастпатч; после удаления
контента arr маскировка исчезла и расхождение вылезло.
**Варианты (ждёт решения Alex):**
- **А (рекомендован):** перенести в `sync_down`/`resolver` ступень «КП-по-номеру из
ссылки» — код разобран и лежит в бэкапе `gen_watchlist.py` (`kp_search_by_id` +
`_docs_to_tmdb` с `_by_id`). ~30 мин, проверяется тем же diff по tmdb_id.
- **Б:** выкатить как есть и вычистить 86 расхождений руками — вернутся после прогона.
**Замеры dry-run по ходу работы:** 268 (с фильтрами) → 332 (без фильтров, `ambiguous`
исключается) → цель 392, достигается только решением по п.3.
исключается) → **397** (`all_candidates[0]` + ❓; больше 392, потому что старый
генератор терял часть позиций на Radarr-фастпатче и ❓-строках).
На живой фид НЕ выкатывалось: сначала matcher-parity.
**Реперные метрики живого фида на 2026-09-24** (для сверки после переноса):
```
@@ -102,15 +127,19 @@ Alex уточнил требование: «это же чистая дораб
`cards/card-movie-NNN.json`. Механика `missing.json` → ❓ осталась, переехала внутрь
`sync_down.py` (`_sync_question_marks`, двусторонняя — снимает протухший ❓).
**🟡 Незакрытое на конец сессии 2026-09-24 (для следующей сессии):**
1. **Решение по спорным позициям (54 шт.)** — см. п.3 «Три открытия»: брать
`all_candidates[0]` (полный фид 392) или пропускать. Ждёт ответа Alex.
**🔴 Незакрытое на конец сессии 2026-09-24 (для следующей сессии):**
1. **Matcher-parity (ГЛАВНОЕ)** — см. «ГЛАВНЫЙ БЛОКЕР» выше: перенести ступень
«КП-по-номеру из ссылки» в резолв фида (вариант А) либо вычистить 86 расхождений
руками (вариант Б). Без этого выкат на живой фид покажет не те фильмы на ~86 позициях.
2. Возврат `sync-down` в `watchlist-nightly.sh` (строка 40 сейчас «ПРОПУЩЕН»;
в 02:30 крутится отдельный `watchlist-catalog.sh`) + удаление `watchlist-catalog.sh`
и строки крона `30 2 * * *`.
3. Удаление `lampac/scripts/gen_watchlist.py` (878 строк) и `mark_missing.py` (179).
🔴 НЕ удалять до закрытия п.1: оттуда берётся код `kp_search_by_id` / `_docs_to_tmdb`.
4. Прогон `--apply` на живой фид + `docker restart lampac` (сброс кэша Catalog)
+ приёмка в UI Lampa.
5. Правка `sync_down.py`: ветка «не нашлось» (`not_found`) обязана добавлять позицию
в `missing` — за это отвечает `_sync_question_marks` (двусторонний ❓).
---