[2026-09-25] eagle: personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-25 22:31:11 +06:00
1 parent 6b00a2986f
commit 4af9230519
2 files changed
+82 -16

No files matched your search

+55 -16
View File
@@ -8,7 +8,7 @@ related:
- '[[family/projects/watchlist-automation]]'
- '[[family/documents/movies-watchlist]]'
- '[[personal/plans/lampac-watched-to-watchlist]]'
status: main-screen-filter-WORKS-2026-09-25-accepted-latency-prefetch-pending
status: main-screen-filter-WORKS-2026-09-25-accepted-committed-5e55a47-prefetch-pending
tags:
- lampac
- lampa
@@ -281,14 +281,18 @@ node --check plugin-cub.js → SYNTAX OK
Бэкап: `catalog/plugin.js.bak-before-fixurl-<ts>`. Залито → 20934 Б,
`docker exec lampac grep -n "function wlUrl" -A4 /lampac/module/Catalog/plugin.js` → на месте.
**⚠️ НА МОМЕНТ ЗАПИСИ ФИКС НЕ ПРИЁМКОВАН.** Замер после заливки: `url = ""`
на ОБОИХ уровнях, `hasCats = false`, `menu = 0`. То есть Lampa стоит на главной давно
(URL страницы `component=main&source=cub`), но `Activity.active().url` пуст — это НЕ
стадия инициализации. Пока `/catalog` не отвечает, `__wl_menu` пуст и секции взять
неоткуда: **перезапуск Lampa без починенного `/catalog` ничего не даст.**
**⚠️ ПЕРВЫЙ ЗАМЕР ПОСЛЕ ЗАЛИВКИ — приёмка на нём НЕ пройдена** (оставлено как
история): `url = ""` на ОБОИХ уровнях, `hasCats = false`, `menu = 0`. Alex на это
ответил: «Ты заебал. Ты блядь задачу решаешь или мозг мне ебешь?! Я жду от тебя:
готово, проверяй.» — **правильный ответ на такой сигнал: доделать и доложить,
не задавать вопросов.** Ниже выяснилось, что пустой `url` был замером в момент
загрузки, а не поломкой; приёмка пройдена после полной инициализации Lampa.
**Следующий шаг (обязательный, не сделан):** проверить боевой запрос Lampa → Lampac
`/catalog` — отвечает ли он с ТВ, отвечает ли с Кра́кена, не сломан ли он вообще.
**Следующий шаг был:** проверить боевой запрос Lampa → Lampac `/catalog`. ✅ Выполнено —
`/catalog` жив с обеих сторон: с Кра́кена `http=200 size=21470 t=0.44s` (холодный),
по LAN с Mac `http=200 size=21470 t=0.01s`, тело содержит корректный
`watchlist.menu` = `{Новинки, Фильмы, Мультфильмы, Аниме}`. **Бэкенд был исправен —
проблема была только в гонке замера.**
### ✅ ИТОГ 2026-09-25: ПРИЁМКА ПРОЙДЕНА
@@ -364,6 +368,37 @@ Alex: «Коммить и переходим к предзагрузке». Пр
`plugin-cub.js` под git — тогда правка плагина поедет вместе с проектом и попадёт
в историю. Второе правильнее, но это новая сущность в репе → спрашивать один раз.
#### ✅ ЗАКОММИЧЕНО 2026-09-25 — репозиторий найден, «некуда коммитить» СНЯТО
Alex уточнил: «Проект на маке в developer это в доке записано. Ведь так?!» — и был прав.
🔴 **Живое место исходников плагина — `~/Developer/lampac-scripts/` (ПОД GIT), Gitea
`git_admin/lampac-scripts`.** Ранее в доке везде значился `/Users/admin/lampac-tmp/` —
это скрэтч-папка сессии 2026-09-22, **вне git** (50+ одноразовых пробников).
Именно поэтому первый заход дал «коммитить некуда»: искал в `lampac-tmp` и в `lampac/`
на Кра́кене, а репа — `lampac-scripts`. Правило из дока («скрипт, который зовёт крон на
боевой машине, обязан быть в репозитории») действовало и на плагин.
```bash
cd ~/Developer/lampac-scripts
cp .../build_plugin.py scripts/build_plugin.py
cp .../plugin-cub.js scripts/plugin-cub.js
git add scripts/build_plugin.py scripts/plugin-cub.js
git commit -m "watchlist plugin: секции CUB только на главной экране"
git push origin main
```
**Коммит `5e55a47`** — «watchlist plugin: секции CUB только на главной экране»,
2 files changed, 526 insertions(+). Запушено: `53e5803..5e55a47 main -> main` →
`https://git.mallexxx.duckdns.org/git_admin/lampac-scripts.git`.
Репы на Кра́кене (проверено `find`): только `docker/`, `obsidian/`, `watchlist-sync/`.
В `lampac/` git НЕТ — боевой `plugin.js` версионируется только через репу
`lampac-scripts` (файл кладётся в неё и оттуда заливается `scp`).
⚠️ Бэкапы боевого файла (`plugin.js.bak-*`) закрыты `.gitignore` репы (`*.bak*`) —
в git не попадают, остаются локальной страховкой рядом с файлом.
#### ⚠️ Замер «плагин не загрузился» — это была гонка, а не поломка
Сразу после `luna-send`-перезапуска проба дала:
@@ -408,18 +443,22 @@ cats = NOMANIFEST
### Открытые шаги (для следующей сессии)
1. ✅ **ПРИЁМКА ПРОЙДЕНА 2026-09-25** — фильтр `wlOnMain()` работает, фид виден только
на главной. Осталась латентность, см. п.2.
2. 🔄 **ПРЕДЗАГРУЗКА `__wl_menu`** (согласовано Alex: «Коммить и переходим к предзагрузке»).
Корень отставания — асинхронный `/catalog` в `loadCatalogs()`: меню приходит ПОСЛЕ
первого `partNext`. Решение: подтягивать `menu` синхронно в `startPlugin()`,
параллельно с `loadCatalogs()`, чтобы `wlInject` срабатывал в первом раунде среза.
Правка идёт в те же два файла (`plugin-cub.js` + `INJECT` в `build_plugin.py`).
на главной. Доказательство: на экране `movie` секций в DOM нет при заполненном `menu`.
2. 🔄 **ПРЕДЗАГРУЗКА `__wl_menu`** — единственный незакрытый пункт этой задачи,
выполняется сразу после коммита `5e55a47`. Корень отставания — асинхронный `/catalog`
в `loadCatalogs()`: меню приходит ПОСЛЕ первого `partNext`. Решение: подтягивать
`menu` синхронно в `startPlugin()`, параллельно с `loadCatalogs()`, чтобы `wlInject`
срабатывал в первом раунде среза. Правка идёт в те же два файла в репе
(`lampac-scripts/scripts/plugin-cub.js` + `INJECT` в `build_plugin.py`) + новый
инвариант сборщика. Порядок деплоя — как обычно: сборка → `node --check` → бэкап →
`scp` → рестарт Lampa на ТВ → замер CDP.
3. **Диагностировать 66 с на карточке** — `docker logs lampac` + трейс `CardController`.
Запрос: `GET /catalog/card?plugin=watchlist&uri=movie%2F424781&type=movie`
→ 66 118 мс, 939 Б.
4. **Matcher-parity** (главный блокер с 2026-09-24, см. ниже) — всё ещё не закрыт.
5. **Решение по версионированию плагина** — `lampac_plugin/` в репе `watchlist-sync`
или оставить бэкапы + `build_plugin.py` (см. «Коммитить НЕКУДА»).
5. ✅ **Версионирование плагина — РЕШЕНО:** `lampac-scripts/scripts/`, коммит `5e55a47`.
Развилка «`lampac_plugin/` в `watchlist-sync` vs бэкапы» **закрыта**: плагин
принадлежит `lampac-scripts` (там же `gen_watchlist.py`, `deploy_lampac.py`).
**Правило диагностики этой сессии:** не читать `%{size_download}` как «размер фида»
(это gzip) — брать `ls -la` или `Accept-Encoding: identity`. И — `ifconfig` на Кра́кене
+27
View File
@@ -136,6 +136,28 @@ curl -s "http://192.168.1.70:9998/json/list" | jq -r '.[] | select(.title=="Lamp
рестарта приложения либо подтверждать состояние пробами.
- 🔴 `URL страницы ТВ — надёжный индикатор экрана`: `...index.html?title=Главная%20-%20CUB
&component=main&source=cub` = главная CUB.
- 🔴🔴 **НЕ ВЕРИТЬ ПЕРВОМУ ЗАМЕРУ ПОСЛЕ РЕСТАРТА LAMPA.** Сразу после `luna-send`
проба даёт `ready=false, plugin=false, patch=false, act_url=ERR, cats=NOMANIFEST` —
выглядит как «плагин вообще не доехал» (`window.plugin_catalog` ставит сам
`startPlugin()`). **Это гонка, а не поломка:** через несколько секунд те же пробы
дают `ready=true, plugin=true, patch=true`. При загрузке CDP-цель имеет `title=""`
и `url=about:blank`.
**Правило:** искать цель по подстроке `url` = `com.lampac.tv`, а НЕ по
`title == "Lampac"` (в момент загрузки `title` пустой, и скрипт молча не находит
цель — выглядит как «ТВ недоступен»). Опрашивать `ready`, пока не станет `true`.
🔴 **И не спать вслепую:** Alex на `sleep 20` без проверки отреагировал резко
(«Чё нахуй за слип 20?!»). Опрашивать состояние в цикле, не ждать таймером.
### 🔴 `/catalog` — контрольная проверка бэкенда (норма 2026-09-25)
Прежде чем чинить что-либо в UI, убедиться, что эндпоинт жив:
```bash
ssh kraken 'curl -s -o /dev/null -w "http=%{http_code} size=%{size_download} t=%{time_total}\n" \
http://127.0.0.1:9118/catalog' # → http=200 size=21470 t=0.44s (холодный)
ssh kraken 'curl -s -o /dev/null -w "http=%{http_code}\n" http://192.168.1.14:9118/catalog' # → 200 по LAN
```
Тело содержит `watchlist.menu` = `{Новинки, Фильмы, Мультфильмы, Аниме}`. Если здесь всё
исправно — причина в клиенте (гонка загрузки), а не в бэкенде.
### 🔴 `Manifest.catalogs` пуст = фид вставлять некуда
@@ -145,6 +167,11 @@ curl -s "http://192.168.1.70:9998/json/list" | jq -r '.[] | select(.title=="Lamp
`wl_menu = undefined`, при этом `patch = true`. Диагностировать это ПЕРВЫМ, до
разбора логики фильтра.
⚠️ **`Manifest.catalogs` и `window.__wl_menu` расходятся по времени.** Наблюдалось
`menu = Новинки,Фильмы,Мультфильмы,Аниме` (заполнен) при `cats = NOMANIFEST` (пуст) —
`__wl_menu` пишется в `wlMenu()` отдельным запросом. Не считать пустой `catalogs`
доказательством, что меню нет: смотреть оба поля.
## 🔴 2026-09-24 (вечер): «Мастерская сатаны» — один источник, торренты пусты. План диагностики
**Вопрос Alex:** *«для Мастерская сатаны например в lampac в источниках есть только