[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` на Кра́кене