What's new
- Managed users get their privacy filters. Plex reports every Home user as "restricted", so managed accounts with no age restriction were being skipped — they could see everyone's rows, and their toggle was greyed out. They're now treated like anyone else. Accounts that do have a parental profile are still skipped, because Plex refuses label filters on those and they see no collections at all. (#20)
- "Because you watched…" rows. A new row template that seeds from a single recent watch and names itself after it, rather than blending everything. (#57)
- Every visibility toggle can be turned off. Including all of them — so "only on my friends' Home screens, nowhere else" now works. You can also keep your own row on your own Home while hiding everyone else's. (#6)
- The default row can be deleted, like any other row.
- Block a title from inspiring your picks with one click, straight from someone's watch history — no searching for it.
- Background work is visible. A live indicator in the header shows what's running or queued, with a plain-English reason when something is waiting. Jobs get history, retries, and a notification if they give up.
- Schedules live with the jobs they run. Every scheduled task shows its next run and can be re-timed in one place; the drift check now runs nightly by default.
- Poster artwork in the request inbox, and a dashboard that reports what actually landed rather than a lifetime average that only measured how long Shortlist had been installed.
Fixes
- The incremental watch sync did nothing. Plex silently ignores the filter it relied on, so every night re-read every user's full history. It now reads only what changed — a much cheaper night, with a complete re-read on a schedule so nothing drifts.
- A cancelled run is no longer reported as a failed one. Rows built before you stopped it are live, and it says so.
- "Sync now" and "Sync from Plex" tell you they started, instead of appearing to do nothing for ten seconds.
- Deleting a row returns straight away rather than holding the page while it cleans up on Plex.
- A row rename could match the wrong row when it had no previous title to match on.
- A job could run twice if it was waiting when the stale-job sweep ran.
- Restricted-account handling, share-filter merges, and the ordering that keeps a new row from ever being visible before the exclusions that hide it.
Security
Several issues found in a full audit of the code, including a session cookie that could be forged on a fresh install, a file path that could escape the config directory, and API keys that could appear in error messages. All fixed.
Under the hood
Three database migrations run automatically on first start (a backup is taken beforehand). The API now describes its own responses, the container is smoke-tested on every build before it publishes, and the test suite grew from 1,370 to 1,647 tests.