Per-file copy noise goes to the setup log only. Bootstrap the install
tree and operator CLI as soon as the path is known so users can run
uninstall after mid-setup abort; improve CLI discovery and partial-tree
uninstall resilience.
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.
Drop hardcoded subtitle-provider defaults. Wire-up lists providers
from the running Bazarr container and enables only user selections
(plus OpenSubtitles.com when credentials were saved).
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.
Hardlink-safe cleanup: Seerr/Jellyfin/*arr deletes remove library files and
qB torrents via purge hooks and media-purge-watch. Indexers get seed ratio/time
so completed downloads can leave torrents/. Upgrade always re-wires services;
drop user-facing config sync. Live e2e covers Radarr, Seerr, and Jellyfin APIs.
Unmapped folders under movie/TV roots are looked up and added with the
default quality profile (no search), then rescanned and synced to Bazarr.
Enables Netflix-like reinstall/keep-media and fills Bazarr for disk libraries.
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.
LAN IPs from setup go stale after DHCP or network changes, so
ctrl-click links in assemblrr_services.txt timed out. Prefer
localhost so the saved URLs keep working on the install machine.
Track required vs optional wiring steps with real exit codes, stop
claiming success after partial failures, and note Jellyfin import scan
in the README.
Set the Prowlarr app profile before fullSync, wait for Radarr indexers,
then patch *arr minimumSeeders once. Expand Features & Philosophy to
match the install, CLI, VPN, and quality-profile behavior.
Always sync HD/UHD (and Sonarr WEB) as include packs, name them with
an assemblrr prefix, soften blocking CF scores, zero quality minSize,
relax minimumSeeders, and update Seerr on reconfigure. Document TRaSH
guide drift and tighten comments and uninstall messaging.
Failed VPN setup can leave config/ owned by root so rm -rf fails.
Guide Option 1–3 by install completeness and document Docker-based
removal without sudo.
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.