[1.2.0.0] - 2026-05-04
Release focus
Eliminated the only C-compiled Python dependency (lxml) and tightened Python version
guards to make source installs seamless on any supported Python version.
lxml dependency removed
backend/integrations/newznab.pynow usesxml.etree.ElementTree(Python stdlib) instead
oflxmlto parse Newznab RSS/Atom responses. The API is identical, so behaviour is
unchanged. This removes the last dependency that required a C++ compiler or prebuilt wheel.lxml==5.3.0removed fromrequirements.txt.- Source installs now require zero native compilers — all remaining packages have
prebuilt wheels for Python 3.11, 3.12, and 3.13 on Windows.
Tightened Python 3.14 guard in install.ps1
- Added a post-venv-creation version check: even if the venv somehow ends up on Python 3.14
(e.g. leftover venv from an old install), the script now aborts with a clear error message
before attemptingpip install, rather than letting pip fail with cryptic build errors. - Updated pip-failure message to reflect that pydantic-core (not lxml) is the remaining
reason Python 3.14 is unsupported.
Milestone A safety hardening
- Added centralized API error envelopes with
code,message,details, and
correlation_idfields, plus global exception mapping inbackend/main.py. - Added correlation ID middleware (
X-Correlation-ID) so API errors and server logs can be
traced per request. - Updated core API routes to use shared error helpers instead of mixed ad-hoc
HTTPException
responses.
Milestone A backend tests
- Added focused backend unit tests for comparison decisions, Radarr post-replace policy
behavior, and replacer-to-Radarr policy bridge dispatch. - New test files:
tests/backend/test_comparer.pytests/backend/test_radarr_policy.pytests/backend/test_replacer_policy_bridge.py
Audit and observability improvements
- Added system audit events for auth and settings actions:
- login success/failure
- active lockout checks
- first-user registration
- settings update writes and integration enabled/disabled toggles
- Extended
activity_logwithactoranddetailsfields (additive migration) and exposed
them in the Activity API output. - Added correlation-id-enriched logging format and request lifecycle logs with method, path,
response status, and latency.
Task idempotency safeguards
- Added guarded background-task start logic for manual task triggers to prevent duplicate starts
while a matching task key is already running. - Applied guards to scheduler task runs, full scan trigger, cleanup trigger, and full cycle start.
Diagnostics bundle
- Added a one-click diagnostics export endpoint at
/api/v1/system/diagnostics/bundlethat
packages redacted config, system/integration health snapshots, and recent log tail into a zip
for easier support troubleshooting. - Updated system API runtime version constant to
1.2.0.0for accurate/system/infoand
/system/update-checkreporting.
API contract improvements
- Added shared Pydantic response models and wired them into core API routes for clearer OpenAPI
docs and safer frontend type expectations. - Covered auth check, dashboard stats/history/activity, library movie/search/action endpoints,
queue endpoints, and activity list responses. - Aligned auth dependency failures (API key/JWT/auth required) with centralized error envelopes
for consistent unauthorized response payloads. - Expanded response-model coverage to
system,settings, andtvrouters for health,
preflight, matrix, update/task actions, blacklist, settings test, and TV cleanup endpoints. - Added API contract test coverage to assert key routes keep declared response models.
Final release additions and platform polish
- Added stricter preferred-language filtering behavior in the comparison engine:
- candidates with explicit language tags must include the configured preferred language
- English preference now rejects explicit non-English title markers (for example ITA/French/German tags) when English is not present
- Added schedule-window enforcement with timezone support for overnight cross-check workflows:
- new
schedule.timezoneconfig setting (localby default) - scheduler now runs window-aware checks and skips cycles outside configured start/end times
- overnight windows spanning midnight (for example 23:00 -> 05:00) are supported
- new
- Added cycle guardrails so long-running cycles stop processing new movies once the configured schedule window closes.
- Added regression test coverage for:
- English-preferred language rejection of Italian-tagged candidates
- overnight schedule-window evaluation logic
- Centralized application version metadata in
backend/version.pyand wired runtime/system APIs to that source for consistent version reporting. - Aligned release metadata to
1.2.0.0across backend runtime, frontend package metadata, installer metadata, and docs. - Updated updater behavior messaging and safeguards:
- clarified that
update.batis for git source checkouts only - added early guard when
.gitis not present to avoid misleading "updated" flows on installer deployments
- clarified that
- Improved installer build output quality:
- removed obsolete/deprecated Inno Setup directives from installer config to eliminate packaging warnings
- ensured installer config template generation includes schedule defaults for timezone/window settings
- Reduced startup noise in common Windows deployments by pinning bcrypt to a passlib-compatible version (
bcrypt==4.0.1). - Refreshed GitHub Pages docs site visuals and content hierarchy to highlight v1.2.0.0 improvements and improve release discoverability.