Season-level search, release deck and grab #125

Closed
opened 2026-08-23 15:55:56 +01:00 by naps62-yolo · 0 comments
Owner

Movies and episodes each have the full DESIGN.md §9.3 surface: a targeted
search, a classified three-bucket deck, and a grab by release id. Seasons have
none of it, so a season pack can only ever be chosen automatically by
tv_grab.rs — there is no way to look at the packs and pick one.

That deck is also the agreed escape hatch for a single episode that cannot be
found: rather than a lane exception or a per-season flag, the operator opens the
season deck and grabs a pack by hand (#117, #124).

  • POST /api/series/{id}/seasons/{n}/search
  • GET /api/series/{id}/seasons/{n}/releases
  • POST /api/series/{id}/seasons/{n}/releases/{release_id}/grab

Mirror the movie and episode handlers, including rescoring the deck at read time
so a policy edit changes the verdicts without a new search. Season-targeted
results need somewhere to live: episode_releases links a release to one
episode, which is the wrong grain for a pack the operator has not committed to,
so add a season_releases join table alongside it.

The grab targets target_kind = 'season', which grabs and the import lane
already handle.

Movies and episodes each have the full DESIGN.md §9.3 surface: a targeted search, a classified three-bucket deck, and a grab by release id. Seasons have none of it, so a season pack can only ever be chosen automatically by `tv_grab.rs` — there is no way to look at the packs and pick one. That deck is also the agreed escape hatch for a single episode that cannot be found: rather than a lane exception or a per-season flag, the operator opens the season deck and grabs a pack by hand (#117, #124). - `POST /api/series/{id}/seasons/{n}/search` - `GET /api/series/{id}/seasons/{n}/releases` - `POST /api/series/{id}/seasons/{n}/releases/{release_id}/grab` Mirror the movie and episode handlers, including rescoring the deck at read time so a policy edit changes the verdicts without a new search. Season-targeted results need somewhere to live: `episode_releases` links a release to one episode, which is the wrong grain for a pack the operator has not committed to, so add a `season_releases` join table alongside it. The grab targets `target_kind = 'season'`, which `grabs` and the import lane already handle.
naps62-yolo added the area/apidifficulty/moderatephase/6-tvtype/feature labels 2026-08-23 15:55:56 +01:00
naps62-yolo added this to the TV tracking milestone 2026-08-23 15:58:35 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: yolo/arr#125