[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

+12 -8
View File
@@ -1,6 +1,6 @@
---
created: '2026-05-20'
updated: '2026-09-23'
updated: '2026-09-24'
status: active
tags:
- kraken
@@ -207,7 +207,7 @@ curl -s --max-time 10 "http://localhost:7878/radarr/api/v3/queue?pageSize=50" \
| Что | Было (защита 2026-09-22) | Стало (2026-09-24) |
|---|---|---|
| `arr.py`: `monitored` + `searchForMovie` / `searchForMissingEpisodes` | `False` | **`True`** — коммит `ef7e7af` (push): добавление сразу ищет и качает |
| `arr.py`: `monitored` + `searchForMovie` / `searchForMissingEpisodes` | `False` | **`True`** — коммит `ef7e7af` (push): добавление сразу ищет и качает. 🔴 **Вечером того же дня `arr.py` УДАЛЁН** (`a524f5d`) вместе с переходом `sync-down` на фид Lampa — см. «Консолидация» ниже |
| Radarr `rssSyncInterval` | `0` | **15 мин** (`PUT /api/v3/config/indexer`, HTTP 202) |
| Sonarr `rssSyncInterval` | `0` | **15 мин** (там же) |
| `sync-down` в кроне | вырезан | **остался вырезан** — авто-пути из watchlist нет, добавление только руками |
@@ -221,12 +221,16 @@ curl -s --max-time 10 "http://localhost:7878/radarr/api/v3/queue?pageSize=50" \
(частичный молча возвращает старое). Через host-config тупик: валидатор требует непустой
`allowedHosts` при `authenticationRequired != Enabled` и не принимает звёздочку.
**🔴 Дальше — консолидация (план согласован 2026-09-24, не реализован):** отдельный
генератор каталога `lampac/scripts/gen_watchlist.py` признан вторым независимым матчером
TMDB — он не знает про `resolve` и его маркеры, из-за чего после удаления arr каталог
разъехался с `.md` на 3 позициях (Олдбой/Unbroken/Shogun). Слияние логики в модуль
проекта `watchlist_sync/feed.py` + CLI-шаг `feed` — см.
[[personal/plans/lampac-watchlist-plugin]] § «2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ».
**✅ Консолидация РЕАЛИЗОВАНА 2026-09-24:** генератор каталога слит в `sync-down`.
Было две независимых цепочки — `lampac/scripts/gen_watchlist.py` (878 строк, свой матчер
TMDB, не знал про `resolve` и его маркеры) и `sync_down.py` (arr-путь). Теперь **один
модуль**: `sync-down` резолвит через `resolver.resolve()` и пишет фид Lampa
(`wwwroot/watchlist.json`, `watchlist-<cat>.json`, `cards/`, `cards.json`, `missing.json`).
`arr.py` **удалён** (`git rm`, коммит `a524f5d`), ⬇️ больше не ставится нигде.
Детали, три открытия при переносе (фильтры рейтинга/ужасов в фиде НЕ нужны;
❓ не исключает позицию из фида; спорные позиции надо брать из `all_candidates`) и
открытые пункты — [[personal/plans/lampac-watchlist-plugin]] § «ПЕРЕПИСЫВАНИЕ».
### ✅ 2026-09-24 (вечер): контент удалён — Radarr/Sonarr пустые
+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.