Miguel Palhas 502a431de3 fix(meta): derive the cache key from the encoded URL
Two ways a cached entry could be wrong.

The key was built by string concatenation in parallel with the URL, so
`search_movies("dune&year=2024", None)` and `search_movies("dune",
Some(2024))` produced the same key for two different requests. Both key
and URL now come from one `Url`, percent-encoded identically, and the
API key is appended at send time so it cannot reach a key or a log.

A successful response was cached before it was decoded, so one malformed
body returned `Error::Decode` from the cache for the whole time-to-live.
Decoding now happens first and only what decoded is stored.
2026-08-22 19:43:12 +01:00
2026-08-22 19:20:47 +01:00
2026-08-22 19:20:47 +01:00

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.
S
Description
No description provided
Readme
17 MiB
Languages
Rust 83.4%
TypeScript 11.5%
CSS 1.9%
Python 1.4%
HTML 1%
Other 0.8%