Failed to authenticate. API Error: 401 Invalid authentication credentials

[2026-05-18] vault sync
This commit is contained in:
Alexey Martemyanov
2026-05-18 03:09:12 +06:00
parent 36143b783b
commit 1f07327a36
8 changed files with 252 additions and 11 deletions
@@ -0,0 +1,56 @@
---
date: 2026-05-18
status: complete
run: 02:00 cron (second run of the day)
---
# Wiki Curation — 2026-05-18 (02:00)
> Note: A 2026-05-18 state file already existed (status: complete, from ~01:05 AM earlier). This is the scheduled 02:00 cron run — proceeded with full session crystallization pass.
## Done
- **Conflict scan:** No git conflict markers across ~/obsidian/ ✅
- **Previous run:** 2026-05-18 01:05 state complete, 3 pages created earlier — noted, no resume needed
- **Change detection:**
- `media-toolbox-kraken.md` — *arr stack setup section added (2026-05-17 22:50)
- `media-pipeline-tracker-parsers.md` — roadmap Steps A-C actulized (2026-05-17 18:36)
- `htpc-emulators-setup.md` — NES shortcuts + HD packs (2026-05-17 22:24)
- Sessions: 7 sessions covering Hermes Docker deploy, *arr stack, HDD error on Kraken
- **Inbox:** empty ✅
- **Sessions crystallized:** 7/7 checked, all crystallized into wiki updates:
- sessions 000940005825: Hermes Docker deploy pitfalls (`gateway run` vs `gateway`, chown loop, skills path) → `tech/kraken-network.md`
- session 001134: HDD Hardware Error (read-only ext4, recovery procedure) → `tech/kraken-network.md`
- sessions 011803012457: arr stack pitfalls (Pi-hole DNS hijack, curl absent in container) → `tech/kraken-network.md`
- **Pages updated (3):**
- `tech/kraken-network.md` — *arr stack section, HDD error recovery, pitfalls (curl in container, Pi-hole, skills path)
- `tech/media-pipeline-pitfalls.md` — bugs 8/12-15 (KP domain, underscore year, OutputConfig JSON, xvid markers, year-as-title); tracker-parsers Steps A-C; QuerySnapshotGenerator
- `personal-os-architecture.md` — Kraken skills path note + [[concepts/kraken-media-stack]] link
- **Synthesis page created (1):**
- `concepts/kraken-media-stack.md` — cross-synthesis of media-pipeline + *arr stack + Jellyfin + Hermes on Kraken; full architecture diagram, pitfall map, current status (5+ source pages)
- **Stale check:** all pages current ✅
- **Lint:** 26 wiki files; all OK ✅
- **Index:** 22 pages total (+3 from earlier run, +1 this run = 22); last updated 2026-05-18
- **Log:** appended 02:00 entry to wiki/log.md
## Validation fixes
- none
## Unresolved conflicts
(none)
## Unfinished
(none)
## Stats
- Conflicts resolved: 0
- Inbox processed: 0
- Sessions crystallized: 7 / 7 checked
- Synthesis pages created: 1 (concepts/kraken-media-stack)
- Pages updated: 3 (kraken-network, media-pipeline-pitfalls, personal-os-architecture)
- Pages created: 1 (concepts/kraken-media-stack)
- Lint issues: 0
- Validation issues fixed: 0
+1
View File
@@ -40,6 +40,7 @@ relevant to Alex's specific setup.
| `tech/htpc-steam-emulators.md` | HTPC Steam/emulator rules, gamepad config, save paths | personal |
| `concepts/agent-memory-architecture.md` | Three-level memory model for LLM agents; Hermes implementation | work |
| `concepts/vault-strategy.md` | Three vault tasks: enrichment, wiki accumulation, proactive research | work |
| `concepts/kraken-media-stack.md` | Full Kraken media server: media-pipeline + *arr + Jellyfin; pitfalls synthesis | work |
| `entities/library-app.md` | Personal book library UI on TrueNAS (687k books, deployed 2026-05-16) | personal |
## Curation Rules
+80
View File
@@ -0,0 +1,80 @@
---
title: Kraken Media Server — Full Stack
created: '2026-05-18'
updated: '2026-05-18'
type: concept
tags:
- kraken
- media-pipeline
- infra
- synthesis
confidence: high
---
# Kraken Media Server — Full Stack
Синтез: полная карта медиа-стека на Кракене (RPi5). Объединяет [[tech/kraken-network]], [[tech/media-pipeline-pitfalls]], [[tech/htpc-steam-emulators]].
## Архитектурный обзор
Два параллельных конвейера для медиа-контента:
### Конвейер 1 — media-pipeline (Swift, ручной импорт HTPC→Kraken)
```
HTPC (rsync) → /media/{movies,cartoons,series,documentaries}/
→ media-pipeline:kraken (Docker) → scan → resolve → apply
→ /media/library/{movies,cartoons,series}/ (canonical + NFO)
→ Jellyfin
```
- Resolve: TMDb (Tier 1) → KP (Tier 2) → IMDb scrape (Tier 3) → web search (Tier 4)
- Классификация по жанрам провайдера (Animation→cartoons, Documentary→documentaries), никогда по пути
- `unresolved.json` — очередь нераспознанных (13 items на 2026-05-16, все genuine absences)
### Конвейер 2 — *arr stack (новые скачки через Radarr/Sonarr)
```
Prowlarr (RuTracker) → Radarr (7878) / Sonarr (8989)
→ Transmission (9091) → /media/movies-radarr, /media/series-sonarr
→ Jellyfin
```
- Раздельные root folder'ы (`movies-radarr`, `series-sonarr`) — не конфликтуют с media-pipeline library
- Jellyfin читает оба пути для Movies и Series
## Сервисы и порты
| Сервис | Порт | Данные |
|--------|------|--------|
| Jellyfin | 8096 | `/media/library/` + `/media/movies-radarr` + `/media/series-sonarr` |
| Transmission | 9091 | `/media/downloads/complete` |
| Radarr | 7878 | root: `/media/movies-radarr` |
| Sonarr | 8989 | root: `/media/series-sonarr` |
| Prowlarr | 9696 | индексер: RuTracker |
| media-pipeline | — | Docker run, не compose; config: `~/docker/media-pipeline/` |
| Hermes (Kraken) | — | Docker container, skills: `~/.hermes/skills/` |
## Ключевые питфоллы (пережитые)
1. **HDD read-only под нагрузкой** — rsync + ffmpeg transcode одновременно → Sense Key 0x4, ext4 remount-ro. Фикс: ребут → fsck → `docker compose up -d` (2026-05-18)
2. **`docker save | ssh` зависает** — через WireGuard tunnel. Фикс: `docker save -o /tmp/` + `scp` + `docker load` раздельно
3. **curl отсутствует в Hermes-контейнере** — скиллы с curl-командами не работают из контейнера. Навигация: хостовый Hermes vs container Hermes
4. **Pi-hole DNS hijack** → Sonarr/Radarr 503. Фикс: whitelist или прямые IP
5. **Skills path**: `~/.hermes/skills/` (хост) ≠ `/opt/data/skills/` (контейнер)
6. **KP API domain** переехал на `api.poiskkino.dev` (был `api.kinopoisk.dev`)
7. **providers block в config.json** — если не указан явно, все провайдеры disabled → 213 skipped вместо 278 applied
## Статус (2026-05-18)
- ✅ media-pipeline: 402/402 тестов, 13 unresolved (genuine absences в KP/TMDb)
- ✅ *arr stack: Prowlarr+Radarr+Sonarr+Transmission+Jellyfin — работают
- ✅ Hermes на Кракене: docker container, скиллы `download-media` + `arr-media-stack-setup`
- ⏳ Трекер-парсеры (Steps D-F): audio/non-video scanner, fixture тесты для rutor/nnm-club
- ⏳ Transmission torrent-fix: 271/293 файлов без привязки после pipeline apply
## Агент-доступ
Kraken-Hermes в контейнере (`hermes-kraken`) доступен через Zulip. Скачать медиа:
- Сериал → Sonarr API → Transmission
- Фильм → Radarr API → Transmission
- Только через curl (python3 запрещён в скилле)
+2 -1
View File
@@ -9,7 +9,7 @@ updated: '2026-05-16'
# Wiki Index
Auto-maintained catalog of all pages in `wiki/`. Updated by the daily curation cron.
> Last updated: 2026-05-18 | Total pages: 19
> Last updated: 2026-05-18 | Total pages: 22
## Core Architecture
@@ -34,6 +34,7 @@ Auto-maintained catalog of all pages in `wiki/`. Updated by the daily curation c
- [[concepts/agent-memory-architecture]] — Three-level memory model (episodic/semantic/procedural) for LLM agents; overflow rules; Hermes implementation
- [[concepts/vault-strategy]] — Three distinct vault tasks: enrichment, LLM wiki accumulation, proactive research; topic map principle
- [[concepts/kraken-media-stack]] — Full Kraken media server: media-pipeline (Swift) + *arr stack + Jellyfin; pitfalls synthesis
## Entities
+30 -1
View File
@@ -43,7 +43,36 @@ Activity log for the daily Eagle wiki-curation cron job.
- Page size: all pages under 200 lines ✅
- New pages created: none
## 2026-05-18
## 2026-05-18 (02:00 cron)
- **Conflict scan:** No git conflict markers found across ~/obsidian/ ✅
- **Previous run check:** 2026-05-18 state file exists (status: complete, 3 pages created) — already ran at ~01:05 AM. This is the 02:00 scheduled run; proceeding with full check.
- **Change detection (since 2026-05-17 02:00):**
- `[2026-05-17 22:50]` `family/projects/media-toolbox-kraken.md` — *arr stack setup section added
- `[2026-05-17 22:24]` `family/how-to/htpc-emulators-setup.md` — NES shortcuts + HD packs
- `[2026-05-17 18:36]` `personal/projects/media-pipeline-tracker-parsers.md` — roadmap actulized (Steps A-C done)
- `[2026-05-18 01:05]` Sessions: Hermes Docker deploy + *arr stack setup + HDD Hardware Error on Kraken
- family/documents/*, family/sort/ — operational, no wiki action
- **Inbox:** empty ✅
- **Conflict scan:** No git conflict markers ✅
- **Sessions crystallized (7 sessions, 2026-05-18):**
- session_000940, 001134, 001828, 004113, 005825 — Hermes Docker deploy pitfalls + *arr stack; crystallized into wiki updates ✅
- session_011803 — arr-media-stack-setup: curl absent in container, Pi-hole DNS hijack; crystallized ✅
- session_012457 — arr pitfalls continued; crystallized ✅
- **Pages updated (3):**
- `tech/kraken-network.md` — added *arr stack section, HDD hardware error recovery, pitfalls (Pi-hole DNS, skills path, curl in container); bumped updated to 2026-05-18
- `tech/media-pipeline-pitfalls.md` — added bugs 8/12/13/14/15, tracker-parsers Steps A-C, QuerySnapshotGenerator note; bumped updated to 2026-05-18
- `personal-os-architecture.md` — added Kraken skills path note + link to kraken-media-stack; bumped last_updated to 2026-05-18
- **New pages created (1):**
- `concepts/kraken-media-stack.md` — synthesis: media-pipeline (Swift) + *arr stack + Jellyfin; full architecture, key pitfalls, current status
- **Synthesis page:** ✅ `concepts/kraken-media-stack.md` — co-occurring concepts across 5+ pages (kraken-network, media-pipeline-pitfalls, htpc-steam-emulators, media-toolbox-kraken, arr sessions); no prior synthesis existed
- **Architecture check:** personal-os-architecture.md current ✅ (updated above)
- **Stale check:** all pages current ✅
- **Lint:** 26 wiki files; frontmatter ✅; wikilinks ✅; orphans: none ✅; page sizes: all under 200 lines ✅
- **Index:** Bumped to 22 pages, added concepts/kraken-media-stack; last updated 2026-05-18
- **Validation:** all 5 created/modified files passed validation checks ✅
- **Conflict scan:** No git conflict markers found across all ~/obsidian/ ✅
- **Previous run (2026-05-17):** Status = complete, no Unfinished section — nothing to resume
+7 -4
View File
@@ -1,7 +1,7 @@
---
namespace: work
tags: [system, architecture]
last_updated: 2026-05-16
last_updated: 2026-05-18
confidence: 1.0
---
@@ -140,9 +140,12 @@ Executor runs
| obsidian | `/opt/data/.local/bin/mcpvault /vault` | Vault access (sparse: personal/ + family/). Tavily search enabled. |
**Kraken (RPi5) — Hermes agent (`hermes-kraken` container):**
| Name | Command | Used for |
|------|---------|---------|
| obsidian | `/opt/data/.local/bin/mcpvault /vault` | Vault access (sparse: personal/ + family/). Tavily search enabled. |
|| Name | Command | Used for |
||------|---------|---------||
|| obsidian | `/opt/data/.local/bin/mcpvault /vault` | Vault access (sparse: personal/ + family/). Tavily search enabled. |
Skills on Kraken: `~/.hermes/skills/` (host) — **not** visible to the container at `/opt/data/skills/`. Copy skills there if needed.
Media stack on Kraken: full *arr stack (Prowlarr/Radarr/Sonarr) + Transmission + Jellyfin + media-pipeline. See [[concepts/kraken-media-stack]].
> ⚠️ **Kraken image routing (open issue, 2026-05-14):** Gemini API credits depleted → fallback to OpenRouter models (gpt-oss-120b, minimax-m2) → these lack vision → image inbox messages fail. Desired fix: add `save_to_fs` mode to Hermes `image_routing` (save image locally, pass path to agent instead of bytes). Workaround: top up Gemini API credits on Kraken. Tracked in `personal/projects/personal-os/kraken-obsidian-write-bug.md`.
+42 -1
View File
@@ -1,7 +1,7 @@
---
title: Kraken Network & Infra
created: '2026-05-17'
updated: '2026-05-17'
updated: '2026-05-18'
type: reference
tags:
- kraken
@@ -37,3 +37,44 @@ confidence: high
- Configs: `~/docker/media-pipeline/{config.json,cache/,unresolved.json}`
- Нет docker-compose — только `docker run` напрямую
- Монтировать `unresolved.json` явно: `-v "$(pwd)/unresolved.json:/config/unresolved.json"`
## *arr стек (добавлен 2026-05-17)
Prowlarr / Radarr / Sonarr + Transmission + Jellyfin — полностью настроены через API.
Скилл: `~/.hermes/skills/arr-media-stack-setup/SKILL.md`
| Сервис | Порт | Compose dir |
|--------|------|-------------|
| Transmission | 9091 | `docker/transmission/` |
| Radarr | 7878 | `docker/radarr/` |
| Sonarr | 8989 | `docker/sonarr/` |
| Prowlarr | 9696 | `docker/prowlarr/` |
| Jellyfin | 8096 | `docker/jellyfin/` |
Все контейнеры в `media_net` (external network), кроме Jellyfin (читает диск напрямую).
RuTracker индексер подключён через Prowlarr → fullSync в Radarr/Sonarr.
Скачка медиа-агентом: скилл `download-media` (Radarr/Sonarr API — только `curl + jq`, без python3).
**⚠️ Pitfall: Pi-hole DNS hijack** — при включённом Pi-hole Radarr/Sonarr могут получать 503 на DNS lookup (Pi-hole блокирует трекеры). Решение: whitelist в Pi-hole или прямые IP в настройках индексера.
**⚠️ Pitfall: curl отсутствует в Hermes-контейнере** — агент внутри Docker не может исполнять curl-команды из скилла. Skills path: `~/.hermes/skills/` видна только хостовому Hermes; контейнерный Hermes ищет в `/opt/data/skills/`.
## HDD Hardware Error — поведение при перегрузке
**Симптом (2026-05-18):** При одновременном rsync + Jellyfin transcode + docker overlay → ext4 сбрасывает ошибку Sense Key 0x4 (Hardware Error) → файловая система ремонтирует в read-only (`remount-ro`).
**Признаки:** Docker containers fail with `EIO` (I/O error -5), overlayfs недоступен.
**Восстановление:**
1. Reboot Kraken (OMV или физически)
2. При монтировании ext4 автоматически запускает fsck
3. После ребута: `docker compose up -d` из каждого `~/docker/<service>/`
**Профилактика:** не запускать rsync и ffmpeg transcode одновременно. Jellyfin transcode: pgsrip (subtitle extraction) особенно нагружает CPU+диск.
## Связанные заметки
- [[personal-os-architecture]]
- [[tech/media-pipeline-pitfalls]]
- [[tech/htpc-steam-emulators]]
+34 -4
View File
@@ -1,7 +1,7 @@
---
title: Media Pipeline — Pitfalls & Debug Notes
created: '2026-05-16'
updated: '2026-05-16'
updated: '2026-05-18'
type: entity
tags:
- media-pipeline
@@ -12,8 +12,8 @@ confidence: high
---
# Media Pipeline — Pitfalls & Debug Notes
Операционные заметки по Swift media-pipeline (media_files_db / media-toolbox) на Крякне.
Связано: [[personal-os-architecture]], [[wiki/tech/kraken-infra]]
Операционные заметки по Swift media-pipeline (media_files_db / media-toolbox) на Кракене.
Связано: [[personal-os-architecture]], [[tech/kraken-network]]
## §9.x Score Engine — Критические питфолы
@@ -41,6 +41,7 @@ confidence: high
- 40 KP-запросов vs 8428 TMDb в типичном прогоне
- Лимит исчерпывается только после очистки кеша когда весь TMDb идёт заново
- Проблема не в архитектуре — это нормально
- **KP API URL смена домена (Баг 8):** `api.kinopoisk.dev``api.poiskkino.dev`. Swift URLSession при редиректе теряет `X-API-KEY` → пустые ответы кешируются. Фикс: обновить URL, добавить `shouldCache: ((Data) -> Bool)?` — не кешировать пустой `docs`.
## Docker Deploy — Kraken (обязательный порядок)
@@ -92,6 +93,29 @@ docker run \
- §9.6 subset floor 0.35 — добавлен
- §9.9 year tiebreak `count>1` only — исправлен
- Year-miss retry в TMDb/KP providers — добавлен
- KP API URL (`api.poiskkino.dev`) + пустой-docs no-cache — исправлен
- Leet-speak в транслите (`4` = `ч`): `String.decodeLeetSpeak()` — исправлен
- Год `2023г` (кириллическое `г`): `(19|20)\d\d)г\b` паттерн — исправлен
- `TitleParser _year_` underscore boundary: `\b``(?<![0-9])..(?![0-9])` — исправлен (Баг 12)
- `OutputConfig` `cartoons`/`documentaries` не optional в JSON: `decodeIfPresent` — исправлен
- `xvid`/`divx` не в quality markers list — исправлен
- TitleParser: год как название фильма (1984, 2001) → safety guard ≥2 букв перед — исправлен
## Трекер-парсеры (Steps A-C, 2026-05-17)
`TrackerPageParserRegistry` — dispatch по `url.host`:
- `RutrackerPageParser` — CP1251/iconv, SwiftSoup, жанры из заголовка, KP/IMDb IDs
- `RutorPageParser`, `NNMClubPageParser` — структура реализована, требует fixture тестов
- `TrackerMediaKind` enum: movie/series/cartoon/documentary/music/audiobook/game/book/unknown
- `extractMediaKind` — детект по `BB.catId`/`FORUM_ID` на странице (100+ forum IDs)
`DirectoryPolicy` / `MatchPolicy` / `MoveStrategy`:
- `FileAction.transmissionMove(torrentId:, from:, to:)` — Codable
- `buildMovieActions` читает policy, `needsSymlink`, `needsNFO`, `effectiveOutputDir`
- `transmissionMove` когда есть `torrentId`, иначе `move`
**⚠️ `transmissionMove` генерируется только если scanner создал регион** (нужен video файл).
Музыка/книги/игры из downloads не перекладываются — нет `videoExtensions` для аудио (Шаг D, pending).
## Agent/Sync Pitfall — Duplicate unresolved
@@ -99,7 +123,13 @@ docker run \
**Фикс:** `updateUnresolvedStore` проверяет `allOutputDirs` на существующий canonical dir → пропускает. Файл: `PipelineRunner.swift`.
## QuerySnapshotGenerator
При изменениях в `TitleParser`/`NameTokenization`/`QueryBuilder` снапшоты в тестах устаревают.
**Регенерация:** `swift run QuerySnapshotGenerator` из корня репо.
НЕ использовать `SNAPSHOT_TESTING_RECORD=all` — крашит при 364 concurrent writes (SIGSEGV).
## Связанные заметки
- [[personal-os-architecture]]
- [[wiki/tech/kraken-network]]
- [[tech/kraken-network]]