chore(release): v0.13.3

Resuming the app after time in the background no longer replaces the page
on screen with "Failed to load item".
This commit is contained in:
2026-09-24 07:40:35 -04:00
parent d7136aef48
commit dde3406113
6 changed files with 91 additions and 48 deletions
+12
View File
@@ -9,6 +9,18 @@ generated trace matrix lives in [docs/traceability.md](docs/traceability.md).
For how long each fixed defect had been shipping before it was found, see
[docs/defect-windows.md](docs/defect-windows.md).
## v0.13.3
### 🐛 Fixes
- **Coming back to the app no longer replaces the page with "Failed to load
item".** After a few minutes in the background, resuming the app on a series
page could swap the whole page for that error, and it stayed until you
navigated away. The page refreshes itself on resume; a refresh that fails now
leaves what you were looking at on screen, and the error clears as soon as a
load succeeds. When a page genuinely cannot open, it now says why instead of
the generic message. (DR-297)
## v0.13.2
A series opens with its episodes in under a second. v0.13.1 fixed the season
+75 -44
View File
@@ -1,15 +1,15 @@
# Code Traceability Matrix
**Generated:** 9/24/2026, 4:46:58 AM
**Generated:** 9/24/2026, 7:40:34 AM
## Summary
- **Total Files Scanned:** 444
- **Total TRACES Found:** 1458
- **Total Files Scanned:** 446
- **Total TRACES Found:** 1460
- **Requirements Covered:**
- User Requirements (UR): 84
- Integration Requirements (IR): 27
- Development Requirements (DR): 252
- Development Requirements (DR): 253
- Jellyfin API Requirements (JA): 35
## Requirements by Type
@@ -26,7 +26,7 @@ IR-003, IR-004, IR-006, IR-008, IR-009, IR-010, IR-011, IR-012, IR-013, IR-014,
### Development Requirements (DR)
```
DR-001, DR-002, DR-003, DR-004, DR-005, DR-006, DR-007, DR-009, DR-010, DR-011, DR-012, DR-013, DR-014, DR-015, DR-016, DR-017, DR-018, DR-020, DR-021, DR-022, DR-023, DR-024, DR-025, DR-026, DR-027, DR-028, DR-029, DR-030, DR-032, DR-033, DR-034, DR-035, DR-036, DR-037, DR-038, DR-039, DR-040, DR-041, DR-042, DR-043, DR-044, DR-045, DR-047, DR-048, DR-049, DR-050, DR-051, DR-052, DR-053, DR-054, DR-055, DR-056, DR-057, DR-058, DR-059, DR-060, DR-061, DR-062, DR-063, DR-064, DR-065, DR-066, DR-067, DR-068, DR-069, DR-070, DR-074, DR-075, DR-076, DR-077, DR-078, DR-079, DR-080, DR-081, DR-082, DR-083, DR-084, DR-085, DR-086, DR-087, DR-088, DR-089, DR-090, DR-091, DR-092, DR-093, DR-095, DR-096, DR-097, DR-098, DR-099, DR-100, DR-101, DR-102, DR-103, DR-104, DR-105, DR-106, DR-107, DR-108, DR-109, DR-110, DR-111, DR-112, DR-113, DR-114, DR-115, DR-116, DR-117, DR-118, DR-119, DR-120, DR-121, DR-123, DR-126, DR-127, DR-128, DR-129, DR-130, DR-131, DR-132, DR-133, DR-134, DR-135, DR-136, DR-137, DR-140, DR-141, DR-142, DR-143, DR-147, DR-148, DR-149, DR-150, DR-151, DR-152, DR-153, DR-154, DR-155, DR-156, DR-157, DR-158, DR-159, DR-160, DR-162, DR-167, DR-168, DR-169, DR-170, DR-171, DR-173, DR-174, DR-175, DR-176, DR-177, DR-178, DR-179, DR-180, DR-181, DR-182, DR-183, DR-185, DR-186, DR-188, DR-189, DR-193, DR-195, DR-196, DR-197, DR-198, DR-201, DR-203, DR-204, DR-205, DR-206, DR-207, DR-209, DR-210, DR-211, DR-212, DR-213, DR-215, DR-216, DR-217, DR-218, DR-219, DR-220, DR-221, DR-223, DR-224, DR-225, DR-226, DR-227, DR-228, DR-230, DR-231, DR-232, DR-233, DR-234, DR-235, DR-238, DR-239, DR-240, DR-241, DR-242, DR-243, DR-244, DR-245, DR-246, DR-250, DR-251, DR-252, DR-253, DR-254, DR-255, DR-256, DR-257, DR-258, DR-259, DR-262, DR-263, DR-264, DR-265, DR-266, DR-267, DR-268, DR-269, DR-270, DR-271, DR-272, DR-274, DR-276, DR-277, DR-278, DR-279, DR-280, DR-281, DR-282, DR-283, DR-284, DR-285, DR-286, DR-287, DR-288, DR-289, DR-290, DR-291, DR-292, DR-293, DR-294, DR-295, DR-296
DR-001, DR-002, DR-003, DR-004, DR-005, DR-006, DR-007, DR-009, DR-010, DR-011, DR-012, DR-013, DR-014, DR-015, DR-016, DR-017, DR-018, DR-020, DR-021, DR-022, DR-023, DR-024, DR-025, DR-026, DR-027, DR-028, DR-029, DR-030, DR-032, DR-033, DR-034, DR-035, DR-036, DR-037, DR-038, DR-039, DR-040, DR-041, DR-042, DR-043, DR-044, DR-045, DR-047, DR-048, DR-049, DR-050, DR-051, DR-052, DR-053, DR-054, DR-055, DR-056, DR-057, DR-058, DR-059, DR-060, DR-061, DR-062, DR-063, DR-064, DR-065, DR-066, DR-067, DR-068, DR-069, DR-070, DR-074, DR-075, DR-076, DR-077, DR-078, DR-079, DR-080, DR-081, DR-082, DR-083, DR-084, DR-085, DR-086, DR-087, DR-088, DR-089, DR-090, DR-091, DR-092, DR-093, DR-095, DR-096, DR-097, DR-098, DR-099, DR-100, DR-101, DR-102, DR-103, DR-104, DR-105, DR-106, DR-107, DR-108, DR-109, DR-110, DR-111, DR-112, DR-113, DR-114, DR-115, DR-116, DR-117, DR-118, DR-119, DR-120, DR-121, DR-123, DR-126, DR-127, DR-128, DR-129, DR-130, DR-131, DR-132, DR-133, DR-134, DR-135, DR-136, DR-137, DR-140, DR-141, DR-142, DR-143, DR-147, DR-148, DR-149, DR-150, DR-151, DR-152, DR-153, DR-154, DR-155, DR-156, DR-157, DR-158, DR-159, DR-160, DR-162, DR-167, DR-168, DR-169, DR-170, DR-171, DR-173, DR-174, DR-175, DR-176, DR-177, DR-178, DR-179, DR-180, DR-181, DR-182, DR-183, DR-185, DR-186, DR-188, DR-189, DR-193, DR-195, DR-196, DR-197, DR-198, DR-201, DR-203, DR-204, DR-205, DR-206, DR-207, DR-209, DR-210, DR-211, DR-212, DR-213, DR-215, DR-216, DR-217, DR-218, DR-219, DR-220, DR-221, DR-223, DR-224, DR-225, DR-226, DR-227, DR-228, DR-230, DR-231, DR-232, DR-233, DR-234, DR-235, DR-238, DR-239, DR-240, DR-241, DR-242, DR-243, DR-244, DR-245, DR-246, DR-250, DR-251, DR-252, DR-253, DR-254, DR-255, DR-256, DR-257, DR-258, DR-259, DR-262, DR-263, DR-264, DR-265, DR-266, DR-267, DR-268, DR-269, DR-270, DR-271, DR-272, DR-274, DR-276, DR-277, DR-278, DR-279, DR-280, DR-281, DR-282, DR-283, DR-284, DR-285, DR-286, DR-287, DR-288, DR-289, DR-290, DR-291, DR-292, DR-293, DR-294, DR-295, DR-296, DR-297
```
### Jellyfin API Requirements (JA)
@@ -2717,8 +2717,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 17 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L219)
- **Line:** 219
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L220)
- **Line:** 220
- **Context:** `Unknown`
- **File:** [`src/lib/api/repository-client.ts`](../src/lib/api/repository-client.ts#L157)
- **Line:** 157
@@ -2776,11 +2776,11 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L1)
- **Line:** 1
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L219)
- **Line:** 219
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L220)
- **Line:** 220
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L324)
- **Line:** 324
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L329)
- **Line:** 329
- **Context:** `async function handlePlayAll() {`
- **File:** [`src/lib/components/library/EpisodeRow.svelte`](../src/lib/components/library/EpisodeRow.svelte#L17)
- **Line:** 17
@@ -2802,8 +2802,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L1)
- **Line:** 1
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L135)
- **Line:** 135
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L136)
- **Line:** 136
- **Context:** `Unknown`
- **File:** [`src/routes/library/tv/+page.svelte`](../src/routes/library/tv/+page.svelte#L8)
- **Line:** 8
@@ -3191,8 +3191,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 15 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L617)
- **Line:** 617
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L622)
- **Line:** 622
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/ArtistDetailView.svelte`](../src/lib/components/library/ArtistDetailView.svelte#L138)
- **Line:** 138
@@ -3695,14 +3695,14 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L1)
- **Line:** 1
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L150)
- **Line:** 150
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L151)
- **Line:** 151
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L242)
- **Line:** 242
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L243)
- **Line:** 243
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L465)
- **Line:** 465
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L470)
- **Line:** 470
- **Context:** `Unknown`
- **File:** [`src/routes/search/+page.svelte`](../src/routes/search/+page.svelte#L97)
- **Line:** 97
@@ -3730,8 +3730,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 11 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L111)
- **Line:** 111
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L112)
- **Line:** 112
- **Context:** `Unknown`
- **File:** [`src/routes/library/music/+page.svelte`](../src/routes/library/music/+page.svelte#L71)
- **Line:** 71
@@ -5971,8 +5971,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 11 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L186)
- **Line:** 186
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L187)
- **Line:** 187
- **Context:** `Unknown`
- **File:** [`src/lib/api/bindings.ts`](../src/lib/api/bindings.ts#L2477)
- **Line:** 2477
@@ -6990,6 +6990,20 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **Line:** 947
- **Context:** `Unknown`
### DR-297
**Locations:** 3 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L1)
- **Line:** 1
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/detailLoadError.test.ts`](../src/lib/components/library/detailLoadError.test.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/detailLoadError.ts`](../src/lib/components/library/detailLoadError.ts#L27)
- **Line:** 27
- **Context:** `Unknown`
### JA-001
**Locations:** 1 file(s)
@@ -8608,8 +8622,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 54 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L186)
- **Line:** 186
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L187)
- **Line:** 187
- **Context:** `Unknown`
- **File:** [`src/routes/library/music/+page.svelte`](../src/routes/library/music/+page.svelte#L1)
- **Line:** 1
@@ -10556,8 +10570,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 30 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L111)
- **Line:** 111
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L112)
- **Line:** 112
- **Context:** `Unknown`
- **File:** [`src/routes/library/music/+page.svelte`](../src/routes/library/music/+page.svelte#L71)
- **Line:** 71
@@ -10950,14 +10964,14 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L1)
- **Line:** 1
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L150)
- **Line:** 150
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L151)
- **Line:** 151
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L242)
- **Line:** 242
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L243)
- **Line:** 243
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L465)
- **Line:** 465
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L470)
- **Line:** 470
- **Context:** `Unknown`
- **File:** [`src/routes/search/+page.svelte`](../src/routes/search/+page.svelte#L97)
- **Line:** 97
@@ -10983,19 +10997,19 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
### UR-062
**Locations:** 40 file(s)
**Locations:** 42 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L1)
- **Line:** 1
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L135)
- **Line:** 135
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L136)
- **Line:** 136
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L219)
- **Line:** 219
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L220)
- **Line:** 220
- **Context:** `Unknown`
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L324)
- **Line:** 324
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L329)
- **Line:** 329
- **Context:** `async function handlePlayAll() {`
- **File:** [`src/lib/api/repository-client.ts`](../src/lib/api/repository-client.ts#L157)
- **Line:** 157
@@ -11036,6 +11050,12 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **File:** [`src/lib/components/library/seriesNavigation.ts`](../src/lib/components/library/seriesNavigation.ts#L13)
- **Line:** 13
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/detailLoadError.test.ts`](../src/lib/components/library/detailLoadError.test.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/detailLoadError.ts`](../src/lib/components/library/detailLoadError.ts#L27)
- **Line:** 27
- **Context:** `Unknown`
- **File:** [`src/lib/utils/coalescedLoader.ts`](../src/lib/utils/coalescedLoader.ts#L15)
- **Line:** 15
- **Context:** `Unknown`
@@ -11364,8 +11384,8 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
**Locations:** 14 file(s)
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L617)
- **Line:** 617
- **File:** [`src/routes/library/[id]/+page.svelte`](../src/routes/library/[id]/+page.svelte#L622)
- **Line:** 622
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/ArtistDetailView.svelte`](../src/lib/components/library/ArtistDetailView.svelte#L138)
- **Line:** 138
@@ -15052,6 +15072,17 @@ JA-001, JA-002, JA-003, JA-004, JA-005, JA-006, JA-007, JA-008, JA-009, JA-010,
- **Line:** 7
- **Context:** `Unknown`
### UT-267
**Locations:** 2 file(s)
- **File:** [`src/lib/components/library/detailLoadError.test.ts`](../src/lib/components/library/detailLoadError.test.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src/lib/components/library/detailLoadError.ts`](../src/lib/components/library/detailLoadError.ts#L27)
- **Line:** 27
- **Context:** `Unknown`
### UR-054
**Locations:** 7 file(s)
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "jellytau",
"version": "0.13.2",
"version": "0.13.3",
"description": "A cross-platform Jellyfin client built with Tauri, SvelteKit and Rust.",
"author": "Duncan Tourolle <duncan@tourolle.paris>",
"license": "MIT",
+1 -1
View File
@@ -2275,7 +2275,7 @@ dependencies = [
[[package]]
name = "jellytau"
version = "0.13.2"
version = "0.13.3"
dependencies = [
"aes-gcm",
"argon2",
+1 -1
View File
@@ -4,7 +4,7 @@ name = "jellytau"
# `player-conformance`, and a second binary makes a bare `cargo run` —
# which `tauri dev` issues — ambiguous.
default-run = "jellytau"
version = "0.13.2"
version = "0.13.3"
description = "A cross-platform Jellyfin client"
authors = ["Duncan Tourolle <duncan@tourolle.paris>"]
license = "MIT"
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "JellyTau",
"version": "0.13.2",
"version": "0.13.3",
"identifier": "com.dtourolle.jellytau",
"build": {
"beforeDevCommand": "bun run dev",