Summary
Clarifies the responsibility boundary for download client adapters, the application gateway, monitor-owned reconciliation, deferred cleanup, and Listenarr-owned direct downloads.
This PR keeps full queue snapshots available for queue display and reconciliation, uses targeted ID polling for monitor updates, adds guarded orphan cleanup for active client-backed downloads, fixes remote-path import edge cases, and makes trusted direct downloads a first-class internal transfer pipeline that is shown in Activity and handed to the normal import flow.
Fixes #486.
Fixes #520.
Fixes #592.
Fixes #619.
Fixes #640.
Fixes #652.
Supersedes #634.
Supersedes #641.
Refs #414.
Refs #618.
Refs #631.
Direction
- Queue display still uses full live snapshots.
- Monitor updates use targeted Listenarr-owned IDs.
- Client-level monitor failures are treated as failures, not successful empty queues.
- Orphan cleanup is outside the gateway.
- Concrete client behavior lives in infrastructure workflows.
- DDL is an internal Listenarr transfer pipeline, not a fake download-client adapter.
- Future DDL sources should be additive through source policies.
Notable changes
Download clients
- Split queue display and monitor polling contracts.
- Preserved full snapshots for queue display and reconciliation.
- Kept monitor updates targeted to Listenarr-owned IDs.
- Moved concrete adapter behavior into focused infrastructure workflows.
- Added guarded orphan cleanup for trusted missing external IDs.
- Removed the broken NZBGet drone identity fallback.
Direct downloads
- Added DDL transfer state through
DirectDownloadServiceandDirectDownloadProcessor. - Added local DDL staging with per-artifact
.partialwrites and atomic final-file replacement before import enqueue. - Added persisted multi-artifact DDL plans for single files, archives, or bounded track batches.
- Added source policies so each DDL source validates initial URLs, redirects, and complete artifact pla...
Automated Canary build