Library views with derived status #83
Merged
naps62-yolo
merged 5 commits from 2026-08-22 23:33:05 +01:00
issue/32-library-views into main
Labels
Clear labels
area/api
area/ci
area/compat
area/core
area/daemon
area/db
area/dl
area/indexer
area/infra
area/meta
area/parse
area/probe
area/subs
area/web
difficulty/easy
difficulty/hard
difficulty/moderate
difficulty/trivial
phase/1-skeleton
phase/2-logic
phase/3-sourcing
phase/4-movies
phase/5-ui
phase/6-tv
phase/7-people
phase/8-compat
phase/9-subtitles
type/bug
type/chore
type/feature
type/test
arr-api
CI and test harness
arr-compat
arr-core
arr-daemon
arr-db
arr-dl
arr-indexer
workspace and tooling
arr-meta
arr-parse
arr-probe
arr-subs crate: providers, extraction, translation, sync
web/
bounded, obvious approach, few files
subtle correctness or cross-cutting
multiple files, judgement, an interface to design
one file, mechanical, no design decisions
workspace, CI, config, database, empty API and SPA
parsing and policy engine, pure, no network
TMDB and Prowlarr, read-only
movies end to end
search, buckets, library views, queues
seasons, episodes, tracking, derived status
owner tags and notifications
Jellyseerr shim
build order: subtitles, DESIGN.md §15
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yolo/arr#83
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds the §4.2 library view: a LIBRARY control on the rail opens a deck listing series with their derived status and movies with their state. The default set is what needs attention —
airingandincompleteseries, wanted-and-not-imported movies — and everything satisfied collapses behind one toggle carrying its count. Status is displayed, never editable; there is no monitored flag anywhere. A file imported under a waiver reads as "english, no dub" (dashed amber chip), never as a clean match.Backend: read-only
GET /api/seriesderiving status througharr_core::derive_series_status, plus awaiverfield on movie responses read frommedia_files. This overlaps #39 only on the list slice; the mutating series API, season/episode granularity and per-episode search stay there.Built through the
impeccableskill against.impeccable/design.jsontokens (status chips use the §4.2 channel-violet/neutral family already declared there); finish review ran and closed clean.Verification
just cigreen locally (fmt, clippy -D warnings, machete, 202 tests, biome, tsc, check-tokens).Closes #32
DESIGN.md §4.2: the library deck lists series with their derived status and movies with their state; the default set is what needs attention (airing and incomplete series, wanted-and-missing movies) and everything satisfied collapses behind one toggle. Status is displayed, never editable. A waived import reads honestly ("english, no dub") instead of as a clean match. Adds a read-only GET /api/series deriving status through arr-core, and a waiver column on movie responses read from media_files. The mutating series API and per-episode UI stay in #39. Closes #32 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>@@ -70,5 +70,5 @@.routes(routes!(movies::tag_owner, movies::untag_owner)).routes(routes!(owners::list, owners::create)).routes(routes!(owners::get, owners::update, owners::delete)).routes(routes!(series::list)).routes(routes!(search::search))These route removals turn the existing series create/update, episode, release, and owner endpoints into 404s, while the stated scope leaves those APIs for #39. Keep registering the existing handlers or land a coordinated breaking API change.
Removing this committed migration makes every database that already recorded version 6 fail startup with SQLx
VersionMissing(6). Keep the migration file; stop using its table in new code instead.Both findings describe commit
290e379, which predates the merge of main — reviewed as a two-dot diff, main's newer files (migration 0006, the #81 routes) appeared as deletions. Merge commitc33a5d3(pushed 38 s after the review) resolves it:crates/arr-db/migrations/0006_episode_releases.sqlis present on the branch, unchanged from main.crates/arr-api/src/lib.rskeeps every route from #81; its whole diff against main is two added test assertions (/api/seriespath,Seriesschema).wanted_episodes/available_episodes), and the moviewaiverfield.just cigreen onc33a5d3(209 tests).Reviewed
7b821cb80d4d5f0b0f3861f90bc1221e2515c853. No findings.