The season deck cannot say why it has no packs #182

Closed
opened 2026-08-24 19:36:59 +01:00 by naps62-yolo · 1 comment
Owner

The season release deck cannot say why it is empty, so it implies the wrong
reason.

Opening a season deck with nothing indexed queues a sweep and polls for
results (#167). When nothing arrives within TV_SWEEP_WAIT_MS it says:

sweep has not landed yet — it may be waiting out its backoff; results appear
here once it runs

The code is honest about why it hedges:

/// A queued sweep is done when its releases appear in the table. Nothing
/// found is indistinguishable from still running, so the wait says so
/// honestly instead of promising either way.

But there is a third state it never names, and it is the one that actually
happens: the season is in PerEpisode mode, so a pack search is not going to
run at all. Backoff is not the reason and waiting will not help. On Rick and
Morty S09 the deck sits on "sweeping indexers…" for the full wait and then
blames backoff for a sweep that was never going to happen.

The API has to expose enough for the SPA to tell these apart. At minimum the
deck needs to know whether this season is taking the pack lane or the
per-episode lane, and — once #181 lands — when it will next try a pack.

Then say the true thing in each case:

  • pack lane, sweep queued, nothing yet — the current message is right
  • pack lane, sweep ran, nothing found — say the indexers returned no pack,
    which is a settled answer rather than a pending one
  • per-episode lane — say the season is grabbing episode by episode and why,
    and offer whatever retry #181 exposes rather than a sweep that cannot work

Depends on: #181

Note for whoever takes this: search_season_now has two paths. A season with
no gaps refreshes the deck and returns; a season with gaps calls grab_season,
which grabs rather than populating the deck. So "show me the packs" and "go get
this season" are the same endpoint today, which is part of why the deck's state
is hard to describe. Worth surfacing as its own issue if untangling it grows
past this one — do not widen this issue to cover it.

Goes through the impeccable skill. Drive a real browser with agent-browser,
never google-chrome --headless.

The season release deck cannot say why it is empty, so it implies the wrong reason. Opening a season deck with nothing indexed queues a sweep and polls for results (#167). When nothing arrives within `TV_SWEEP_WAIT_MS` it says: > sweep has not landed yet — it may be waiting out its backoff; results appear > here once it runs The code is honest about why it hedges: ``` /// A queued sweep is done when its releases appear in the table. Nothing /// found is indistinguishable from still running, so the wait says so /// honestly instead of promising either way. ``` But there is a third state it never names, and it is the one that actually happens: the season is in `PerEpisode` mode, so a pack search is not going to run at all. Backoff is not the reason and waiting will not help. On Rick and Morty S09 the deck sits on "sweeping indexers…" for the full wait and then blames backoff for a sweep that was never going to happen. The API has to expose enough for the SPA to tell these apart. At minimum the deck needs to know whether this season is taking the pack lane or the per-episode lane, and — once #181 lands — when it will next try a pack. Then say the true thing in each case: - pack lane, sweep queued, nothing yet — the current message is right - pack lane, sweep ran, nothing found — say the indexers returned no pack, which is a settled answer rather than a pending one - per-episode lane — say the season is grabbing episode by episode and why, and offer whatever retry #181 exposes rather than a sweep that cannot work Depends on: #181 Note for whoever takes this: `search_season_now` has two paths. A season with no gaps refreshes the deck and returns; a season with gaps calls `grab_season`, which grabs rather than populating the deck. So "show me the packs" and "go get this season" are the same endpoint today, which is part of why the deck's state is hard to describe. Worth surfacing as its own issue if untangling it grows past this one — do not widen this issue to cover it. Goes through the `impeccable` skill. Drive a real browser with `agent-browser`, never `google-chrome --headless`.
naps62-yolo added this to the Season packs milestone 2026-08-24 19:36:59 +01:00
naps62-yolo added the type/bugarea/webdifficulty/moderate labels 2026-08-24 19:36:59 +01:00
naps62-yolo added a new dependency 2026-08-24 19:36:59 +01:00
Author
Owner

Filing the note from the issue body as its own thing rather than widening this one.

search_season_now still has two paths, and they are different products behind one endpoint:

  • a season with no gaps runs a season-scoped search, stores the results and returns — it populates the deck
  • a season with gaps calls grab_season, which searches and then grabs — the deck is a side effect, not the point

So "show me the packs" and "go get this season" are the same POST. The deck's re-search button means whichever of the two the season happens to be in, and the operator cannot tell which they are about to get.

This issue only made the deck honest about what it is looking at. It did not split the endpoint. Worth its own issue.

One thing landed here that touches it: seasons.last_pack_search_at is written inside search, so both paths stamp it as long as the selector is season-scoped. Whatever the split ends up looking like, the deck's evidence does not move with it.

Filing the note from the issue body as its own thing rather than widening this one. `search_season_now` still has two paths, and they are different products behind one endpoint: - a season with no gaps runs a season-scoped search, stores the results and returns — it populates the deck - a season with gaps calls `grab_season`, which searches and then grabs — the deck is a side effect, not the point So "show me the packs" and "go get this season" are the same POST. The deck's re-search button means whichever of the two the season happens to be in, and the operator cannot tell which they are about to get. This issue only made the deck honest about what it is looking at. It did not split the endpoint. Worth its own issue. One thing landed here that touches it: `seasons.last_pack_search_at` is written inside `search`, so both paths stamp it as long as the selector is season-scoped. Whatever the split ends up looking like, the deck's evidence does not move with it.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yolo/arr#182