Skip to content

Full Arr release E2E validation

Summary

Make the full Arr integration suite a first-release gate. Release 1 must prove that eMule BB works as a live Arr-facing indexer and qBittorrent-compatible download target, not just as a standalone REST server.

Topology rule: Sonarr, Radarr, and Prowlarr clients connect directly to eMule BB for Torznab and qBittorrent-compatible requests. aMuTorrent is a UI consumer of the native /api/v1 design and is not part of the Arr compatibility path.

The gate covers:

  • Prowlarr Generic Torznab indexer configuration against eMule BB
  • Radarr and Sonarr syncing that indexer from Prowlarr
  • Radarr and Sonarr temporary qBittorrent-compatible download-client configuration against eMule BB
  • release/RSS/search results flowing through Prowlarr, Radarr, and Sonarr
  • qBittorrent-compatible add, inspect, mutate, pause/resume, and delete flows reaching live eMule BB transfers

Beta 0.7.3 Classification

Release Gate. Full E2E-validated integration with aMuTorrent and the Arr suite is part of Release 1. This item owns the Arr side of that gate and backs the release live-e2e lane.

Execution Plan

Historical release context: Beta 0.7.3 REST and Arr execution plan.

Acceptance Criteria

  • [x] prowlarr-emulebb-live.py runs in the release lane and records indexer create/test/search artifacts
  • [x] radarr-sonarr-emulebb-live.py runs Radarr and Sonarr checks through Prowlarr and records app, indexer, and download-client state
  • [x] qBittorrent-compatible login, add, info/properties/files, category mutation, pause/resume, and delete are validated against live eMule BB
  • [x] Arr release/RSS/search returns eMule BB rows or reports public-network inconclusive with diagnostics
  • [x] reports redact API keys and exact live-wire transfer identifiers
  • [x] the suite is selectable and included by the release live-e2e command

