Skip to content

fix(qbittorrent): serve stale app info/preferences when refresh fails - #2054

Merged
s0up4200 merged 2 commits into
developfrom
fix/qbit-slow-instance-resilience
Jun 25, 2026
Merged

fix(qbittorrent): serve stale app info/preferences when refresh fails#2054
s0up4200 merged 2 commits into
developfrom
fix/qbit-slow-instance-resilience

Conversation

@s0up4200

@s0up4200 s0up4200 commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator

When a qBittorrent WebUI is saturated, the per-torrent-stream GetAppInfo/GetAppPreferences refreshes time out and currently fail the whole stream tick (the Failed to retrieve qBittorrent app info/preferences for torrent stream log noise). This serves the last-known cached value on refresh error instead, surfacing the error only when nothing is cached — mirroring the existing active_tasks serve-stale pattern.

Related to #2052 (broader graceful-degradation work); this is the small standalone piece.

Summary by CodeRabbit

Release Notes

  • Bug Fixes

    • Enhanced error handling to gracefully serve previously cached data when refresh operations fail, improving app resilience and availability instead of returning errors immediately.
  • Tests

    • Added test coverage for cache fallback scenarios during refresh failures.

On a saturated qBittorrent WebUI the per-stream app version and preferences refreshes time out and currently fail the whole torrent stream tick. Serve the last-known cached value on refresh error instead, surfacing the error only when nothing is cached. Mirrors the existing active-task serve-stale pattern.
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: df23e4ca-bb57-4d00-ad3f-7c5ca003b041

📥 Commits

Reviewing files that changed from the base of the PR and between c7e08b9 and 5d9bc4f.

📒 Files selected for processing (4)
  • internal/qbittorrent/app_info.go
  • internal/qbittorrent/app_info_test.go
  • internal/qbittorrent/preferences.go
  • internal/qbittorrent/preferences_test.go

Walkthrough

GetAppInfo and GetAppPreferences are both refactored to clone and evaluate their cached state under the read lock, release the lock, and—when a cache refresh fails—return the stale cached value with a debug log instead of propagating the error. If no cached value exists, the refresh error is still returned. Two new test files cover both branches for each method.

Changes

Stale cache fallback for AppInfo and AppPreferences

Layer / File(s) Summary
GetAppInfo stale-cache fallback
internal/qbittorrent/app_info.go
Clones cached AppInfo and computes freshness under RLock; on refresh failure returns stale cache with debug log (including instanceID), or returns the error when no cache exists.
GetAppInfo tests
internal/qbittorrent/app_info_test.go
Adds TestGetAppInfoServesStaleCacheWhenRefreshFails and TestGetAppInfoReturnsErrorWhenNoCacheAndRefreshFails, covering the stale-fallback and no-cache-error paths via a pre-canceled context.
GetAppPreferences stale-cache fallback
internal/qbittorrent/preferences.go
Same structural refactor as GetAppInfo: clones and checks freshness under preferencesMu.RLock, falls back to stale preferences with zerolog/log debug log on refresh failure, or returns the error with no cache.
GetAppPreferences tests
internal/qbittorrent/preferences_test.go
New test file with TestGetAppPreferencesServesStaleCacheWhenRefreshFails and TestGetAppPreferencesReturnsErrorWhenNoCacheAndRefreshFails, mirroring the same two scenarios.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

Poem

🐇 When the refresh fails and the network's slow,
I won't throw errors—I'll use what I know!
A stale old cache is better than none,
I'll log a debug and keep the stream spun.
No panics, no crashes—just calm bunny zen,
The tick keeps on ticking again and again! 🌿

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: serving stale cached app info/preferences when refresh fails, which is the primary purpose of modifications across four files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/qbit-slow-instance-resilience

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@s0up4200
s0up4200 merged commit 10e2d02 into develop Jun 25, 2026
7 checks passed
@s0up4200
s0up4200 deleted the fix/qbit-slow-instance-resilience branch June 25, 2026 10:01
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jun 26, 2026
…#160)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.21.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/7) for more information.

---

### Release Notes

<details>
<summary>autobrr/qui (ghcr.io/autobrr/qui)</summary>

### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0)

[Compare Source](autobrr/qui@v1.20.0...v1.21.0)

