[2026-09-27] eagle: family/projects/watchlist-automation.md personal/plans/lampac-watched-to-watchlist.md
This commit is contained in:
1 parent
508144236e
commit
a143f8ab2e
2 files changed
+151
-6
No files matched your search
@@ -1,6 +1,6 @@
|
||||
---
|
||||
created: '2026-05-20'
|
||||
updated: '2026-09-24'
|
||||
updated: '2026-09-27'
|
||||
status: active
|
||||
tags:
|
||||
- kraken
|
||||
@@ -30,7 +30,8 @@ timecodes.identity ('movie-674' / '674_movie', строгие формы)
|
||||
→ tmdb_id
|
||||
→ 1) .resolve_cache.json (candidate.tmdb_id → ключ = заголовок .md) — ТОЧНО
|
||||
→ 2) фолбэк: watchlist.json (href → name TMDB-ru / original + год ±1)
|
||||
→ _mark_watched ([x], строка уезжает в блок просмотренных)
|
||||
→ _mark_watched ([x]) — ⚠️ ИСПРАВЛЕНО 2026-09-27: ФАКТИЧЕСКИ вставляется НЕ в блок
|
||||
просмотренных, а «выше первой [x] в файле» — баг, см. ниже «2026-09-27»
|
||||
```
|
||||
|
||||
**Критерий просмотренного:** `deleted=0` И `percent >= 90` (env
|
||||
@@ -38,8 +39,12 @@ timecodes.identity ('movie-674' / '674_movie', строгие формы)
|
||||
(бывает >0 при 18%). Сериалы `tv-*` — скип, этап 2.
|
||||
|
||||
**Ключевые факты:**
|
||||
- БД `TimeCode.sql` — только внутри контейнера lampac (НЕ на volume!),
|
||||
читается копией `docker cp`; `sqlite3` в контейнере нет.
|
||||
- ✅ БД `TimeCode.sql` — **на ХОСТЕ** (bind-mount `./database:/lampac/database`,
|
||||
исправлено 2026-09-24 13:38): `/srv/dev-disk-by-uuid-6194539b-…/lampac/database/TimeCode.sql`,
|
||||
модуль читает напрямую, **`docker cp` больше не нужен**. ⚠️ Раньше было «только
|
||||
внутри контейнера, НЕ на volume» — УСТАРЕЛО. WAL: свежие данные в `-wal`, голый
|
||||
`cp` одного `.sql` = пустая оболочка; читать каталог целиком или `sqlite3 X ".backup Y"`.
|
||||
`sqlite3` в контейнере нет.
|
||||
- `Sync.sql` (bookmarks) и `Sisi.sql` — ПУСТЫЕ: закладки Lampa не
|
||||
синхронизируются на Lampac, TimeCode — единственный канал просмотров.
|
||||
- `timecodes`: UNIQUE(user, identity) — одна строка на юзера+фильм,
|
||||
@@ -74,6 +79,47 @@ bind-mount для `/lampac/database` (риск потери истории пр
|
||||
досмотра фильм пропадает из «Мой список» в Lampa после ночного прогона
|
||||
(каталог 02:30 выкидывает `[x]`).
|
||||
|
||||
## 🔴 2026-09-27: `[x]` НЕ падает вниз списка — баг `_mark_watched` (диагноз)
|
||||
|
||||
**Симптом Alex:** «Почему просмотренные в watchlist типа Даун Хаус или Кокаиновый
|
||||
медведь не падают вниз списка? Да и новинки как будто давно не обновлялись»
|
||||
|
||||
**Корень** — `watchlist_sync/sync_up.py:69`, `_mark_watched`:
|
||||
|
||||
```python
|
||||
insert_at = next((i for i, l in enumerate(lines) if re.match(r'\s*-\s*\[x\]', l)), None)
|
||||
lines.insert(insert_at, raw)
|
||||
```
|
||||
|
||||
`next(...)` = **первая** `[x]`-строка файла. Докстринг обещает `top of the [x] section`,
|
||||
фактически получается `top of file`. Расхождение кода и комментария = баг.
|
||||
|
||||
**Факт из `.md` 27.09:** `- [x] Даун Хаус` — строка **326**, окружена `[ ]`-соседями.
|
||||
Блок просмотренных реально: **421 → 674**. `Кокаиновый медведь` — строка 106,
|
||||
`Проект конец света` — 109. Между ними и блоком ~130 строк со `[ ]`.
|
||||
|
||||
**Аудит:** 178 `[x]`-строк в главных секциях, из них **4** выше блока 421–674 —
|
||||
все четыре пришли от `sync-from-lampac` после 25.09. Остальные 174 уже стояли
|
||||
в блоке, и вставка «выше первой `[x]`» для них работала правильно.
|
||||
|
||||
**Готовый инструмент уже есть:** `parser.py:401 find_main_last_watched(ls)` — её
|
||||
использует только `process_thumbs` (`insert_at = last_watched + 1`). `_mark_watched`
|
||||
её не зовёт. Фикс — ~5 строк, **НЕ применён, ждёт команды Alex**.
|
||||
|
||||
**Каталог Lampa при этом НЕ затронут** — проверено: `watchlist.json` 27.09 01:07,
|
||||
`count: 403` (films 357 / new 32 / cartoons 7 / anime 7), ни одного `[x]` в фиде.
|
||||
Ночной пайплайн отработал полностью, бэкап `TimeCode.sql` за 27.09 в 01:09 создан.
|
||||
|
||||
**Второй симптом — «новинки не обновлялись»:** каталог обновляется каждую ночь,
|
||||
а секция `## Новинки` в `.md` — нет: последний `discover` был **21.09**. Крон стоит
|
||||
(`0 9 * * 0`), но в логе `watchlist-discover.sh` за 27.09 (воскресенье) шага
|
||||
`discover` нет — только `sync-vault` pull и push, причём push на 5 минут раньше pull.
|
||||
|
||||
**`jq`-питфолл фида:** `.channels.films | length` → **2** (ключи `items`/`title`),
|
||||
а не число позиций. Правильно: `.channels.films.items | length` → 357.
|
||||
|
||||
Полный разбор, аудит и план фикса — [[personal/plans/lampac-watched-to-watchlist]] §11.
|
||||
|
||||
## 🔴 2026-09-23: канал «Lampa → `[x]`» найден; фиксы сирот закоммичены
|
||||
|
||||
### Коммит `ffe7974` — закрыт должок по грязному дереву
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
title: Отметка «просмотрено» из Lampa → watchlist.md
|
||||
type: plan
|
||||
status: implemented-threshold-tbd
|
||||
status: implemented-bug-open-markwatched-insert
|
||||
namespace: personal
|
||||
created: 2026-09-23T00:00:00.000Z
|
||||
updated: '2026-09-24T00:00:00.000Z'
|
||||
updated: '2026-09-27T00:00:00.000Z'
|
||||
tags:
|
||||
- lampac
|
||||
- lampa
|
||||
@@ -325,6 +325,105 @@ table`). Голый `cp`/`docker cp` одного `.sql` — НЕ бэкап. Ч
|
||||
|
||||
---
|
||||
|
||||
## 11. 🔴 2026-09-27 — ДИАГНОЗ: `[x]` НЕ падает вниз списка (баг `_mark_watched`)
|
||||
|
||||
> **Симптом Alex:** «Почему просмотренные в watchlist типа Даун Хаус или Кокаиновый
|
||||
> медведь не падают вниз списка? Да и новинки как будто давно не обновлялись»
|
||||
|
||||
### 11.1 Корень: вставка в НАЧАЛО, а не в конец блока просмотренных
|
||||
|
||||
`watchlist_sync/sync_up.py:69` внутри `_mark_watched`:
|
||||
|
||||
```python
|
||||
insert_at = next((i for i, l in enumerate(lines) if re.match(r'\s*-\s*\[x\]', l)), None)
|
||||
lines.insert(insert_at, raw)
|
||||
```
|
||||
|
||||
`next(...)` = **первая** `[x]`-строка файла → вставка идёт **выше** неё.
|
||||
Комментарий докстринга обещает `move to top of [x] section` — фактически `top of file`.
|
||||
Расхождение кода и комментария и есть баг.
|
||||
|
||||
**Факт из файла 27.09:** `- [x] Даун Хаус` — **строка 326**, окружена `[ ]`-соседями
|
||||
(324/325, 327/328) → уехала вверх на одну позицию и застряла. Строки **106** и **109**
|
||||
(`Кокаиновый медведь`, `Проект конец света`) — тот же случай.
|
||||
|
||||
Блок просмотренных реально начинается на **строке 421** (`Бойцовский клуб`) и кончается
|
||||
на **674**. Между позицией строки и блоком — ~130 строк со `[ ]` (11 секций, включая
|
||||
`## Мультфильмы` на 676). Строка при вставке «по одной» эту дистанцию не проходит никогда.
|
||||
|
||||
**Аудит:** 178 `[x]`-строк в главных секциях, из них **4** выше блока 421–674 — все
|
||||
четыре пришли от `sync-from-lampac` после 25.09. Остальные 174 уже стояли в блоке,
|
||||
и вставка «выше первой `[x]`» для них работала правильно.
|
||||
|
||||
### 11.2 Готовый инструмент уже в коде
|
||||
|
||||
Точная функция для правки существует: **`parser.py:401 find_main_last_watched(ls)`** —
|
||||
находит последний `[x]` в главных секциях (исключая `Новинки`/`Новинки👎`). Её использует
|
||||
только `process_thumbs` (`parser.py:420`: `insert_at = last_watched + 1`).
|
||||
`_mark_watched` её не зовёт — отсюда баг.
|
||||
|
||||
**Фикс (НЕ применён, ждёт команды Alex):** ~5 строк в `sync_up.py` — заменить `next(...)`
|
||||
на `parser.find_main_last_watched(lines)` + `insert_at = idx + 1`. Тест: копия `.md`,
|
||||
сверка diff, только потом заливка. Порядок правок штатный: коммит ДО → правка → заливка
|
||||
→ проверка Alex → коммит ПОСЛЕ.
|
||||
|
||||
### 11.3 ⚠️ Расхождение доков и кода: пути БД
|
||||
|
||||
`family/projects/watchlist-automation.md` (раздел 2026-09-24) описывает матч так:
|
||||
|
||||
```
|
||||
→ _mark_watched ([x], строка уезжает в блок просмотренных)
|
||||
```
|
||||
|
||||
и «БД `TimeCode.sql` — только внутри контейнера lampac (НЕ на volume!)».
|
||||
|
||||
**Проверено 27.09 — устарело:** БД живёт **на хосте** по bind-mount'у (исправлено
|
||||
2026-09-24 13:38, см. §10 «FIX ВЫПОЛНЕН»): `/srv/dev-disk-by-uuid-6194539b-…/lampac/database/TimeCode.sql`.
|
||||
Строку про «только в контейнере» в `watchlist-automation.md` надо поправить.
|
||||
|
||||
Строка «строка уезжает в блок просмотренных» **фактом не подтверждается** — см. 11.1.
|
||||
Это то же расхождение, что и баг: док писался по замыслу, а не по коду.
|
||||
|
||||
### 11.4 Второй симптом: «новинки давно не обновлялись» — тут ДВА разных «не обновлялись»
|
||||
|
||||
| Что | Факт 27.09 |
|
||||
|---|---|
|
||||
| **Каталог Lampa** | ✅ обновляется каждую ночь: `watchlist.json` — 27.09 01:07, `count: 403` (films 357 / new 32 / cartoons 7 / anime 7). Бэкап `TimeCode.sql` за 27.09 в 01:09 создан |
|
||||
| **Секция `## Новинки` в `.md`** | 🔴 последний `discover` был **21.09**. Крон стоит (`0 9 * * 0`), но в логе `watchlist-discover.sh` за 27.09 (воскресенье) — только `sync-vault` pull и push, шага `discover` нет |
|
||||
|
||||
**Плюс структурная причина:** `discover` кладёт новинки в `## Новинки - 👍/👎`, а
|
||||
`sync_down.py:70` держит эту секцию в `HIDE_SECTIONS = {"Новинки👎", "Связанные заметки"}`
|
||||
(и `SECTION_TO_CODE` для `"Новинки - 👍/👎"` → `new`, но фильтр `HIDE_SECTIONS` её
|
||||
не отсекает — в канале `new` на 27.09 лежит 32 позиции). То есть новые «новинки»
|
||||
могут появиться в `.md`, но в фид Lampa попадают только после 👍.
|
||||
|
||||
### 11.5 Побочная находка: `push` раньше `pull`
|
||||
|
||||
В логе `watchlist-discover.sh` за 27.09 `sync-vault push` (10:21:08) идёт **на 5 минут
|
||||
раньше** последнего `pull`. По таймингу не совпадает ни с ночным прогоном (01:00),
|
||||
ни с расписанием discover (09:00) — либо ручной прогон, либо повторный запуск.
|
||||
На данные не повлияло, но порядок pull/push в скрипте стоит проверить.
|
||||
|
||||
### 11.6 Что решено / что ждёт
|
||||
|
||||
**Ждёт команды Alex (правки кода не делались):**
|
||||
|
||||
| # | Дефект | Правка |
|
||||
|---|---|---|
|
||||
| 1 | `[x]` вставляется в начало вместо конца блока | `sync_up.py`, ~5 строк, замена на `find_main_last_watched` |
|
||||
| 2 | `discover` не запускался 27.09 | до правки крона — `bash -x` скрипта + его содержимое |
|
||||
| 3 | 4 «застрявшие» `[x]` (106/109/111/326) | вручную нельзя (правило «маркеры только скриптами»). После фикса №1 они съедут сами только при повторном `_mark_watched` для той же строки — для них вызова не будет. Варианты: оставить до следующего синка, либо одноразовый проход `sync-up` по уже-`[x]` строкам (новая функция, отдельный апрув) |
|
||||
|
||||
### 11.7 Питфоллы диагностики этой сессии
|
||||
|
||||
| # | Грабля | Обход |
|
||||
|---|---|---|
|
||||
| 19 | Логи крона в `/tmp/watchlist-nightly.log` **не читаются** — файла нет (см. §8.2, `/tmp` чистится ребутом). Прогон восстанавливается только по mtime артефактов | проверять артефакты: `watchlist.json` mtime, `~/backup/timecode/TimeCode-<дата>.sql`, размер `.md` по коммитам |
|
||||
| 20 | `git log --oneline` показывает только последний коммит дня — «изменений нет» по diff'у с `HEAD` **не значит**, что nightly не работал | сверять **размер `.md` по коммитам** (`git show <c>:path \| wc -c`); ночной прогон виден как бамп 30696 → 30802 |
|
||||
| 21 | `jq '.channels.films \| length'` даёт **2** (ключи `items`/`title`), а не число позиций | `.channels.films.items \| length` → 357 |
|
||||
|
||||
---
|
||||
|
||||
## 3. Шаги
|
||||
|
||||
1. **Бэкап.** `TimeCode.sql` + `movies-watchlist.md` + `watchlist-sync/` в
|
||||
|
||||
Reference in new issue
Block a user