23f06d429f54ac6c4d8dd12551c323134d78290d
Closes the "wanted movie, no file" gap: search every indexer, cache each candidate with its verdict and score, send the best eligible one to Transmission with its label and both seeding limits, and record the Grab. Restarting mid-flight cannot double-grab. A title with a live grab is not a gap, selection is a total order over the candidate set, and the add is keyed on the infohash, so a crash between the add and the insert heals on the next tick instead of leaving a second torrent. The policy row to arr-core mapping moves into arr-db, where both the manual-search API and the daemon read it, instead of being copied.
arr
One service that replaces Radarr and Sonarr, and later Bazarr, for a single household.
Five .NET services idle at 600-900 MB to run a loop with four steps in it: decide what you want, find it, fetch it, put it where Jellyfin can read it. Each has a configuration surface an order of magnitude larger than the subset anyone uses, and none of them share a model.
This is that loop, once, in Rust.
- Prowlarr stays — it owns tracker auth, Cloudflare bypass and the indexer definitions, and replacing it buys nothing.
- Transmission stays.
- Jellyseerr stays, talking to a thin Radarr-compatible shim.
Status
Design complete, implementation not started. See DESIGN.md for the contract
and the issue tracker for the work.
Documents
DESIGN.md— the contract. Domain model, policy engine, sourcing, import, crate layout, build order.CLAUDE.md— repository conventions, label taxonomy, and how an autonomous driver session should sequence the work.
Languages
Rust
83.4%
TypeScript
11.5%
CSS
1.9%
Python
1.4%
HTML
1%
Other
0.8%