Upstream review, 2026-09-19
Source: seerr-team/seerr develop at 59d5947b4df8591882bda70ae199f3a3480cc4da.
Base: Foreseerr github/develop at 339bd9bb (v0.9.1).
Each row records an individual review. Applied commits carry an Upstream-Commit trailer; skipped commits record why.
| Upstream commit | Decision | Foreseerr commit / reason |
|---|---|---|
1fd35f9a | Applied | 8b279581 — fix invalid alert nesting in TV request modal |
93c0b6a6 | Skipped | Already implemented: anime routing uses isAnime independent of seriesType; covered by existing test |
42bee2aa | Skipped | Already implemented: resolveSonarrSeriesRouting uses configured seriesType for non-anime requests; covered by existing test |
7baed837 | Skipped | Already implemented verbatim in Foreseerr 4906d7aa; scanner recognizes custom Plex provider GUIDs and resolves their external IDs |
090c659b | Applied | Suppress verbose stdout from GHCR and Docker Hub Cosign attestation checks; Foreseerr runs both checks in its release job |
c8c8f7a1 | Skipped | Seerr-only release bump (seerr-chart 3.9.1 / app v3.4.1); Foreseerr's own chart is 0.9.1 / v0.9.1, tied to its package and image versions by the release workflow and version-consistency check. |
dea59605 | Applied | Adapted AI disclosure and security-report guidance to Foreseerr; kept the Bun build command and pointed the PR-label response at Foreseerr's own policy. |
afb17aa4 | Skipped | Already ported in Foreseerr 87058c58 (included in 4906d7aa): Gotify settings toggle, Markdown poster image, client::notification.bigImageUrl, and English label are present; Gotify's default embedPoster: false and settings save path support the option. |
bd971f86 | Skipped | Node 22.23.2 Docker image pin does not apply: Foreseerr's production and local Dockerfiles use oven/bun:1.4.1-alpine for build and runtime, matching its Bun package scripts and lockfile. |
d3c070e1 | Skipped | Already ported in Foreseerr dce92404: Plex Web App URL tip names https://app.plex.tv/desktop, and the input suggests a server-hosted /web/index.html URL; both are present in the current UI and English locale. |
d103787a | Applied | Behavior already ported in Foreseerr 4906d7aa: both Emby UI buttons are hidden, all login and account-linking Quick Connect endpoints reject Emby, and new Quick Connect users are Jellyfin users. Adapted the remaining upstream account-linking regression tests; the three login endpoint guards already had tests. |
39ff48c6 | Skipped | Already ported verbatim in Foreseerr 4906d7aa: the General Settings Cypress suite resets trustProxy through /api/v1/settings/network in afterEach, so a failed test cannot leave the restart-required state for later tests. |
985ddef3 | Applied | Plex and Jellyfin library GETs now only read settings; explicit PUT toggles a single library and POST sync refreshes the list, so opening settings no longer disables libraries. Adapted the import conflict with Foreseerr's mapping settings route. |
c9f2ac58 | Applied | Plex and Jellyfin library sync now match saved settings by stable server library ID, preserving the enabled flag across a rename while updating the display name; Jellyfin also retains the existing lastScan value. Fits Foreseerr's explicit sync flow introduced by 985ddef3. |
4d17e08b | Applied | Propagate Plex and Jellyfin connection failures through sync and login, retain Plex library settings when migration cannot reach its server, and show the setup connection error. Adapted startup and setup UI conflicts to Foreseerr's managed runtime and React Router; changed the Jellyfin toast to name Foreseerr. |
059008cb | Applied | Adapted media subscriber request updates and nested status saves to use the owning TypeORM manager, retaining Foreseerr's episode request logic and existing transactional request lookups. SQLite keeps its shared manager; PostgreSQL uses a nested transaction. Added the PostgreSQL pool acquisition timeout and documented it. |
7fae95bb | Applied | Override lookup now uses the configured Radarr/Sonarr server ID instead of its array index, and skips lookup when no default exists. Adapted six request tests for Foreseerr's request flow; movie and TV overrides work with non-index IDs and ID 0. |
92f84043 | Applied | Guard regular and 4K collection availability checks against empty parts; Foreseerr has the same every() logic and otherwise shows empty collections as available. |
aae88167 | Applied | Added a debounced user-list search adapted to Foreseerr's React Router pagination; its existing q API searches username, email, Plex username, and Jellyfin username. Preserved Foreseerr's media-server import controls. |
59ad5f19 | Applied | Adapted a 15-minute, 2,000-entry TMDB scan tier within Foreseerr's existing shared 256 MiB weighted LRU budget; scanner TV and external-ID lookups use narrow responses, while anime metadata provider fallback remains intact. Dropped the redundant Plex GUID cache, requested inline GUIDs for recent movies, and stripped unread TV credits. Kept Foreseerr's cache implementation and node-cache dependency (still used by the Servarr route). |
92bad10c | Applied | Added optional comma-separated ntfy tags through settings, API schema, UI, and docs; the agent trims and omits empty tags before sending. Foreseerr uses the same ntfy integration, so the upstream change applies directly. |
a123d20b | Applied | Send Foreseerr/<version> on outbound Axios calls, including shared API, Tautulli, and image clients; preserve explicit service-specific or caller-provided User-Agent headers. |
5af32cb2 | Skipped | Already implemented in Foreseerr 66693021: both General and Network saves revalidate all /api/v1/status SWR keys, including the modal's /api/v1/status?checkUpdateAvailable=false key and the version-status variant. |
0be53e6e | Applied | Keep person results when hide-available or hide-blocklisted is enabled in both discover pages and mixed sliders; continue filtering movie/TV statuses. Foreseerr's trending results include people, and its extra AniList, Simkl, and MDBList sources may also have items without a declared media type, which these settings should not discard. |
2759058a | Applied | Adapted TMDB movie/TV sort lists and per-type query validation to Foreseerr's split Discover router; TV title sorting now uses original_name. Updated blocklisted-tag scans to use valid sort keys per media type and corrected page iteration, retaining Foreseerr's existing filtering and pagination. |
0f79ee66 | Applied | Adapted the test database guard so accidental seed/reset outside test mode fails before database access; the intentional Cypress prepare script opts in. Foreseerr already has generated explicit registration for its compiled binary (including 16 fork-specific entities), source globs exclude tests, and its server build excludes test files, so upstream's shorter hard-coded registry and build changes would regress fork coverage. |
cc592e8d | Applied | Added 30 Catalan server notification translations and corrected the movie label casing. All keys match the English catalog and preserve its interpolation variables; the {applicationTitle} messages use Foreseerr's configured title. Corrected two obvious translation typos. |
da4b555c | Applied | Removed appear from the Modal and SlideOver Transition.Child elements: Headless UI 1.7.19 forwards it to their DOM nodes. Parent Transition elements retain appear for entrance animations. |
d7b08bdd | Applied | Moved the PostgreSQL flag into an import-free module so entity decorators resolve timestamp columns without a datasource import cycle. Foreseerr's lazy datasource and release-state code also use this flag, so their imports were adapted. |
1cc2f116 | Applied | Upgraded Headless UI from 1.7.19 to 2.2.10 in Foreseerr's Bun manifest and lockfile. React 19 now satisfies its declared peer range. Added explicit div transition wrappers in the seven affected UI components and fixed the Jellyfin link modal's opacity class typo; retained Foreseerr's existing transition and fork-specific components. |
df743f46 | Applied | Matched the shared SlideOver backdrop's exit fade to its panel's 500 ms / 700 ms slide-out. The Headless UI 2.2.10 transition remains mounted through the longer child animation; the previous 300 ms backdrop fade could flash during close. This applies to Foreseerr's library and Servarr panels as well as Seerr-derived panels. |
aa8e0de0 | Applied | Switched shared Headless UI menus, listboxes, transitions, disclosure, and labels to flat named exports after the 2.2.10 upgrade. Kept Foreseerr's click-only dropdown button, custom item styles, and TV season test hook through conflict resolution. Left RadioGroup.Option for the following upstream Radio refactor. |
46d5915d | Applied | Replaced the issue modal's RadioGroup.Option with the Headless UI 2.2 Radio component and changed its focus indicator to use focus; Foreseerr retains the same issue-type selector and this was its only remaining RadioGroup.Option usage. |
7997f756 | Applied | Ignore scanner file counts for provider seasons with zero episodes, and compare the actual requestable season numbers in the TV page and modal so phantom specials cannot block requests. Adapted the TV page's coverage check to Foreseerr's episode requests: a processing season with an active partial episode request remains eligible for a full-season request. |
5f4cb1ea | Applied | SQLite's latest push-subscription table still enforced UNIQUE(auth) despite the entity requiring only UNIQUE(endpoint, userId). Added the upstream table rebuild, preserving rows, foreign key, and user index while removing the stale constraint; registered it for the compiled binary. |
9f6403e1 | Applied | Enforced pending-only edits and approve/decline, failed-only retry, and rejection of unsupported status verbs. These shared routes cover Foreseerr's movie, TV season, and episode requests; collection requests create individual movie requests. Preserved the episode-selection edit flow and documented the new responses. |
5a5f0590 | Applied | Updated 75 applicable pinned action references across the 17 affected workflows, including checkout, Docker, CodeQL, cache, Helm, Cypress, and release tooling. Foreseerr's Bun setup and lockfile references replace upstream's pnpm/Node actions, and its job permissions and release behavior remain intact. |
5c04640b | Applied | Applied all 531 changed translation entries across 12 locales. Adapted 20 entries for Foreseerr branding or small wording corrections, retaining the fork's existing branded strings where upstream overlapped them. All files parse as JSON; all changed nonempty messages parse as ICU and match English interpolation arguments where an English key exists. |
e73825b2 | Applied | Load the issue reporter when fetching a new comment so comment webhook payloads can resolve reportedBy_settings_discordIds; Foreseerr has the same explicit relation and webhook field. |
970bb545 | Applied | Reset orphaned pending/processing TV season status after request deletion, limited to the removed request's seasons and quality. Adapted coverage checks for Foreseerr's episode requests: an active episode request keeps its season processing, while deleting the last episode request also clears its orphaned season. Request-route regressions cover re-requesting, other seasons, 4K isolation, and overlapping requests. |
17fc4cc6 | Applied | Full-season request edits now add only seasons that are not held by another active request of the same quality. Foreseerr's episode-selection edit path is separate; the route regression verifies both requests keep their own seasons. |
d7dc7bdd | Applied | Serialized the full request flow per target user, so concurrent collection movie requests count toward quota and duplicate movies are rejected after the first save. The shared entry point also covers Foreseerr's full-season and episode requests; its existing series-quality lock remains nested only for rolling episode selections. Foreseerr's AsyncLock already returned generic callback results, so only the request wrapper and its dedicated lock were needed. Added concurrent quota and duplicate regressions. |
a4f5eaa2 | Applied | Added no-new-privileges and cap-drop ALL to the Unix and Windows Docker CLI and Compose examples, retaining Foreseerr's image, volume, health check, and Bun runtime. The production image already runs as unprivileged bun and listens on port 5055, so these hardening options fit its documented startup. |
c604bccc | Applied | Scoped both request card layouts, including their missing-title states, to the request's own TV seasons or exact Foreseerr episode selections; movie downloads remain unfiltered. Excluded TV downloads without episode metadata and empty TV selections to avoid showing unrelated series progress. Added focused regressions and included client utility tests in the default Bun test run. |
6bf3d048 | Applied | Updated 35 applicable pinned Action references across 17 Foreseerr workflows: checkout v7, cache v6, stale v11, and the issue-index artifact downloader v24. Upstream's setup-node v7 changes do not apply because these jobs use Bun. Preserved Foreseerr's jobs, permissions, cache keys, and release flow. |
979978fc | Applied | TypeORM 0.3.31 was already pinned in Foreseerr. Updated the remaining PostgreSQL driver pin from pg 8.20.0 to 8.23.0 and regenerated the Bun lockfile, including its pg-cloudflare, pg-connection-string, pg-pool, and pg-protocol updates. Kept Foreseerr's Bun package manager and existing database configuration. |
a3dbbd94 | Applied | Updated the six applicable pinned Action references in CI, CodeQL, tag creation, and Trivy scanning to the upstream versions. Foreseerr runs these same actions; its Bun test command, workflow jobs, permissions, and release flow are unchanged. |
5f972275 | Applied | Applied all three Catalan web push translations, changing formal address to the informal form already used in Foreseerr's Catalan email notifications. The same keys and interpolation placeholders are present in the fork, with no Seerr branding. |
6f5a1773 | Applied | Added the optional hide-requested setting across public settings, General Settings, API schema, and docs. Mark pending or approved requests on TMDB Discover, collection, recommendation, and similar results; search remains unfiltered. Adapted Foreseerr's AniList, Simkl, Trakt, MDBList, and Plex Discover tiles and sliders to hide mapped active requests while retaining unmapped items and people. Verified movie/TV ID separation and request status transitions with a database regression. |
68c5bc8c | Applied | Added 25 Ukrainian server notification translations and the Catalan auto-approved wording update. The notification keys are shared by Foreseerr, contain no Seerr branding, and are unrelated to the hide-requested setting. Corrected upstream's translated {тип} token to the required {type} interpolation; all added keys and placeholders now match the English catalog. |
1dbf19b8 | Applied | Skip TMDB seasons with zero episodes in the server's seasons: 'all' request path. Foreseerr's modal and TV availability checks already exclude empty seasons, but its quick-request API still included them, creating phantom season requests and quota usage; episode selections remain separate. Added a saved-request regression for season numbers and quota units. |
4fc265b6 | Applied | Removed the duplicate tag-based Cosign command from the Kubernetes guide; its digest-based chart guide already used Foreseerr's correct helm.yml@refs/heads/develop identity. Corrected image wording, workflow name, package link, unsupported chart SBOM attestation, and Seerr 3.x example tags to the published foreseerr-chart:0.9.0 (registry digest confirmed). |
de57e7ac | Skipped | Already implemented in Foreseerr e86ed8f3: Jellyfin/Emby logout device deletion sends the shared Foreseerr MediaBrowser header as Authorization (including the API token) rather than X-Emby-Authorization. The existing logout regression checks the header and device ID; Foreseerr's session and desktop logout behavior is retained. |
7a76142a | Applied | Added the upstream mock-timer helper to Foreseerr's Jellyfin, Radarr, and Sonarr scanner tests, replacing their direct scan runs. Foreseerr retains its 4-second production scan interval and Bun test runner; all 37 affected tests pass with timers advanced during each scan. |
a53f49bd | Applied | Forward invalid avatar IDs and proxy fetch failures to the HTTP error handler so requests finish; delegate errors after headers have been sent. Applied the same handling to Foreseerr's additional AniList/Simkl image proxy validation, preserving its host allowlist, cache headers, and 400/403 statuses. |
abe2f3bb | Applied | Block outbound HTTP/HTTPS in unit tests, plus Bun fetch, and fail the suite if a swallowed call still reached the network. Stubbed imported scanner TMDB instances; restored MediaRequest.request after the watchlist suite so later files are not left with a stub. Live Simkl checks skip unless ALLOW_NETWORK=true. |
d4eeea85 | Applied | Refresh the Jellyfin avatar on Quick Connect login the same way password login already does, skipping the desktop runtime so a slow media-server image route cannot stall the session response. Route regression covers a changed remote avatar. |
b2116523 | Applied | Drop the unused media-server auth header from the avatar ImageProxy. Foreseerr had already switched that header to Authorization / MediaBrowser; the proxy still does not need it to fetch avatars. |
34b28d0a | Applied | Confirm PROCESSING movies/shows against Radarr/Sonarr by TMDB/TVDB id before orphan cleanup. A lookup miss still resets; a hit or unreachable server leaves the item processing. Scanner tests use Foreseerr mock timers. |
2bebae83 | Applied | Remap leftover Overseerr DELETED=6 media/season rows to Seerr DELETED=7, leaving true blocklist rows at 6. Registered the SQLite and Postgres migrations in the compiled binary registry. |
6fa7473d | Applied | Replace dawidd6/action-download-artifact in the duplicate-issue workflow with actions/download-artifact plus a gh lookup of the last successful index rebuild. Foreseerr still installs the detector with Bun. |
59d5947b | Applied | Register push subscriptions by endpoint, rotate stale rows by auth instead of user-agent, resubscribe only when the browser subscription belongs to this user, and time-box push cleanup on logout. Adapted to Foreseerr's React Router dropdown. |