Completion Evidence

  • App commits: 87b6f24, 385273c, 324c7f7.
  • Test commits: 8786847, 4e02b3d, 0fd6e77, 4339716, 3c5c963, 8a85158, 59f7e6d, e78c369.
  • Tooling commit: 303f911.
  • Commands: python -m emule_workspace validate; python -m pytest tests\python\test_rest_api_smoke.py -q; python -m emule_workspace test live-e2e --config Release --platform x64 --suite rest-api; python -m emule_workspace test live-e2e --config Release --platform x64 --suite prowlarr-emulebb; python -m emule_workspace test live-e2e --config Release --platform x64 --suite radarr-sonarr-emulebb.
  • Direct adapter smoke artifact: repos\emulebb-build-tests\reports\rest-api-smoke\20260506-190401-eMule-main-release.
  • Follow-up hardening: the mixed REST stress budget now includes the qBittorrent-compatible delete adapter with a missing-hash no-op delete, so delete remains covered under repeated native REST, Torznab, qBit, and legacy HTML traffic instead of only the one-shot smoke path.
  • Follow-up hardening: live adapter smoke now rejects malformed qBit boolean form fields on add/delete (paused=maybe, deleteFiles=wat), and mixed REST stress repeats the malformed delete probe.
  • Follow-up hardening: Torznab cat validation now rejects malformed category tokens in live adapter smoke and mixed REST stress instead of returning a successful empty feed for bad category syntax.
  • Debug contract-stress artifact after the Torznab category hardening: repos\emulebb-build-tests\reports\rest-api-smoke\20260507-204704-eMule-main-debug. The run covered all 82 OpenAPI routes, exercised 81 safe routes with 0 failed routes, and completed 272 mixed stress requests with 0 failures, 0 timeouts, 0 non-JSON native REST responses, and 6 repeated torznab_bad_category_rejected probes.
  • Follow-up hardening: qBittorrent-compatible setForceStart now rejects a malformed value form boolean in both live adapter smoke and mixed REST stress, while keeping the route an accepted no-op for valid qBit clients.
  • Debug contract-stress artifact after the qBit force-start hardening: repos\emulebb-build-tests\reports\rest-api-smoke\20260507-205544-eMule-main-debug. The run covered all 82 OpenAPI routes, exercised 81 safe routes with 0 failed routes, and completed 317 mixed stress requests with 0 failures, 0 timeouts, 0 non-JSON native REST responses, and 7 repeated qbit_bad_force_start_boolean_rejected probes.
  • Follow-up hardening: qBittorrent-compatible category reads now include live smoke and mixed REST stress coverage for a wrong SID cookie, keeping the adapter's 403 auth boundary explicit between unauthenticated, wrong-cookie, and valid-session traffic.
  • Debug contract-stress artifact after the qBit wrong-cookie coverage: repos\emulebb-build-tests\reports\rest-api-smoke\20260507-210705-eMule-main-debug. The run covered all 82 OpenAPI routes, exercised 81 safe routes with 0 failed routes, and completed 327 mixed stress requests with 0 failures, 0 timeouts, 0 non-JSON native REST responses, and 7 repeated qbit_wrong_cookie_rejected probes.
  • Follow-up hardening: live adapter smoke and mixed REST stress now cover bad Torznab query API keys and bad qBittorrent-compatible login credentials, so the Arr-facing auth boundary is exercised for missing credentials, wrong credentials, valid query/header API keys, valid qBit login, wrong qBit cookies, and valid qBit sessions.
  • Debug contract-stress artifact after the adapter bad-credential coverage: repos\emulebb-build-tests\reports\rest-api-smoke\20260507-211447-eMule-main-debug. The run covered all 82 OpenAPI routes, exercised 81 safe routes with 0 failed routes, and completed 337 mixed stress requests with 0 failures, 0 timeouts, 0 non-JSON native REST responses, 7 repeated torznab_wrong_query_key_rejected probes, and 7 repeated qbit_bad_login_rejected probes.
  • Follow-up hardening: the direct adapter smoke in rest-api now adds a qBittorrent-compatible transfer, verifies that /api/v2/torrents/info and category-filtered info adapt the native transfer list, verifies valid-transfer /api/v2/torrents/properties and /api/v2/torrents/files, then deletes the transfer through /api/v2/torrents/delete. Test commits: 6fd252f, ec962c7.
  • Debug live REST artifact after the direct qBit valid-transfer hardening: repos\emulebb-build-tests\reports\rest-api-smoke\20260508-000353-eMule-main-debug. The run passed with the persisted live-network policy BindInterface=hide.me, empty P2P BindAddr, and EnableUPnP=1.
  • Follow-up report hardening: Prowlarr and Radarr/Sonarr live reports now expose the same launch_inputs live-network fields as REST and aMuTorrent reports, making hide.me plus UPnP evidence visible in every Beta 0.7.3 live suite artifact. Test commit: efc52a7.
  • Follow-up hardening: the Radarr/Sonarr live suite now keeps operator-owned live terms and hashes in the ignored live-wire-inputs.local.json, records explicit video-family Torznab categories for Arr proof (2000 for Radarr and qBit video magnets, 5000 for Sonarr), checks Prowlarr video searches before Arr sync, and validates actual Radarr/Sonarr indexer enable flags. Test commits: 46faeb6, 830aa07, 5e1a512. Tooling commit: 8e2335d.
  • Follow-up hardening: the Prowlarr live suite now avoids q-less Torznab RSS proof, uses operator-owned terms from the ignored live-wire-inputs.local.json, and records explicit document, movie, and TV category searches without persisting exact runtime terms. Test commit: a8a0c76.
  • Follow-up audits: destructive native REST routes now have a static confirmation/intent inventory, Arr/qBit adapter parsing is locked to shared native validation and bridge helpers, and adapter error shapes are documented separately from native /api/v1 JSON errors. Test commits: c4db9e7, 88c743f.
  • Prowlarr artifact: repos\emulebb-build-tests\reports\prowlarr-emulebb-live\20260506-191105-eMule-main-release.
  • Radarr/Sonarr artifact: repos\emulebb-build-tests\reports\radarr-sonarr-emulebb-live\20260506-191223-eMule-main-release.
  • Fresh Radarr/Sonarr video-category artifact: repos\emulebb-build-tests\reports\radarr-sonarr-emulebb-live\20260509-074817-eMule-main-release. The run passed with BindInterface=hide.me, UPnP enabled, Prowlarr video searches returning rows for Radarr category 2000 and Sonarr category 5000, synced Radarr and Sonarr indexers enabled for RSS, automatic search, and interactive search, and two qBittorrent-compatible live-wire add/mutate/delete rounds from video-category magnets. Radarr/Sonarr release searches recorded no matching app-level rows after their own filtering, so the release proof is the explicit Prowlarr video-category search plus synced provider readiness and qBit-compatible transfer lifecycle evidence.
  • Fresh Prowlarr video-category artifact: repos\emulebb-build-tests\reports\prowlarr-emulebb-live\20260509-080508-eMule-main-release. The run passed with BindInterface=hide.me, UPnP enabled, direct eMule BB Torznab document category 7000 returning rows, direct movie category 2000 and TV category 5000 video searches returning rows, Prowlarr indexer add/test succeeding, and Prowlarr API searches returning rows for document, movie, and TV categories. The report stores term counts and presence flags only.
  • Final full umbrella proof: repos\emulebb-build-tests\reports\live-e2e-suite\20260506-224844-eMule-main-release\result.json.
  • Beta 0.7.3 Prowlarr replay artifact: repos\emulebb-build-tests\reports\prowlarr-emulebb-live\20260509-142619-eMule-main-release\result.json. The run passed with Prowlarr add/test/search, direct RSS/category probes, redacted live-term metadata, BindInterface=hide.me, empty P2P BindAddr, and EnableUPnP=1 evidence.
  • Beta 0.7.3 Radarr/Sonarr replay artifact: repos\emulebb-build-tests\reports\radarr-sonarr-emulebb-live\20260509-142909-eMule-main-release\result.json. The run passed with synced Radarr/Sonarr indexers enabled for RSS, automatic search, and interactive search; both qBittorrent-compatible download clients tested successfully; and two live-wire qBit add/info/properties/files/category mutation/pause/resume/delete rounds completed.

Pending Revalidation Focus

This gate has passing Release 1 evidence, but the next hardening pass should refresh it with these adapter-specific checks:

  • [x] Prowlarr Generic Torznab add/test/search still succeeds or records a public-network inconclusive result with redacted diagnostics.
  • [x] Radarr and Sonarr still sync the Prowlarr indexer and exercise eMule BB as a qBittorrent-compatible download client.
  • [x] qBittorrent-compatible login, app preferences, transfer add, info, properties, files, category mutation, pause/resume, and delete remain covered against live eMule BB.
  • [x] adapter errors remain bounded and diagnosable for Arr/qBit clients without leaking API keys, exact live-wire identifiers, or native internal details.
  • [x] adapter quirks remain local to the compatibility layer and do not drive native /api/v1 route shape, field aliases, or response envelopes.

Relationship To Other Items

  • backs CI-011, CI-014, and CI-015
  • complements AMUT-001
  • consumes FEAT-047, FEAT-048, and FEAT-049 surfaces where needed