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

This commit is contained in:
Alexey Martemyanov committed 2026-09-24 17:13:02 +06:00
1 parent 63694c7f57
commit 81467fe14f
2 files changed
+65 -24

No files matched your search

+53 -16
View File
@@ -8,7 +8,7 @@ related:
- '[[family/projects/watchlist-automation]]'
- '[[family/documents/movies-watchlist]]'
- '[[personal/plans/lampac-watched-to-watchlist]]'
status: unified-feed-approved-awaiting-implementation
status: sync-down-feed-implemented-392-parity-pending
tags:
- lampac
- lampa
@@ -44,25 +44,46 @@ updated: '2026-09-24'
Unbroken 2003→Несломленный 2014, Shogun 1968→Убийца сёгуна 1980). Лечим не годами
в `.md`, а слиянием матчеров.
**План (согласован, реализация НЕ начата).**
**Статус: ✅ РЕАЛИЗОВАНО 2026-09-24 (вечер).** Отказ от отдельного `feed.py`/CLI-шага —
Alex уточнил требование: «это же чистая доработка sync-down?» → **`sync-down` сам пишет фид**.
Отдельного шага `feed` в CLI и в nightly НЕ появилось.
| Шаг | Что |
| Что | Как сделано |
|---|---|
| 1 | Логику `gen_watchlist.py` перенести в модуль проекта: `watchlist_sync/feed.py`, функция `run()` как у остальных |
| 2 | Новый CLI-шаг `feed`; в nightly — ПОСЛЕ `resolve` (маркеры уже стоят), ПЕРЕД `sync-up` |
| 3 | Пути — через `.env`-ключ `LAMPAC_ROOT=/srv/.../lampac` (не хардкод); модуль сам собирает `wwwroot/watchlist.json`, `wwwroot/cards/`, `cache/` |
| 4 | Проверка на копии фида: ожидание **392 позиции / 390 постеров / missing 30** — точь-в-точь как текущий живой |
| 5 | Живой прогон + `docker restart lampac` (сброс кэша Catalog) |
| 6 | Выпилить: `lampac/scripts/gen_watchlist.py` + `mark_missing.py` → `*.bak-20260924`; `~/scripts/watchlist-catalog.sh` + строка крон `30 2 * * *` |
| 7 | Доки + скилл, коммит/пуш |
| Новый `watchlist_sync/sync_down.py` | ~380 строк вместо 195: `resolve` → `wwwroot/watchlist.json` + `watchlist-<cat>.json` + `cards/card-<movie-NNN>.json` + `cards.json` + `missing.json`; опционально ❓-синк |
| CLI | `sync-down [--apply] [--feed-root]`; `--batch` оставлен deprecated (в фид идёт весь список) |
| Пути | `--feed-root` → env `LAMPAC_ROOT` → `<repo>/../lampac` (fallback для Мак-чекаута). Хардкода UUID-путей в коде нет |
| `arr.py` | 🔴 **УДАЛЁН** (`git rm`, коммит `a524f5d`) — история сохранена в гите. Бэкапы НЕ делались (решение Alex: «в истории гита останется») |
| ⬇️ | **не ставится больше нигде.** Alex: «⬇️ больше ставить не надо, ведь закачки нет». `mark_queued` в `parser.py` оставлен для исторических строк |
| Коммит | `a524f5d` — «sync-down: build Lampa feed instead of adding to arr; drop arr.py» |
**Что НЕ трогаем:** `catalog/sites/watchlist.yaml` (контракт Lampac — `plugin: watchlist`,
категории, `card_parse`/`card_args` с `format`-выражениями), `catalog/plugin.js`
(инжект секций в CUB через `Api.partNext`), структура `cards/card-movie-NNN.json`.
Механика `missing.json` → маркер ❓ уже живёт в проекте и работает.
**🔴 Три открытия при переносе (стоили трёх итераций — не повторять):**
**`sync-down` остаётся вырезанным из крона** — добавлений в arr из watchlist нет;
`arr.py` не трогаем (автозакачка вернулась для РУЧНЫХ добавлений, коммит `ef7e7af`).
1. **Фильтры рейтинга/ужасов в фиде НЕ НУЖНЫ.** Я притащил в фид правила закачки
(`rating >= 6.0`, horror-skip) — фид упал до 268 позиций из 392. Это правила
**Radarr** («не качаем то, что не смотрим»), а каталог — не очередь закачки:
старый генератор отдавал horror тоже (Вивариум, Субстанция, Ужасающий, Зубастики
есть в живом фиде). В `sync_down.py` оставлен явный комментарий с запретом
возвращать эти фильтры.
2. **`item.ambiguous` (❓) НЕ исключает позицию из фида.** ❓ означает «название в `.md`
неточное, пригодился бы год», а НЕ «нерезолвлено». Резолвер для таких всё равно
отдаёт кандидата, и старый генератор их публиковал (Альфа, Кибердеревня, Орвилл,
Ножницы — все с постерами в живом фиде). Из фида исключают только: нет `tmdb_id`
и `result.year_ambiguous` (🗓️ — реально два разных фильма).
3. **Фид должен брать лучшего кандидата, а не отказываться.** `resolve()` при
неоднозначности возвращает `status="ambiguous"`, `candidate=None`, но топ-3 лежат
в `all_candidates` — среди них верный. Старый генератор брал первый результат TMDB.
Если строить фид строго по `result.status == "ok"`, теряется **54 позиции**
(девять, Мементо, Babylon, Orville, Матрица-класс названий: Казино, Сияние, Оно,
Отступники, Бешеные псы…). 🟡 **На момент записи дока это НЕ решено** — ждёт решения
Alex: брать `all_candidates[0]` (полный фид 392, как раньше, но спорящие позиции
могут показать не тот фильм) **или** пропускать спорные (фид честный, ~54 позиции
пропадут до уточнения года в `.md`).
**Замеры dry-run по ходу работы:** 268 (с фильтрами) → 332 (без фильтров, `ambiguous`
исключается) → цель 392, достигается только решением по п.3.
**Реперные метрики живого фида на 2026-09-24** (для сверки после переноса):
```
@@ -75,6 +96,22 @@ Unbroken 2003→Несломленный 2014, Shogun 1968→Убийца сёг
(`~/Developer/watchlist-sync/`), `/tmp` — только для чтения чужих файлов и одноразовых
выборок. Мак-репа и Кракен держатся на одном коммите (`4266e37` на момент старта).
**Границы (что не трогаем):** `catalog/sites/watchlist.yaml` (контракт Lampac:
`plugin: watchlist`, категории, `card_parse`/`card_args` с `format`-выражениями),
`catalog/plugin.js` (инжект секций в CUB через `Api.partNext`), структура
`cards/card-movie-NNN.json`. Механика `missing.json` → ❓ осталась, переехала внутрь
`sync_down.py` (`_sync_question_marks`, двусторонняя — снимает протухший ❓).
**🟡 Незакрытое на конец сессии 2026-09-24 (для следующей сессии):**
1. **Решение по спорным позициям (54 шт.)** — см. п.3 «Три открытия»: брать
`all_candidates[0]` (полный фид 392) или пропускать. Ждёт ответа Alex.
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).
4. Прогон `--apply` на живой фид + `docker restart lampac` (сброс кэша Catalog)
+ приёмка в UI Lampa.
---
> Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog.