Repository navigation
fix: sync follow-ups: episode reviews, TV entries and rate limits - #156
Merged
Merged
Conversation
builtbyproxy
added this pull request to stack #150
October 8, 2026 00:16
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
from
October 8, 2026 02:15
0985b6f to
05467b9
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
3 times, most recently
from
October 8, 2026 02:22
30615ee to
eaa9860
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
2 times, most recently
from
October 8, 2026 02:26
a5f7767 to
511d37e
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
from
October 8, 2026 02:28
511d37e to
941b623
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
from
October 8, 2026 02:30
941b623 to
adc3a14
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
2 times, most recently
from
October 8, 2026 02:33
3db59c2 to
c74f32a
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
2 times, most recently
from
October 8, 2026 02:39
7b8b769 to
5ee4e9d
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
2 times, most recently
from
October 8, 2026 02:44
cb77156 to
c3b9b26
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
from
October 8, 2026 02:47
c3b9b26 to
629a7ae
Compare
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
from
October 8, 2026 02:50
629a7ae to
9fb091f
Compare
…and let a stopped sync cancel its network waits
…including shows Serializd lists as one season
…MDb button, keep the not-a-film marker out of cache reads, and leave usernames out of the rate-limit log
…V, cancel test waits from inside the request, check the dashboards' history page size against the cap, and tighten the telemetry spec
…lient waits as a block, so a Letterboxd run stops after a few instead of trying every film
… entries as movies
builtbyproxy
force-pushed
the
audit/stack-09-sync-followups
branch
from
October 8, 2026 02:53
9fb091f to
4aa6b51
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Layer 11 of the audit fix stack (releases 2.11.1). Fixes audit findings COR-16, COR-17 and REL-15, plus two smaller items found while building earlier layers (the History page cap and the telemetry spec's start window). Stacked on #154.
COR-17, checked against live markup: on letterboxd.com today a TV entry Letterboxd lists as a film (for example Chernobyl) has
data-tmdb-type="movie"and an emptydata-tmdb-id, and only its TMDb button links tothemoviedb.org/tv/. So the collision the audit predicted does not happen with today's markup (the empty id is never mapped). This PR hardens the reader anyway: the TMDb button decides, and the tests model the real markup of both kinds of page.Release notes
Jellyscribe is steadier when Letterboxd or Serializd ask it to slow down. A rate-limit pause is honoured for up to a minute. Anything longer skips the film or episode until the next sync, and a Letterboxd sync that keeps hitting the limit stops early instead of trying every film. Letterboxd retries are now accepted instead of refused as a repeat. Stopping a sync, or restarting Jellyfin, no longer waits out a long pause. When you sign in with your Letterboxd website login, a TV series that Letterboxd lists as a film can no longer be mistaken for a movie with the same TMDb number, so the wrong film is never marked watched or rated. A Serializd review of an episode now lands on the same episode a log would: for a show Serializd lists as a single season, it goes to the right episode of that season, and it is refused if Serializd has no such episode. The activity lists on both dashboards show the full page they ask for again.
What's broken
GET Historycaps a page at 200 rows while both dashboards ask for 250.Why it happens
Retry-Afterwith no upper bound and no cancellation token. No service method the runners call took a token.urlthat already carried the first attempt's signature.data-tmdb-idwithout itsdata-tmdb-type. The API path already skipped/tv/links.SerializdSeasonFallback.What this PR does
RetryAfterLimit, which reads seconds or a date).CancellationTokenparameters to the service methods the runners call, and every scheduled runner and the rating handler pass theirs.data-tmdb-type(or, failing that, the TMDb button's/tv/link) and skips TV entries.SerializdSeasonFallback, with season lengths from the caller's own library.GET Historyserves up to 250 rows.How it was tested
CancelledRun_RecordsNoFailurenow matches the run's own token.