The blacklist moves to arr-db so every trigger that classifies a release
shares one check — targeted search today, RSS matching when it lands.
Applying it during classification rather than at selection also makes the
stored row say `blacklisted`, which is what keeps §9.3's manual view from
offering a hard-failed release as a clean match.
Both §6.3 keys now do work: the normalised name catches a re-upload, and
the infohash catches the same torrent re-listed under a new name — the
latter only after Transmission has fetched a `.torrent`, so that grab is
undone rather than recorded.
Soft-failed imports already stored a waiver; `GET /api/movies/{id}/files`
is what carries it out.
Closes#24
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PRs #82 and #85 were each green pre-merge; #85 renamed movie states
(grabbed->downloading, imported->available) and #82's import path
still wrote the old names, so main failed the movies CHECK constraint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>