[2026-09-21] eagle: family/how-to/arr-stack-kraken.md family/plans/watchlist-cleanup.md family/plans/watchlist-disk-overflow-fix.md family/projects/watchlist-automation.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-21 15:03:24 +06:00
1 parent c16cf199ce
commit 313df3409d
4 files changed
+309 -10

No files matched your search

+8 -1
View File
@@ -599,9 +599,16 @@ GET /Users/{uid}/Items?IsPlayed=true&IncludeItemTypes=Movie&Fields=DatePlayed,Pa
- 46 фильмов в базе, **28 с файлами** (на 2026-09-20 было 18 — библиотека растёт, диск заполняется).
- Топ по размеру: Babylon 98.8 GB, Schindler's List 95.9, Midsommar 91.9, Triangle of Sadness 85.6, Chaos Walking 62.7, Unhinged 60.9.
- 🔴 **Диск `/dev/sda1` ЗАПОЛНЕН 100% (0 байт свободно), 2026-09-21.** Ранее (2026-09-21 утром) было 94.7%, `df` показывал 100%. **Radarr лежит с `disk I/O error`** — SQLite не может писать при нуле места:
```bash
curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY"
# → {"message":"disk I/O error","description":"...SQLiteException (0x87AF045D): disk I/O error..."}
```
⚠️ **API Radarr не читается, пока диск не освобождён** — не искать причину в конфиге/сети, сначала проверить место.
**Причина заполнения:** `sync-down --batch 5` качал 5 фильмов ежедневно без проверки свободного места. `watchlist-nightly` и `watchlist-discover` **остановлены** 2026-09-21 (см. [[family/projects/watchlist-automation]]).
**Виновники по объёму — 5 remux-файлов = 403.4 ГБ:** Babylon 92.0, Schindler's List 89.4, Midsommar 85.6, Triangle of Sadness 79.7, Unhinged 56.7 ГБ. Остальные 22 файла (WEB-DL/BDRip, 4–29 ГБ) — не remux, не трогать.
- `recycleBin: ''` — **корзины нет, и настраивать её решено НЕ будет** (2026-09-21). `PUT config/mediamanagement` с путём хоста даёт `400 FolderWritableValidator: not writable by user 'abc'`: внутри контейнера Radarr медиа замаплено как `/media`, хостового пути `/srv/...6194539b.../media/.recyclebin` там не существует. Обходить маппингом ради корзины признано нецелесообразным — удаление идёт через Radarr API, а не `rm`. `recycleBinCleanupDays: 7`, `deleteEmptyFolders: False`.
- **Все monitored=True.** Если удалить файл, не сняв monitored, Radarr скачает заново — поэтому `cleanup` делает `PUT monitored=false` **до** `DELETE` (порядок критичен).
- 🔴 **Диск `/dev/sda1` заполнен на 94.7%** (4.8 ГБ свободно, `df` показывает 100%). Порог авто-удаления (90%) пройден, cron `watchlist-cleanup` работает ежедневно в 02:00 — но удалять пока нечего, см. ниже.
Проверка одним вызовом:
```bash
+35 -2
View File
@@ -1,8 +1,8 @@
# План: авто-удаление просмотренного (watchlist cleanup)
**Дата:** 2026-09-20 (обновлено 2026-09-21)
**Статус:** ✅ РЕАЛИЗОВАНО И В КРОНЕ. Корзина закрыта (без неё). Ждёт `[x]` на Radarr-фильмах
**Связано:** [[watchlist-automation]], [[arr-stack-kraken]]
**Статус:** ✅ РЕАЛИЗОВАНО И В КРОНЕ. Корзина закрыта (без неё). ⚠️ **Бесполезен сейчас: диск 100%, пересечение `[x]` ∩ Radarr = 0. Блокер — заполнение диска, см. [[family/plans/watchlist-disk-overflow-fix]]**
**Связано:** [[watchlist-automation]], [[arr-stack-kraken]], [[watchlist-disk-overflow-fix]]
---
@@ -133,6 +133,39 @@ return used / total * 100.0
```
С веткой `--apply` при пороге 80: после прогона **18 файлов / 702 ГБ не тронуты** — удалять было нечего.
## 🔴🔴 2026-09-21 (вечер): ДИСК 100%, Radarr ЛЁГ — cleanup НИ ПРИ ЧЁМ
**Alex поправил ошибочный вывод:** cleanup **не мог занять место** — он только удаляет. Это очевидно,
и первая версия разбора зря указывала на него.
**Настоящая причина заполнения — `sync-down`:** крон `watchlist-nightly` (01:00) добавлял
**5 фильмов ежедневно** (`--batch 5`) **без проверки свободного места**. Radarr качал, пока диск не кончился.
**Состояние:**
```
df -h → /dev/sda1 1.8T 1.7T 0 100% ← 0 байт свободно
Radarr API → {"message": "disk I/O error", ...SQLiteException...}
```
SQLite не может писать при нуле места → **API Radarr не читается**, метаданные недоступны.
**Виновники по объёму — 5 remux = 403.4 ГБ** (Babylon 92.0 / Schindler's List 89.4 / Midsommar 85.6 /
Triangle of Sadness 79.7 / Unhinged 56.7). Остальные 22 файла — не remux (WEB-DL/BDRip), крупные,
но кодированные.
**Сделано:** крон `watchlist-nightly` + `watchlist-discover` **остановлен** (бэкап `~/crontab-backup-20260921.txt`).
`watchlist-cleanup` (02:00) **оставлен активным** — он безвреден.
**Ожидает апрува:** удаление 5 remux-файлов + снятие `⬇️` у Неистового.
Полный план ремонта — [[family/plans/watchlist-disk-overflow-fix]].
### Что это меняет для cleanup
**Ничего в механике — но он по-прежнему бесполезен.** Пересечение `[x]` ∩ Radarr = 0,
и он не покрывает `/media/movies`. Порог 90% он видит, но удалять ему нечего.
Разбираться **после** того, как освободят место и поставят стоп-кран в `sync-down`.
---
## 🔴 ЗАМЕР 2026-09-21: порог ПРОЙДЕН, а удалять нечего
```
+165
View File
@@ -0,0 +1,165 @@
---
title: План — переполнение диска Kraken (watchlist pipeline)
created: '2026-09-21'
updated: '2026-09-21'
type: plan
namespace: family
status: in-progress
tags:
- kraken
- watchlist
- disk
- radarr
- incident
related:
- '[[family/projects/watchlist-automation]]'
- '[[family/plans/watchlist-cleanup]]'
- '[[family/how-to/arr-stack-kraken]]'
---
# План: переполнение диска Kraken — причины и ремонт
> **Инцидент 2026-09-21.** Диск `/dev/sda1` на Кра́кене (1.8 ТБ) заполнен до **нуля байт**.
> Radarr лежит с `disk I/O error`. `watchlist-nightly` и `watchlist-discover` остановлены.
> Причина: `sync-down --batch 5` качал 5 фильмов ежедневно **без проверки свободного места**.
---
## Статус: Фаза 0 ожидает апрува Alex
| Фаза | Что | Статус |
|---|---|---|
| 0 | Освободить место (удалить 5 remux = 403.4 ГБ) | 🔴 **ЖДЁТ АПРУВА** |
| 0b | Снять `⬇️` у Неистового в watchlist | ⏸ после Фазы 0 |
| 1 | `MIN_FREE_GB` в скрипт (стоп-кран) | ⏸ |
| 2 | Лимит размера файла | ❌ **НЕ ДЕЛАЕМ** — Alex: «лимит качества и так настроен» |
| 3 | Починить `cleanup` (видит только Radarr) | ⏸ отдельно |
| 4 | Вернуть крон с меньшим `--batch` | ⏸ после Фазы 1 |
**Сделано 2026-09-21:** крон `watchlist-nightly` + `watchlist-discover` остановлен.
Бэкап crontab: `~/crontab-backup-20260921.txt`.
---
## Фаза 0 — Освободить место (БЛОКЕР)
### Что удалять: 5 remux-файлов, 403.4 ГБ
Замер `find -printf` по `/media/movies-radarr` — 27 видеофайлов, **remux'ов ровно 5**:
```
92.0 GB /media/movies-radarr/Babylon (2022)/Babylon (2022) - UHD BD-Remux by Wild_Cat.mkv
89.4 GB /media/movies-radarr/Schindler's List (1993)/Schindler's.List.1993.2160p.HDR.BDRemux.mkv
85.6 GB /media/movies-radarr/Midsommar (2019)/Midsommar.2019.DC.BDREMUX.2160p.HDR.seleZen.mkv
79.7 GB /media/movies-radarr/Triangle of Sadness (2022)/Triangle.of.Sadness.2022.BDREMUX.2160p.HDR.seleZen.mkv
56.7 GB /media/movies-radarr/Unhinged (2020)/Неистовый.2020.UHD.Blu-Ray.Remux.2160p.mkv
```
Полный префикс пути: `/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f`.
### ⚠️ Что НЕ трогать
**22 остальных файла — не remux** (WEB-DL / BDRip / x264 / x265, 4–29 ГБ). Размер не признак:
| Файл | Размер | Тип |
|---|---|---|
| `Oldboy (2003)/Oldeuboi [2003].mkv` | 28.6 GB | не remux |
| `Project.Hail.Mary...2160p.iT.WEB-DL.DV.HDR.H.265.mkv` | 28.1 GB | не remux (WEB-DL) |
| `Whiplash (2014)/Одержимость (Whiplash) 2014.mkv` | 23.7 GB | не remux |
**Признак remux — имя файла:** `Remux` / `BDREMUX` / `BDRemux` / `BD-Remux`.
### 🔴 Метки `⬇️` в watchlist — есть только у одного из пяти
`family/documents/movies-watchlist.md`:
| Фильм | Строка | Метка |
|---|---|---|
| Неистовый (Unhinged) | 107: `- [x] ⬇️ Неистовый` | ✅ |
| Babylon (2022) | 83: `- [ ] Babylon (2022)` | ❌ |
| Midsommar | 81: `- [ ] 🧟‍♀️ midsommar 2019` | ❌ |
| Triangle of Sadness | 82: `- [ ] Triangle of Sadness 2022` | ❌ |
| Schindler's List | — | **отсутствует в файле** |
`sync-down` ставит `⬇️` только на то, что добавил сам. Эти четыре попали в Radarr иначе.
**Решение Alex:** снять `⬇️` (там, где есть). `[x]` у Неистового **не трогать** — это отметка просмотра.
### Почему удаляем файлами, а не через Radarr API
Radarr **не отвечает** — диск в нуле, SQLite не может писать:
```json
{"message": "disk I/O error",
"description": "...System.Data.SQLite.SQLiteException (0x87AF045D): disk I/O error..."}
```
После освобождения места Radarr сам пересканирует и увидит `hasFile=false`.
---
## Фаза 1 — Стоп-кран `MIN_FREE_GB` (главный фикс)
**Цель:** перед добавлением фильма в Radarr проверить свободное место. Если мало — не добавлять.
**Где:** `watchlist_sync/sync_down.py` (или `cli.py` — уточнить по коду перед правкой).
```python
# Minimum free space on the media disk before queueing new downloads.
# Prevents filling the disk to zero (incident 2026-09-21).
MIN_FREE_GB = 100 # ← значение согласовать с Alex
```
Проверка **перед** циклом добавления:
```python
st = os.statvfs(MEDIA_PATH) # НЕ shutil.disk_usage("/media")!
free_gb = (st.f_bfree * st.f_frsize) / (1024**3)
if free_gb < MIN_FREE_GB:
print(f"only {free_gb:.1f} GB free (< {MIN_FREE_GB} GB) — not queueing anything")
return
```
⚠️ **Питфолл:** `/media` — **не медиа-диск**, это пустая папка на SD-карте (`/dev/mmcblk0p2`, 14 ГБ). Реальный диск — `/srv/dev-disk-by-uuid-6194539b-.../`. Брать `os.statvfs` по реальному корню.
⚠️ **`df` завышает** (~+4%, root-резерв ext4). Для порогов использовать `os.statvfs`.
**Порядок работ:** бэкап → правка → dry-run → проверка Alex → коммит.
---
## Фаза 2 — Лимит размера ❌ НЕ ДЕЛАЕМ
Alex 2026-09-21: **«лимит качества и так настроен»**. Профиль `WEB-4K (no remux)` (Radarr/Sonarr id **7**) уже запрещает Remux-1080p/2160p и BR-DISK. Новых лимитов не вводим.
⚠️ Но: профиль **не ограничивает размер** — только тип релиза. Все 5 виновников качались под профилем `Any` (id 1) **до фикса 2026-09-04**. Существующие файлы под новый профиль не подпадают.
---
## Фаза 3 — Починить `cleanup` (отдельно, осторожно)
**Дефект:** cleanup сопоставляет `[x]` из watchlist с **Radarr-библиотекой**, а просмотренное лежит в `/media/movies` (ручные торренты). Пересечение = 0 → удаляет 0 файлов.
**Замер 2026-09-21:** `watchlist [x] items: 177` / `radarr movies with file: 28` / `nothing to delete`.
**Это не причина инцидента** — cleanup не мог занять место, он только удаляет. Расширять его — отдельная задача, идёт после Фаз 0–1.
---
## Фаза 4 — Вернуть крон
После того как Фаза 1 проверена и стоп-кран работает:
- вернуть строки `watchlist-nightly` (01:00) и `watchlist-discover` (вс 09:00) в crontab;
- **снизить `--batch`** (сейчас 5) — 5 фильмов/сутки без учёта размера и есть корень инцидента.
---
## Уроки
1. **Любой скрипт, ставящий закачки в очередь, ОБЯЗАН проверять свободное место до добавления.** Лимита качества недостаточно — он про тип релиза, не про размер.
2. **«Radarr молчит / I/O error» на заполненном диске — сначала проверить место**, потом конфиг и сеть.
3. **Крон в 01:00 без присмотра = диск заполняется незаметно.** Тревога при >порога не настроена: cleanup писал «nothing to delete» и молчал.
4. **Не выдавать догадки за факт.** Первая версия разбора указывала на `cleanup` как виновника — Alex поправил: cleanup удаляет, а не занимает. Виновник — `sync-down`.
---
## Связанные заметки
- [[family/projects/watchlist-automation]] — полный pipeline, статус крона
- [[family/plans/watchlist-cleanup]] — механизм cleanup (порог 90%, лимит 10)
- [[family/how-to/arr-stack-kraken]] — *arr стек, профили качества, API
+101 -7
View File
@@ -475,15 +475,105 @@ Sonarr API base: http://localhost:8989/sonarr/api/v3/
```
Проверка закачки: `queue` в Radarr показывает `grabbed/downloading`; `history` даёт точное имя взятого релиза. Transmission — `docker exec transmission transmission-remote --list` (RPC-юзер в `settings.json` пустой).
## 🔴 2026-09-21: ДИСК ЗАПОЛНЕН 100%, КРОН `nightly`/`discover` ОСТАНОВЛЕН
**Причина остановки:** `sync-down --batch 5` (5 фильмов ежедневно) работал **без проверки свободного места**. Диск заполнился до **нуля байт**.
### Признак «сервисы ломаются» — Radarr отдаёт disk I/O error
```bash
curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY"
# → {"message": "disk I/O error\ndisk I/O error",
# "description": "...System.Data.SQLite.SQLiteException (0x87AF045D): disk I/O error..."}
```
SQLite не может писать при нуле свободного места. **Метаданные Radarr через API не читаются, пока диск не освобождён.** Это первое, что надо проверять при «Radarr молчит» на заполненном диске.
### Фактическое заполнение (2026-09-21)
```
df -h → /dev/sda1 1.8T 1.7T 0 100% /srv/dev-disk-by-uuid-6194539b-...
df -h → /dev/mmcblk0p2 14G 4.7G 8.4G 36% / (SD-карта, не медиа-диск)
```
Docker: 29.4.3, Debian 12 bookworm, **arch `aarch64`**, 25 контейнеров, 22 образа.
### Что именно съело место — 5 REMUX-файлов = 403.4 ГБ
Замер `find -printf` по `/media/movies-radarr` (27 видеофайлов). **Настоящих remux'ов ровно 5** — по имени файла (`Remux`/`BDREMUX`/`BDRemux`):
| Размер | Фильм | Файл |
|---|---|---|
| 92.0 GB | Babylon (2022) | `Babylon (2022) - UHD BD-Remux by Wild_Cat.mkv` |
| 89.4 GB | Schindler's List (1993) | `Schindler's.List.1993.2160p.HDR.BDRemux.mkv` |
| 85.6 GB | Midsommar (2019) | `Midsommar.2019.DC.BDREMUX.2160p.HDR.seleZen.mkv` |
| 79.7 GB | Triangle of Sadness (2022) | `Triangle.of.Sadness.2022.BDREMUX.2160p.HDR.seleZen.mkv` |
| 56.7 GB | Unhinged (2020) | `Неистовый.2020.UHD.Blu-Ray.Remux.2160p.mkv` |
| **403.4 GB** | **итого** | |
⚠️ **Остальные 22 файла — НЕ remux** (WEB-DL / BDRip / x264 / x265, 4–29 ГБ). Крупные, но кодированные — не трогать. Например `Oldboy (2003)/Oldeuboi [2003].mkv` 28.6 ГБ и `Project.Hail.Mary...2160p.iT.WEB-DL.DV.HDR.H.265.mkv` 28.1 ГБ — **не remux**, несмотря на размер.
**Корень:** захардкоженный `qualityProfileId: 1` (профиль `Any`) в `arr.py` — починен только 2026-09-04. Всё, что качалось до этого, брало remux'ы по 60–98 ГБ.
### 🔴 Метки `⬇️` на 4 из 5 remux'ов В watchlist НЕТ
Проверено грепом по `family/documents/movies-watchlist.md`:
| Фильм | Строка в watchlist | Метка |
|---|---|---|
| Неистовый (Unhinged) | **107**: `- [x] ⬇️ Неистовый` | ✅ есть (и `[x]`) |
| Babylon (2022) | **83**: `- [ ] Babylon (2022)` | ❌ нет |
| Midsommar | **81**: `- [ ] 🧟♀️ midsommar 2019` | ❌ нет |
| Triangle of Sadness | **82**: `- [ ] Triangle of Sadness 2022` | ❌ нет |
| Schindler's List | **не найден в файле** | ❌ нет |
**Вывод:** `sync-down` помечает `⬇️` только то, что добавил сам. Эти 4 попали в Radarr другим путём (вручную / до появления меток). Снимать метку не с чего — кроме Неистового.
### Порядок работ, согласованный с Alex
1. **Удалить 5 remux-файлов** (403.4 ГБ) → диск оживает → Radarr API заработает.
2. **Снять `⬇️` у Неистового** (строка 107). `[x]` — **не трогать** (это отметка просмотра).
3. **Добавить `MIN_FREE_GB` в скрипт** — стоп-кран перед добавлением в Radarr.
4. ⚠️ Лимит качества Alex считает уже настроенным (`WEB-4K (no remux)`, id 7) — **новый лимит не делаем**.
⚠️ Удаление **напрямую файлами**, не через Radarr API — API лежит на заполненном диске. Radarr пересканирует и увидит `hasFile=false`.
### Остановка крона (сделано 2026-09-21)
```bash
crontab -l > ~/crontab-backup-$(date +%Y%m%d-%H%M%S).txt # бэкап ПЕРЕД
crontab -l | grep -v "watchlist-nightly\|watchlist-discover" > /tmp/crontab-new.txt
crontab /tmp/crontab-new.txt
crontab -l | grep -c "watchlist-nightly\|watchlist-discover" # → 0 (проверка)
```
Бэкап: `~/crontab-backup-20260921.txt`.
**Осталось в кроне:** `sync-vault` (часовой), 2× `pgs-to-srt`, `watchlist-cleanup` (02:00).
**Убрано:** `watchlist-nightly` (01:00), `watchlist-discover` (вс 09:00).
### 🔴 Незакрытые дефекты скрипта (моя ответственность)
| # | Дефект | Следствие |
|---|---|---|
| 1 | Нет проверки свободного места перед `sync-down` | Radarr качает, пока диск не кончится |
| 2 | Нет лимита размера файла | Один фильм = 60–100 ГБ |
| 3 | Нет стоп-крана при заполнении > порога | Нет автоматической остановки |
| 4 | `cleanup` не видит `/media/movies` | Просмотренное не удаляется, диск не освобождается |
**План ремонта (согласован):** сначала Фаза 1 — `MIN_FREE_GB` в скрипт (главный фикс), потом возврат крона с меньшим `--batch`. Cleanup — отдельно.
**Правило на будущее:** любой скрипт, ставящий закачки в очередь, ОБЯЗАН проверять свободное место **до** добавления. Лимита качества недостаточно — он ограничивает тип релиза, но не размер.
---
## Cron Jobs (на Кракене, восстановлены 2026-09-20, дополнены 2026-09-21)
Весь watchlist pipeline работает на Кракене (мигрировал с Eagle 2026-05-27). **Крон был мёртв с 2026-06-20 по 2026-09-20, восстановлен** (детали в начале документа).
| Job | Расписание | Скрипт |
|-----|-----------|--------|
| `watchlist-nightly` | ежедн. 01:00 | `~/scripts/watchlist-nightly.sh` |
| `watchlist-cleanup` | ежедн. 02:00 | `~/scripts/watchlist-cleanup.sh --apply` |
| `watchlist-discover` | вс 09:00 | `~/scripts/watchlist-discover.sh` |
> ⚠️ **С 2026-09-21 `watchlist-nightly` и `watchlist-discover` ОСТАНОВЛЕНЫ** (диск 100%, см. секцию выше). Таблица ниже — целевое состояние; фактически активен только `watchlist-cleanup`.
| Job | Расписание | Скрипт | Факт 2026-09-21 |
|-----|-----------|--------|-----------------|
| `watchlist-nightly` | ежедн. 01:00 | `~/scripts/watchlist-nightly.sh` | ⏹ ОСТАНОВЛЕН |
| `watchlist-cleanup` | ежедн. 02:00 | `~/scripts/watchlist-cleanup.sh --apply` | ✅ активен |
| `watchlist-discover` | вс 09:00 | `~/scripts/watchlist-discover.sh` | ⏹ ОСТАНОВЛЕН |
⚠️ Фактический путь — `~/scripts/`, **не** `~/.hermes/scripts/`. Оба скрипта вызывают CLI напрямую через `uv run --project $WS`, без LLM. `uv` лежит в `~/.local/bin/uv`.
@@ -601,8 +691,12 @@ Jellyfin library mapping: Movies → `movies`, Cartoons → `mixed` (movies + ep
- 🟡 **[2026-09-20] Логи крона в `/tmp/`** — теряются при перезагрузке. Перенести в постоянное место (`~/logs/` или на диск), если нужна история прогонов.
- ✅ **[2026-09-21] Удаление просмотренных фильмов при заполнении диска >90% — ЗАКРЫТО И В КРОНЕ.** Обёртка `~/scripts/watchlist-cleanup.sh` (была в `/tmp` — перенесена через `sudo install`, у kraken sudo **без пароля**), cron `0 2 * * * ... --apply`, лог `/home/kraken/logs/watchlist-cleanup.log`. **Корзина Radarr (`recycleBin`) — решено НЕ настраивать** (контейнерный/хостовый пути расходятся; Alex больше не переспрашивать). Обёртка по умолчанию делает **dry-run** — без `--apply` в кроне был бы вечный холостой ход. Полные детали — [[family/plans/watchlist-cleanup]].
⚠️ Питфолл: `/media` — **не медиа-диск**, а пустая папка на SD-карте (`/dev/mmcblk0p2`), отдаёт 33.9%. Реальный диск `/dev/sda1` в `/srv/dev-disk-by-uuid-6194539b-.../`. Использовать `os.statvfs`, не `shutil.disk_usage("/media")`.
- 🔴 **[2026-09-21] ДИСК КРИТИЧЕН: 94.7% / свободно 4.8 ГБ.** Порог 90% пройден, cleanup реально запускается, но **удаляет 0 файлов**: пересечение `[x]` ∩ Radarr-библиотека = **пусто** (177 просмотренных vs 28 фильмов с файлами). Ждёт, пока в watchlist поставят `[x]` на Radarr-фильмы. Топ-кандидаты: Babylon 98.8 ГБ, Schindler's List 95.9, Midsommar 91.9, Triangle of Sadness 85.6.
- 🔴 **[2026-09-21] КОРЕНЬ: `[x]` не проставляется на новые закачки.** `sync-up` (Jellyfin watched → `[x]`) видит только 6 старых фильмов из `/media/movies`, ни одного из `/media/movies-radarr`. Пока это не починено, cleanup бесполезен, а диск будет заполняться. **Главная незакрытая задача всего pipeline.**
- 🔴 **[2026-09-21] ДИСК ЗАПОЛНЕН 100% (0 байт свободно). `nightly` + `discover` ОСТАНОВЛЕНЫ.** Работал `sync-down --batch 5` ежедневно без проверки места. Radarr лёг с `disk I/O error` (SQLite не может писать). Полный разбор — в секции «🔴 2026-09-21: ДИСК ЗАПОЛНЕН 100%» выше. Бэкап crontab: `~/crontab-backup-20260921.txt`.
- 🔴 **[2026-09-21] ЖДЁТ АПРУВА ALEX: удаление 5 remux-файлов = 403.4 ГБ.** Babylon 92.0 / Schindler's List 89.4 / Midsommar 85.6 / Triangle of Sadness 79.7 / Unhinged 56.7 ГБ. Удалять **файлами напрямую** (Radarr API лежит). Затем снять `⬇️` у Неистового (строка 107), `[x]` не трогать. ⚠️ У 4 из 5 метки `⬇️` в watchlist нет; Schindler's List в файле отсутствует вовсе.
- 🔴 **[2026-09-21] ФАЗА 1 РЕМОНТА: добавить `MIN_FREE_GB` в `sync-down`.** Стоп-кран: если свободно < порога — не добавлять в Radarr. **Главный фикс**, без него возврат крона бессмыслен. Лимит качества Alex считает уже настроенным — **новый не делать**.
- 🔴 **[2026-09-21] КОРЕНЬ: `[x]` не проставляется на новые закачки.** `sync-up` (Jellyfin watched → `[x]`) видит только 6 старых фильмов из `/media/movies`, ни одного из `/media/movies-radarr`. Пока это не починено, cleanup бесполезен, а диск будет заполняться.
- 🔴 **[2026-09-21] ДИСК КРИТИЧЕН: 94.7% / свободно 4.8 ГБ (замер до полного заполнения).** Порог 90% пройден, cleanup реально запускается, но **удаляет 0 файлов**: пересечение `[x]` ∩ Radarr-библиотека = **пусто** (177 просмотренных vs 28 фильмов с файлами).
- 🟡 **[2026-09-21] Cleanup не видит `/media/movies`** — смотрит только Radarr-библиотеку, поэтому просмотренное из папки ручных торрентов не удаляется. Расширять — отдельно и осторожно (удаление файлов).
- 🟡 **[2026-09-20] `sync-down` берёт всего 5 за прогон** — при 250 кандидатах разбор очереди займёт ~50 ночей. Рассмотреть увеличение `--batch` (сейчас `--batch 5` в `watchlist-nightly.sh`). Особенно актуально, раз фильтр `<6.0` уже отсеял 18.
- 🟡 **[2026-09-20] Разобрать 5 застрявших закачек в очереди Radarr** со статусом `warning`: `Brokeback Mountain`, `Мортал Комбат 2`, `Sorry to Bother You`, `Город бога`, `День хомячка`. Висят давно, релиз не находится/не качается.
- 🟡 **[2026-09-20] `Oficina do Diabo` / `Мастерская Сатаны` (2025)** — в Radarr, но релиз не найден. Ждёт RSS. Проверить через несколько дней.