Remove Portainer from managed compose and catalog; leave a custom.yaml
example for optional use. Upgrade/start use compose --remove-orphans and
migration 002 removes leftover Portainer containers unless custom.yaml
keeps it. Fix setup double URL list when status is unhealthy, share
OpenSubtitles y/N on express, and tone down indexer/provider prompts.
Prefer history hashes filtered by library folder key, then exact folder-key
match only (no sequel prefix hits). Refuse ambiguous multi-matches. Ignore
partial file-delete events. Best-effort Jellyfin library refresh after purge.
Stock Seerr only drops the request row; intercept DELETE /api/v1/request/:id
to cascade media file delete (*arr + purge hooks) before removing the request.
Drop writing ~/assemblrr_services.txt; status now shows live state and
localhost URLs for each service, with --docker for raw compose ps.
Health parsing is fixed under set -e; uninstall cleans legacy txt.
Introduce managed-file apply, ordered migrations, backup-first upgrade CLI,
and migration 001_add_bazarr (skip if user already defined Bazarr). Local
--from uses the same apply path as production git fetch of main.
Ship Bazarr in the core compose stack, wire Sonarr/Radarr/Jellyfin on
config sync, apply TRaSH-style scoring, free multi-provider defaults, and
optional OpenSubtitles.com credentials from setup secrets.
Docker creates missing volume parents as root, which broke setup after
the early VPN test (config/ owned by root). Add prepare_install_dirs,
call it before VPN test and full compose up, and reuse it on CLI start.
Generate INSTALL_DIR/.env from .env.example via envsubst, drop
templates/envsubst.env, and add a unit test that keeps the template
keys aligned with setup. Tighten related docs and test helpers.