Write synced workouts into the local Zwift Workouts directory and maintain the matching workouts.files manifest entries so the Zwift client can discover generated .zwo files.
Apply the same local catalog update and cleanup path to Intervals.icu and TrainingPeaks managed workouts, while preserving unmanaged custom workout manifest entries.
Expose a small launcher status readout for active provider, cached workout metadata, local file presence, and manifest health.
Use a configurable ZWIFT_WORKOUTS_DIR Docker Compose bind mount instead of committing a host-specific path or credentials.
Privacy review: no secrets, tokens, account IDs, or hard-coded local user paths are added. Existing credential references are code variables only.
Verification: .venv/bin/python -m unittest discover -s tests; git diff --cached --check; docker compose config.