70ba6ac376ef1bbfd48e8820fb0593b204019864
A `capped` row was excluded from the work list outright, and nothing ever moved it back, so a language that hit a daily allowance was never attempted again. §15 says budgets drain a backlog over days, which only holds if the cap expires. `pending` now returns a capped row once the UTC day it was capped in has passed — the same boundary `subtitle_budget_spend.day` uses. The day rule is in the query rather than the caller because `limit` is a window over the whole list: a hundred newest files capped this morning would otherwise hold every slot and hide the older gaps until tomorrow. Capping no longer bumps `attempts`. That counter is the failure ladder, and a budget that refused to spend never asked a provider. Two reporting fixes alongside, both found chasing the same bug: - The subtitle queue dropped `last_failure` on a capped row, so all four limits that write `capped` rendered identically. The sentence is the only thing that tells a provider budget from a 429. - A translation engine with no API key reported itself as "not compiled into this binary", sending the operator to rebuild an image that was already correct. Co-Authored-By: Claude <noreply@anthropic.com>
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.
- qBittorrent 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%