0.3.0
Added
- Jellyfin and Emby playback rules now use persisted native completed-watch snapshots after Sync Media; Playback Reporting remains optional enrichment for durable event and duration data
- Added a versioned, scoped-token automation API for candidates, lifecycle events, movies, series, protections, task schedules/history/runs, and system status
- Added dedicated Swagger, ReDoc, and OpenAPI documentation containing only the supported external API
- Added durable candidate lifecycle webhooks with encrypted credentials, automatic retries, restart recovery, and delivery history in the new Integrations settings page
Changed
- Existing delete/move webhooks are migrated to durable lifecycle endpoints, and their legacy editor/configuration is removed so Integrations is the single source of truth
- Organized the external API into stable v1 domain modules with granular least-privilege scopes, discovery links, consistent pagination, and cursor-based event polling
- Background jobs now use a bounded, priority-aware command pool so safe work can proceed concurrently while task runs
- Updated dependencies:
- ruff to 0.15.22
- uvicorn to 0.51.0
- platformdirs to 4.10.1
- zensical to 0.0.51
- filelock 3.30.3
Fixed
- Docker build importing a desktop module it does not need that could sometimes result in a crash at startup
- Jellyfin/Emby Playback users rules now use the media server's current watched state, preventing stale Playback Reporting events from matching the wrong users
- Candidates now recovers from invalid saved sort preferences instead of failing to load
- Move instead of delete now carries language-tagged sidecars and logs why a shared source folder was safely retained
- Move instead of delete now safely merges existing destination folders and deduplicates identical files without overwriting conflicts
What's Changed
- Api v1 by @jessielw in #292
- feat: build a durable job system upgrading the single inline main worker by @jessielw in #293
- Dev by @jessielw in #294
Full Changelog: 0.2.6...0.3.0