feat(curator): vendor the application backend as the scenario's tracked source

The curator Python backend (package, tests, systemd units, config templates, scripts) now lives under scenarios/curator/backend and is the single source of truth; the live checkout at the workspace path is a runtime copy. Exported from the app repo's tracked tree via git archive (no history, .pi/venv/caches excluded). 149 unit tests pass from the new location.

profile.toml backend is now repo-relative (scenarios/curator/backend); verify-generated.sh resolves a relative backend against REPO_ROOT. verify-no-secrets ASSIGN heuristic now requires value entropy so vendored kwargs like token=extraction_token no longer false-positive. README documents the backend/ layout and the operator-owned app rollout step.
This commit is contained in:
Kai
2026-08-30 18:49:10 -07:00
parent 14c97d88cf
commit 88b06d782f
57 changed files with 14236 additions and 9 deletions
@@ -0,0 +1,44 @@
# Production phase-1 paths on host 192.168.50.145.
CURATOR_DATA_ROOT=/home/claw/.local/share/curator
CURATOR_LIBRARY_ROOT=/mnt/truenas/multimedia/books
CURATOR_STAGING_ROOT=/mnt/truenas/multimedia/curator/staging/books
CURATOR_BACKUP_ROOT=/mnt/truenas/multimedia/curator/backup
CURATOR_HOST=0.0.0.0
CURATOR_PORT=8766
CURATOR_MAX_UPLOAD_BYTES=268435456
# Existing media managers are queried read-only to suppress works already owned or tracked.
CURATOR_RADARR_URL=http://192.168.50.10:7878
CURATOR_RADARR_API_KEY=
CURATOR_RADARR_4K_URL=http://192.168.50.100:7878
CURATOR_RADARR_4K_API_KEY=
CURATOR_SONARR_URL=http://192.168.50.10:8989
CURATOR_SONARR_API_KEY=
CURATOR_SONARR_4K_URL=http://192.168.50.100:8989
CURATOR_SONARR_4K_API_KEY=
CURATOR_RADARR_ROOT_FOLDER=/mnt/truenas/multimedia/movies
CURATOR_RADARR_QUALITY_PROFILE_ID=4
CURATOR_SONARR_ROOT_FOLDER=/mnt/truenas/multimedia/tv
CURATOR_SONARR_QUALITY_PROFILE_ID=4
CURATOR_RADARR_4K_ROOT_FOLDER=/mnt/unRaid/movie4k
CURATOR_RADARR_4K_QUALITY_PROFILE_ID=5
CURATOR_SONARR_4K_ROOT_FOLDER=/mnt/unRaid/tv4k
CURATOR_SONARR_4K_QUALITY_PROFILE_ID=7
# Plex is authoritative for music. Curator discovers the first music section
# when CURATOR_PLEX_MUSIC_SECTION_ID is empty.
CURATOR_PLEX_URL=http://192.168.50.100:32400
CURATOR_PLEX_TOKEN=
CURATOR_PLEX_MUSIC_SECTION_ID=
CURATOR_CATALOG_CACHE_TTL_SECONDS=60
CURATOR_REVIEW_CACHE_TTL_SECONDS=21600
# Book metadata and covers use cached public Douban/Goodreads pages; no account or API key.
# Search evidence used by Luna to synthesize an attributed book evaluation.
CURATOR_TAVILY_API_KEY=
CURATOR_BOOK_WEB_REVIEW_MAX_RESULTS=6
# Manual acquisition search only. Curator does not scrape results or downloads.
CURATOR_ZLIB_SEARCH_URL_TEMPLATE=https://zlib.li/s/{query}
# Add after creating the dedicated Bot. Keep the real token in a 0600 env file.
# CURATOR_TELEGRAM_BOT_TOKEN=
# CURATOR_TELEGRAM_ALLOWED_USERS=1093241065