[2026-09-22] eagle: personal/plans/lampac-watchlist-plugin.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-22 17:03:10 +06:00
1 parent d1f17eca39
commit 757501cebe
1 file changed
+44 -7
+44 -7
View File
@@ -68,7 +68,46 @@ updated: '2026-09-22'
> Залито, отдаётся в сборке `/catalog.js` (35566 Б). **Ожидает приёмки в UI.**
> Механика — [[personal/tech/lampac-deployment]] раздел «Внедрение секций Watchlist в CUB-фид».
>
> **Обновление 2026-09-22 (шестая сессия): 🔴🔴 ПРИЧИНА «В CUB НИХУЯ НЕ ПОМЕНЯЛОСЬ» — `Manifest` НЕДОСТУПЕН В ОБЁРТКЕ.**
> **Обновление 2026-09-22 (ВОСЬМАЯ СЕССИЯ): ✅✅ ЭТАП «СЕКЦИИ ВНУТРИ CUB» ЗАКРЫТ — ФИД СМЕРЖИЛСЯ.**
> Alex: «Отлично, фид смержился. Закрываем этот этап в плане.»
>
> **Корень, который держал этап** (нашёл только по коду `app.min.js` @1292588):
> ```js
> function partNext(parts, parts_limit, partLoaded, partEmpty) {
> var pieces = parts.filter(function (p) {
> return typeof p == 'function';
> }).slice(0, 0 + parts_limit); // ← limit = 6, ЖЁСТКИЙ СРЕЗ ГОЛОВЫ
> ```
> `cub.main$1` кладёт в `parts_data` **28 родных секций** и вызывает `partNext(parts, 6, …)`.
> Наш инжект делал `parts.push()` → секции уходили в **хвост** (позиции 29–32) → `slice(0, 6)`
> их отрезал. Трасса пула на живом ТВ: `before: 28 → after: 32`, в DOM — **ни одной** нашей секции.
>
> **ФИКС: `parts.unshift()` вместо `parts.push()`** — в голову пула, в срез, рисуются СВЕРХУ
> (ровно требование Alex). Порядок меню обходится **в обратном порядке**, потому что каждый
> `unshift` сдвигает предыдущие вправо.
>
> **Ложный след, потративший время:** тест `g: {wlSection: "undefined", …}` читался как
> «функции недоступны из замыкания». На самом деле инжект **внутри** замыкания плагина и
> `wlSection` виден перехватчику — проба смотрела снаружи. Доказательство: прямой вызов
> `partNext(empty,…)` дал `len: 4`. **Проверять пул ТРАССОЙ (`before/after`), а не наличием
> функций на `window`.**
>
> **Приёмка (серверная часть): 18/18.** `/catalog.js` 33550 Б с `unshift`; `/catalog` →
> ключ `watchlist`, menu 4 категории; список: new 33/30 постеров, films 360/308/312 ID,
> cartoons 3/3, anime 7/7; карточка `tmdb_id: 424781` числом; регресс-тест `plugin=Мой список`
> → **400** (кириллица по-прежнему не проходит).
>
> **Артефакты:** `build_plugin.py` (+инварианты `wlInject def`, `unshift (не push)`,
> `push в INJECT (должно 0)`), `verify_unshift.py` (проверка фикса в рантайме БЕЗ деплоя),
> `full_check.py` (полный цикл сервер+ТВ), `tv_accept.py`, `diag_trace.py`, `diag_calls.py`.
> Бэкапы: `plugin.js.bak-20260922-165613` (последний рабочий), `plugin-cub.js.bak-*`.
>
> 🔴 **Питфолл рантайм-проверки:** повторная загрузка `/catalog.js` скрипт-тегом НЕ перезапускает
> `startPlugin` (флаг `window.plugin_catalog` уже стоит) → `patched: false`. Для быстрой итерации
> без деплоя оборачивать `Lampa.Api.partNext` вручную с `unshift` (`verify_unshift.py`).
> `location.reload()` на webOS догружает новый `catalog.js` **дольше 30 с** — ждать до 120 с.
> **Обновление 2026-09-22 (седьмая сессия): 🔴🔴 ПРИЧИНА «В CUB НИХУЯ НЕ ПОМЕНЯЛОСЬ» — `Manifest` НЕДОСТУПЕН В ОБЁРТКЕ.**
> Alex: «Ты вообще нихуя не поменял!!». Проверка через **CDP-пробу на живом ТВ** подтвердила
> его правоту: обёртка `Api.sources.cub.main` стояла (`__wl_injected: true`), но вызов
> `cub.main({})` возвращал **4 родные секции** и **ни одной нашей**.
@@ -91,11 +130,9 @@ updated: '2026-09-22'
> заливку и выглядел как «патч не применяется» → `docker restart lampac`).
>
> **Осталось (2026-09-22, конец СЕДЬМОЙ сессии):**
> 0. 🔴 **ЗАЛИТЬ `plugin-cub.js` НА КРА́КЕН + ПЕРЕЗАПУСТИТЬ LAMPA НА ТВ.** Механизм
> (`partNext`) **проверен на живом ТВ через CDP** — секции рендерятся в DOM главной CUB
> (подробности + список probe-скриптов — раздел «СЕДЬМАЯ СЕССИЯ»). Команда деплоя ждёт
> апрува: `scp plugin-cub.js kraken:.../catalog/plugin.js` → `docker restart lampac` →
> `sh /tmp/tv_restart.sh` → `python3 probe_ui.py`.
> 0. ✅ **ЗАКРЫТО 2026-09-22 (восьмая сессия):** `plugin-cub.js` залит на Кра́кен,
> фикс `unshift` вместо `push` — **фид смержился**, секции Watchlist рисуются
> внутри главной CUB рядом с родными. См. блок «ВОСЬМАЯ СЕССИЯ» выше.
> 1. **5 фильмов с Кинопоиск-ID** (`film/NNNNN/`) — «Рассекая волны: экспедиция „Лас Бальсас“»,
> «Хамнет», «Эхопраксия», «Цена вершины», «Астрал. Могильный ритуал 2», «О добре и зле»,
> WeWork (2024).
@@ -749,7 +786,7 @@ Cron: `30 2 * * *` → лог `~/logs/watchlist-catalog.log`.
| # | Шаг | Статус |
|---|---|---|
| 1 | Генератор берёт данные **из Radarr API** (`localhost:7878/api/v3/movie`), а не парсит текст | ⏳ ждёт апрува |
| 1 | Генератор берёт данные **из Radarr API** (`localhost:7878/api/v3/movie`), а не парсит текст | ✅ сделано (9 из Radarr) |
| 2 | Подставлять в `id` → `tmdbId`, в `img` → `images[].remoteUrl` (постер), `year` → `year` | ⏳ |
| 3 | ~~Из `sites/watchlist.yaml` убрать блок `menu`, оставить `main`~~ ❌ **НЕВОЗМОЖНО** — `main` в YAML ломает парсинг, `menu` обязателен. Подмену делает `plugin.js`. См. «🔴 ПИТФОЛЛ YAML» | ❌ опровергнуто |
| 4 | Постеры кэшировать локально (Radarr `MediaCover/` или проксировать через `tmdbproxy`) | ⏳ |