##### Changelog

##### New Features

- [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#&#8203;2060](autobrr/qui#2060)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#&#8203;2003](autobrr/qui#2003)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#&#8203;2006](autobrr/qui#2006)) ([@&#8203;luckylittle](https://github.com/luckylittle))
- [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#&#8203;2005](autobrr/qui#2005)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#&#8203;2011](autobrr/qui#2011)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#&#8203;2042](autobrr/qui#2042)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#&#8203;2032](autobrr/qui#2032)) ([@&#8203;rodion981](https://github.com/rodion981))
- [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#&#8203;2057](autobrr/qui#2057)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#&#8203;2062](autobrr/qui#2062)) ([@&#8203;jussaw](https://github.com/jussaw))

##### Bug Fixes

- [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#&#8203;2008](autobrr/qui#2008)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#&#8203;2017](autobrr/qui#2017)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#&#8203;2029](autobrr/qui#2029)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#&#8203;2002](autobrr/qui#2002)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#&#8203;2015](autobrr/qui#2015)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#&#8203;2051](autobrr/qui#2051)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#&#8203;2013](autobrr/qui#2013)) ([@&#8203;nasenov](https://github.com/nasenov))
- [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#&#8203;2014](autobrr/qui#2014)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#&#8203;2056](autobrr/qui#2056)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#&#8203;2044](autobrr/qui#2044)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#&#8203;2054](autobrr/qui#2054)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#&#8203;2065](autobrr/qui#2065)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#&#8203;2047](autobrr/qui#2047)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#&#8203;2037](autobrr/qui#2037)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#&#8203;2018](autobrr/qui#2018)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#&#8203;2024](autobrr/qui#2024)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#&#8203;2025](autobrr/qui#2025)) ([@&#8203;OlziYT](https://github.com/OlziYT))

##### Other Changes

- [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#&#8203;2045](autobrr/qui#2045)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#&#8203;2031](autobrr/qui#2031)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#&#8203;1984](autobrr/qui#1984)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#&#8203;2009](autobrr/qui#2009)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#&#8203;1931](autobrr/qui#1931)) ([#&#8203;1998](autobrr/qui#1998)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))

**Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0>

##### Docker images

- `docker pull ghcr.io/autobrr/qui:v1.21.0`
- `docker pull ghcr.io/autobrr/qui:latest`

##### What to do next?

- Join our [Discord server](https://discord.autobrr.com/qui)

Thank you for using qui!

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/160
hbjydev pushed a commit to hbjydev/phoebe that referenced this pull request Jul 10, 2026
… (#200)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.22.0` |

---

### Release Notes

<details>
<summary>autobrr/qui (ghcr.io/autobrr/qui)</summary>

### [`v1.22.0`](https://github.com/autobrr/qui/releases/tag/v1.22.0)

[Compare Source](autobrr/qui@v1.21.0...v1.22.0)

##### Changelog

##### New Features

- [`5b9326e`](autobrr/qui@5b9326e): feat(web): add copy path option to content tab context menu ([#&#8203;933](autobrr/qui#933)) ([@&#8203;lenisko](https://github.com/lenisko))
- [`3a4383d`](autobrr/qui@3a4383d): feat(web): add kanagawa themes ([#&#8203;2069](autobrr/qui#2069)) ([@&#8203;notmarek](https://github.com/notmarek))
- [`db77a17`](autobrr/qui@db77a17): feat(web): shift+click range select in torrent content tab ([#&#8203;2081](autobrr/qui#2081)) ([@&#8203;jussaw](https://github.com/jussaw))

##### Bug Fixes

- [`b563d4b`](autobrr/qui@b563d4b): fix(sync): keep SSE aggregates fresh without tracker hydration ([#&#8203;2072](autobrr/qui#2072)) ([@&#8203;Audionut](https://github.com/Audionut))

##### Other Changes

- [`d428313`](autobrr/qui@d428313): chore(deps): bump the github group with 5 updates ([#&#8203;2073](autobrr/qui#2073)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])

**Full Changelog**: <autobrr/qui@v1.21.0...v1.22.0>

##### Docker images

- `docker pull ghcr.io/autobrr/qui:v1.22.0`
- `docker pull ghcr.io/autobrr/qui:latest`

##### What to do next?

- Join our [Discord server](https://discord.autobrr.com/qui)

Thank you for using qui!

### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0)

[Compare Source](autobrr/qui@v1.20.0...v1.21.0)

##### Changelog

##### New Features

- [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#&#8203;2060](autobrr/qui#2060)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#&#8203;2003](autobrr/qui#2003)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#&#8203;2006](autobrr/qui#2006)) ([@&#8203;luckylittle](https://github.com/luckylittle))
- [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#&#8203;2005](autobrr/qui#2005)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#&#8203;2011](autobrr/qui#2011)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#&#8203;2042](autobrr/qui#2042)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#&#8203;2032](autobrr/qui#2032)) ([@&#8203;rodion981](https://github.com/rodion981))
- [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#&#8203;2057](autobrr/qui#2057)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#&#8203;2062](autobrr/qui#2062)) ([@&#8203;jussaw](https://github.com/jussaw))

##### Bug Fixes

- [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#&#8203;2008](autobrr/qui#2008)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#&#8203;2017](autobrr/qui#2017)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#&#8203;2029](autobrr/qui#2029)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#&#8203;2002](autobrr/qui#2002)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#&#8203;2015](autobrr/qui#2015)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#&#8203;2051](autobrr/qui#2051)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#&#8203;2013](autobrr/qui#2013)) ([@&#8203;nasenov](https://github.com/nasenov))
- [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#&#8203;2014](autobrr/qui#2014)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#&#8203;2056](autobrr/qui#2056)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#&#8203;2044](autobrr/qui#2044)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#&#8203;2054](autobrr/qui#2054)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#&#8203;2065](autobrr/qui#2065)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#&#8203;2047](autobrr/qui#2047)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#&#8203;2037](autobrr/qui#2037)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#&#8203;2018](autobrr/qui#2018)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#&#8203;2024](autobrr/qui#2024)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#&#8203;2025](autobrr/qui#2025)) ([@&#8203;OlziYT](https://github.com/OlziYT))

##### Other Changes

- [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#&#8203;2045](autobrr/qui#2045)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#&#8203;2031](autobrr/qui#2031)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#&#8203;1984](autobrr/qui#1984)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#&#8203;2009](autobrr/qui#2009)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#&#8203;1931](autobrr/qui#1931)) ([#&#8203;1998](autobrr/qui#1998)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))

**Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0>

##### Docker images

- `docker pull ghcr.io/autobrr/qui:v1.21.0`
- `docker pull ghcr.io/autobrr/qui:latest`

##### What to do next?

- Join our [Discord server](https://discord.autobrr.com/qui)

Thank you for using qui!

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/London)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Reviewed-on: https://forgejo.hayden.moe/hayden/phoebe/pulls/200
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 20, 2026
…#160)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.21.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/7) for more information.

---

### Release Notes

<details>
<summary>autobrr/qui (ghcr.io/autobrr/qui)</summary>

### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0)

[Compare Source](autobrr/qui@v1.20.0...v1.21.0)

##### Changelog

##### New Features

- [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#&#8203;2060](autobrr/qui#2060)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#&#8203;2003](autobrr/qui#2003)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#&#8203;2006](autobrr/qui#2006)) ([@&#8203;luckylittle](https://github.com/luckylittle))
- [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#&#8203;2005](autobrr/qui#2005)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#&#8203;2011](autobrr/qui#2011)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#&#8203;2042](autobrr/qui#2042)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#&#8203;2032](autobrr/qui#2032)) ([@&#8203;rodion981](https://github.com/rodion981))
- [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#&#8203;2057](autobrr/qui#2057)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#&#8203;2062](autobrr/qui#2062)) ([@&#8203;jussaw](https://github.com/jussaw))

##### Bug Fixes

- [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#&#8203;2008](autobrr/qui#2008)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#&#8203;2017](autobrr/qui#2017)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#&#8203;2029](autobrr/qui#2029)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#&#8203;2002](autobrr/qui#2002)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#&#8203;2015](autobrr/qui#2015)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#&#8203;2051](autobrr/qui#2051)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#&#8203;2013](autobrr/qui#2013)) ([@&#8203;nasenov](https://github.com/nasenov))
- [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#&#8203;2014](autobrr/qui#2014)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#&#8203;2056](autobrr/qui#2056)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#&#8203;2044](autobrr/qui#2044)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#&#8203;2054](autobrr/qui#2054)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#&#8203;2065](autobrr/qui#2065)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#&#8203;2047](autobrr/qui#2047)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#&#8203;2037](autobrr/qui#2037)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#&#8203;2018](autobrr/qui#2018)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#&#8203;2024](autobrr/qui#2024)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#&#8203;2025](autobrr/qui#2025)) ([@&#8203;OlziYT](https://github.com/OlziYT))

##### Other Changes

- [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#&#8203;2045](autobrr/qui#2045)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#&#8203;2031](autobrr/qui#2031)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#&#8203;1984](autobrr/qui#1984)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#&#8203;2009](autobrr/qui#2009)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#&#8203;1931](autobrr/qui#1931)) ([#&#8203;1998](autobrr/qui#1998)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))

**Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0>

##### Docker images

- `docker pull ghcr.io/autobrr/qui:v1.21.0`
- `docker pull ghcr.io/autobrr/qui:latest`

##### What to do next?

- Join our [Discord server](https://discord.autobrr.com/qui)

Thank you for using qui!

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/160
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 28, 2026
…#160)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.21.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/7) for more information.

---

### Release Notes

<details>
<summary>autobrr/qui (ghcr.io/autobrr/qui)</summary>

### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0)

[Compare Source](autobrr/qui@v1.20.0...v1.21.0)

##### Changelog

##### New Features

- [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#&#8203;2060](autobrr/qui#2060)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#&#8203;2003](autobrr/qui#2003)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#&#8203;2006](autobrr/qui#2006)) ([@&#8203;luckylittle](https://github.com/luckylittle))
- [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#&#8203;2005](autobrr/qui#2005)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#&#8203;2011](autobrr/qui#2011)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#&#8203;2042](autobrr/qui#2042)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#&#8203;2032](autobrr/qui#2032)) ([@&#8203;rodion981](https://github.com/rodion981))
- [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#&#8203;2057](autobrr/qui#2057)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#&#8203;2062](autobrr/qui#2062)) ([@&#8203;jussaw](https://github.com/jussaw))

##### Bug Fixes

- [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#&#8203;2008](autobrr/qui#2008)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#&#8203;2017](autobrr/qui#2017)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#&#8203;2029](autobrr/qui#2029)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#&#8203;2002](autobrr/qui#2002)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#&#8203;2015](autobrr/qui#2015)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#&#8203;2051](autobrr/qui#2051)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#&#8203;2013](autobrr/qui#2013)) ([@&#8203;nasenov](https://github.com/nasenov))
- [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#&#8203;2014](autobrr/qui#2014)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#&#8203;2056](autobrr/qui#2056)) ([@&#8203;jussaw](https://github.com/jussaw))
- [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#&#8203;2044](autobrr/qui#2044)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#&#8203;2054](autobrr/qui#2054)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#&#8203;2065](autobrr/qui#2065)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#&#8203;2047](autobrr/qui#2047)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#&#8203;2037](autobrr/qui#2037)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#&#8203;2018](autobrr/qui#2018)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#&#8203;2024](autobrr/qui#2024)) ([@&#8203;OlziYT](https://github.com/OlziYT))
- [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#&#8203;2025](autobrr/qui#2025)) ([@&#8203;OlziYT](https://github.com/OlziYT))

##### Other Changes

- [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#&#8203;2045](autobrr/qui#2045)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#&#8203;2031](autobrr/qui#2031)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#&#8203;1984](autobrr/qui#1984)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))
- [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#&#8203;2009](autobrr/qui#2009)) ([@&#8203;s0up4200](https://github.com/s0up4200))
- [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#&#8203;1931](autobrr/qui#1931)) ([#&#8203;1998](autobrr/qui#1998)) ([@&#8203;nitrobass24](https://github.com/nitrobass24))

**Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0>

##### Docker images

- `docker pull ghcr.io/autobrr/qui:v1.21.0`
- `docker pull ghcr.io/autobrr/qui:latest`

##### What to do next?

- Join our [Discord server](https://discord.autobrr.com/qui)

Thank you for using qui!

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/160
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant