diff --git a/personal/plans/lampac-watchlist-plugin.md b/personal/plans/lampac-watchlist-plugin.md index 3df81b61..026b3602 100644 --- a/personal/plans/lampac-watchlist-plugin.md +++ b/personal/plans/lampac-watchlist-plugin.md @@ -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`) | ⏳ |