[2026-05-27] wiki curation: multi-host cron topology, media pipeline pitfalls, watchlist automation updates
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: Multi-Host Cron Topology
|
||||
created: '2026-05-27'
|
||||
updated: '2026-05-27'
|
||||
type: concept
|
||||
namespace: personal
|
||||
tags: [system, agent, eagle, kraken, pipeline, sync]
|
||||
confidence: medium
|
||||
sources: []
|
||||
---
|
||||
|
||||
# Multi-Host Cron Topology
|
||||
|
||||
Synthesis of how scheduled jobs are distributed across Eagle and Kraken.
|
||||
Co-occurs in [[tech/hermes-eagle-mac]], [[tech/hermes-docker-kraken]],
|
||||
[[concepts/watchlist-automation]], and [[personal-os-agent-rules]].
|
||||
|
||||
## Design Principle
|
||||
|
||||
Jobs run on the host closest to their data. Eagle handles
|
||||
agent-intelligence tasks (briefs, wiki curation). Kraken handles
|
||||
media-pipeline tasks (watchlist, arr stack). Duplication is a bug.
|
||||
|
||||
## Eagle (Mac M4) — Agent Jobs
|
||||
|
||||
| Job | Schedule | Purpose |
|
||||
|-----|----------|---------|
|
||||
| `wiki-curation` | daily 02:00 | Crystallise vault → wiki (llm-wiki skill) |
|
||||
| `vault-enrichment` | daily 03:00 | Enrich personal/family notes |
|
||||
| `cross-enrichment` | daily 04:00 | Cross-namespace enrichment + memory curation |
|
||||
| `proactive-research` | Sat 05:00 | Proactive gap research |
|
||||
| `data-pipeline` | 30min, workdays | sync.js + generate-status.js → status.md |
|
||||
| `daily-brief` | workday morning | Morning brief to Zulip |
|
||||
| `inbox-triage` | workday noon | Asana inbox triage |
|
||||
| `weekly-review` | Fri evening | Weekly review |
|
||||
|
||||
Eagle crons are Hermes agent jobs — require LLM, vault access,
|
||||
Asana context. All run via Hermes native (not Docker). See
|
||||
[[tech/hermes-eagle-mac]].
|
||||
|
||||
## Kraken (RPi5) — Pipeline Jobs
|
||||
|
||||
| Job | Schedule | Purpose |
|
||||
|-----|----------|---------|
|
||||
| `watchlist-nightly` | daily 01:00 | process-thumbs + resolve + sync-down/up |
|
||||
| `watchlist-discover` | Sun 09:00 | KP API top films → watchlist Новинки |
|
||||
| `on-download-complete` | event-triggered | media-pipeline: sort + Jellyfin rescan |
|
||||
|
||||
Kraken crons are shell scripts or Python3 — deterministic, no LLM.
|
||||
Run via Hermes cron on Kraken Hermes instance (port 8642, Docker).
|
||||
See [[tech/hermes-docker-kraken]] and [[concepts/watchlist-automation]].
|
||||
|
||||
## Migration History
|
||||
|
||||
- 2026-05-27: `watchlist-nightly` and `watchlist-discover` moved from
|
||||
Eagle to Kraken. Eagle was running them via SSH to Kraken which was
|
||||
fragile and required Eagle's network path to Kraken to be stable.
|
||||
Running on Kraken directly eliminates that dependency.
|
||||
|
||||
## Pitfall: Job Duplication
|
||||
|
||||
If the same shell-script job runs on both Eagle and Kraken, the
|
||||
Radarr/Sonarr API sees double requests. Symptom: duplicate ⬇️
|
||||
entries or double-adds. Check: `hermes cronjob list` on both hosts.
|
||||
|
||||
## See Also
|
||||
|
||||
- [[personal-os-agent-rules]] — Eagle's rules and allowed writes
|
||||
- [[tech/hermes-eagle-mac]] — Eagle Hermes config
|
||||
- [[tech/hermes-docker-kraken]] — Kraken Hermes Docker setup
|
||||
- [[concepts/watchlist-automation]] — Full watchlist flow
|
||||
@@ -2,8 +2,8 @@
|
||||
title: Watchlist Automation — Полный Flow
|
||||
namespace: personal
|
||||
created: '2026-05-20'
|
||||
updated: '2026-05-22'
|
||||
last_synced: '2026-05-22'
|
||||
updated: '2026-05-27'
|
||||
last_synced: '2026-05-27'
|
||||
type: concept
|
||||
tags:
|
||||
- kraken
|
||||
@@ -66,18 +66,23 @@ Jellyfin (8096) → rescan → виден контент
|
||||
|
||||
**Важно:** `process_thumbs` автоматически определяет отступ из `## Фильмы` и сохраняет при переносе. `SECTION_THUMBDN = "## Новинки👎"` (без пробела) — должно точно совпадать с заголовком.
|
||||
|
||||
## Cron Jobs на Eagle
|
||||
## Cron Jobs (2026-05-27: migrated to Kraken)
|
||||
|
||||
Два shell-script крона (не агентные — детерминированы):
|
||||
Watchlist pipeline runs entirely on Kraken (migrated from Eagle 2026-05-27).
|
||||
Eagle previously ran `watchlist-nightly` via SSH; now Kraken runs it locally.
|
||||
|
||||
| Job | ID | Расписание | Скрипт |
|
||||
|-----|-----|-----------|--------|
|
||||
| `watchlist-nightly` | `93619b22b330` | ежедн. 01:00 | `~/.hermes/scripts/watchlist-nightly.sh` |
|
||||
| `watchlist-discover` | `8f219dfe8f0f` | вс 09:00 | `~/.hermes/scripts/watchlist-discover.sh` |
|
||||
| Job | Расписание | Хост | Скрипт |
|
||||
|-----|-----------|------|--------|
|
||||
| `watchlist-nightly` | ежедн. 01:00 | Kraken | `~/.hermes/scripts/watchlist-nightly.sh` |
|
||||
| `watchlist-discover` | вс 09:00 | Kraken | `~/.hermes/scripts/watchlist-discover.sh` |
|
||||
|
||||
**watchlist-nightly.sh** (Mac → Kraken → Mac):
|
||||
1. `sync-vault.sh` (pull Mac) → `process-thumbs --apply` → `sync-vault.sh` (push Mac)
|
||||
2. SSH Kraken: `sync-vault.sh` (pull) → `resolve --recheck --apply` → `sync-down --apply --batch 5` → `sync-up --apply` → `sync-vault.sh` (push)
|
||||
**watchlist-nightly.sh** (на Kraken):
|
||||
1. `sync-vault.sh` (pull) → `process-thumbs --apply` → `sync-vault.sh` (push)
|
||||
2. `resolve --recheck --apply` → `sync-down --apply --batch 5` → `sync-up --apply` → `sync-vault.sh` (push)
|
||||
|
||||
**Paths on Kraken HDD (UUID 49e8f586-3839-4c5d-a1e1-58bfc3579ade):**
|
||||
- `/home/kraken/obsidian` → symlink to `/srv/dev-disk-by-uuid-.../obsidian`
|
||||
- watchlist-sync: `/srv/dev-disk-by-uuid-.../Developer/watchlist-sync`
|
||||
|
||||
## Discover — Фильтрация
|
||||
|
||||
@@ -118,6 +123,19 @@ Kopirует NFO + постер рядом с symlink (Jellyfin не видит
|
||||
- 🔴 rsync невыполненных фильмов с HTPC на Кракен (`Фильмы не перенесенные с htpc на кракен.md`)
|
||||
- 🟡 Watchlist sync-up: добавить перенесённые фильмы в нужные разделы
|
||||
|
||||
## Pitfalls
|
||||
|
||||
### KP Markdown Link Parsing Bug
|
||||
Items added from Kinopoisk with full markdown link syntax
|
||||
`[Title](https://kinopoisk.ru/film/12345/) (2025)` were passed raw to TMDB
|
||||
search → not found → marked `❓` permanently (`not i.ambiguous` skips on
|
||||
next run). Fix: commit `2db1ed9` — extract plain title from markdown links
|
||||
before passing to TMDB. Items incorrectly marked ❓ require manual `--recheck`.
|
||||
|
||||
### KP API Endpoint
|
||||
`api.kinopoisk.dev` redirects to `api.poiskkino.dev/v1.4/movie`. Use the
|
||||
redirect destination directly to avoid DNS issues.
|
||||
|
||||
## watchlist-sync — Python CLI
|
||||
|
||||
Репо: `~/Developer/watchlist-sync` (GitHub: `mallexxx/watchlist-sync`).
|
||||
|
||||
Reference in New Issue
Block a user