Files
jellytau/docs/traceability.md
T
dtourolle a26a853f01
Publish Documentation / Build & publish docs to gitea-pages (push) Successful in 5m33s
Traceability Validation / Check Requirement Traces (push) Successful in 25s
🏗️ Build and Test JellyTau / Run Tests (push) Successful in 17m25s
Build & Release / Run Tests (push) Successful in 6m7s
🏗️ Build and Test JellyTau / Android Compile Check (push) Successful in 8m38s
Build & Release / Build Linux (push) Successful in 19m23s
Build & Release / Build Windows (push) Successful in 13m43s
Build & Release / Build Android (push) Successful in 29m47s
Build & Release / Create Release (push) Successful in 19s
fix(player): advance background audio-only episodes in the backend (UR-040)
An episode played audio-only while the app was backgrounded stalled at the
episode boundary instead of advancing, and ExoPlayer parked in STATE_ENDED —
where any later play intent (lockscreen, headset, Bluetooth reconnect) replays
the ended item, surfacing as the episode randomly restarting.

End-of-playback is dispatched from two places and they disagreed. The Android
JNI callback carried the background-audio branch but can never reach it:
load_and_play sets EndReason::NewTrackLoaded at every load and nothing clears
it, so the first real end consumes it and the decision is always Stop. The call
that actually decides is the frontend's echo of the resulting PlaybackEnded into
player_on_playback_ended — and that path had no background-audio case at all, so
it started a countdown whose advance is a webview goto() that cannot start audio
while backgrounded.

Both dispatchers now share PlayerController::auto_advance_to_next_episode, so
they cannot drift apart again.

The handoff base offset moves from the BackgroundAudioOffset Tauri state onto
the controller, and the advance clears it: the next episode's stream is built
without StartTimeTicks, so its timeline is already absolute and a stale base
made player_exit_background_audio return old_base + position_in_new_episode.
Unreachable until the advance actually worked.

Tests (red before the fix):
- test_auto_advance_background_audio_episode_advances_in_backend
- test_auto_advance_foreground_video_episode_uses_countdown
- test_advance_to_next_episode_audio_only_clears_handoff_base

Bump to 0.2.9.
2026-08-02 18:10:18 +02:00

167 KiB

Code Traceability Matrix

Generated: 8/2/2026, 6:10:09 PM

Summary

  • Total Files Scanned: 305
  • Total TRACES Found: 338
  • Requirements Covered:
    • User Requirements (UR): 58
    • Integration Requirements (IR): 15
    • Development Requirements (DR): 90
    • Jellyfin API Requirements (JA): 24

Requirements by Type

User Requirements (UR)

UR-002, UR-003, UR-004, UR-005, UR-007, UR-008, UR-009, UR-010, UR-011, UR-012, UR-013, UR-014, UR-015, UR-016, UR-017, UR-018, UR-019, UR-020, UR-021, UR-022, UR-023, UR-024, UR-025, UR-026, UR-027, UR-028, UR-029, UR-030, UR-031, UR-032, UR-033, UR-034, UR-035, UR-036, UR-038, UR-039, UR-040, UR-041, UR-042, UR-043, UR-044, UR-045, UR-046, UR-047, UR-048, UR-049, UR-050, UR-051, UR-052, UR-053, UR-054, UR-055, UR-056, UR-057, UR-058, UR-059, UR-060, UR-061

Integration Requirements (IR)

IR-003, IR-004, IR-009, IR-010, IR-011, IR-012, IR-013, IR-014, IR-015, IR-020, IR-023, IR-025, IR-026, IR-027, IR-028

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-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

Jellyfin API Requirements (JA)

JA-001, JA-002, JA-003, JA-004, JA-005, JA-007, JA-010, JA-011, JA-012, JA-016, JA-017, JA-019, JA-020, JA-021, JA-022, JA-023, JA-024, JA-025, JA-026, JA-028, JA-029, JA-030, JA-031, JA-032

Detailed Mapping

IR-003

Locations: 2 file(s)

IR-004

Locations: 1 file(s)

IR-009

Locations: 6 file(s)

IR-010

Locations: 2 file(s)

IR-011

Locations: 1 file(s)

IR-012

Locations: 2 file(s)

IR-013

Locations: 3 file(s)

IR-014

Locations: 6 file(s)

IR-015

Locations: 1 file(s)

IR-020

Locations: 8 file(s)

IR-023

Locations: 1 file(s)

IR-025

Locations: 2 file(s)

IR-026

Locations: 1 file(s)

IR-027

Locations: 1 file(s)

IR-028

Locations: 1 file(s)

DR-001

Locations: 17 file(s)

DR-002

Locations: 2 file(s)

DR-003

Locations: 2 file(s)

DR-004

Locations: 9 file(s)

DR-005

Locations: 13 file(s)

DR-006

Locations: 2 file(s)

DR-007

Locations: 9 file(s)

DR-009

Locations: 12 file(s)

DR-010

Locations: 1 file(s)

DR-011

Locations: 9 file(s)

DR-012

Locations: 7 file(s)

DR-013

Locations: 5 file(s)

DR-014

Locations: 4 file(s)

DR-015

Locations: 6 file(s)

DR-016

Locations: 3 file(s)

DR-017

Locations: 3 file(s)

DR-018

Locations: 1 file(s)

DR-020

Locations: 8 file(s)

DR-021

Locations: 2 file(s)

DR-022

Locations: 1 file(s)

DR-023

Locations: 3 file(s)

DR-024

Locations: 4 file(s)

DR-025

Locations: 1 file(s)

DR-026

Locations: 2 file(s)

DR-027

Locations: 2 file(s)

DR-028

Locations: 18 file(s)

DR-029

Locations: 10 file(s)

DR-030

Locations: 18 file(s)

DR-032

Locations: 1 file(s)

DR-033

Locations: 2 file(s)

DR-034

Locations: 2 file(s)

DR-035

Locations: 7 file(s)

DR-036

Locations: 12 file(s)

DR-037

Locations: 12 file(s)

DR-038

Locations: 9 file(s)

DR-039

Locations: 8 file(s)

DR-040

Locations: 3 file(s)

DR-041

Locations: 2 file(s)

DR-043

Locations: 1 file(s)

DR-044

Locations: 1 file(s)

DR-045

Locations: 1 file(s)

DR-047

Locations: 15 file(s)

DR-048

Locations: 6 file(s)

DR-049

Locations: 1 file(s)

DR-050

Locations: 1 file(s)

DR-051

Locations: 3 file(s)

DR-052

Locations: 15 file(s)

DR-053

Locations: 1 file(s)

DR-054

Locations: 1 file(s)

DR-055

Locations: 2 file(s)

DR-056

Locations: 1 file(s)

DR-057

Locations: 1 file(s)

DR-058

Locations: 1 file(s)

DR-059

Locations: 1 file(s)

DR-060

Locations: 1 file(s)

DR-061

Locations: 1 file(s)

DR-062

Locations: 3 file(s)

DR-063

Locations: 14 file(s)

DR-064

Locations: 3 file(s)

DR-065

Locations: 2 file(s)

DR-066

Locations: 5 file(s)

DR-067

Locations: 3 file(s)

DR-068

Locations: 1 file(s)

DR-069

Locations: 1 file(s)

DR-070

Locations: 1 file(s)

DR-074

Locations: 17 file(s)

DR-075

Locations: 1 file(s)

DR-076

Locations: 2 file(s)

DR-077

Locations: 2 file(s)

DR-078

Locations: 6 file(s)

DR-079

Locations: 2 file(s)

DR-080

Locations: 2 file(s)

DR-081

Locations: 2 file(s)

DR-082

Locations: 20 file(s)

DR-083

Locations: 19 file(s)

DR-084

Locations: 2 file(s)

DR-085

Locations: 15 file(s)

DR-086

Locations: 1 file(s)

DR-087

Locations: 4 file(s)

DR-088

Locations: 2 file(s)

DR-089

Locations: 4 file(s)

DR-090

Locations: 1 file(s)

DR-091

Locations: 2 file(s)

DR-092

Locations: 2 file(s)

DR-093

Locations: 4 file(s)

DR-095

Locations: 1 file(s)

DR-096

Locations: 1 file(s)

DR-097

Locations: 6 file(s)

DR-098

Locations: 4 file(s)

DR-099

Locations: 2 file(s)

JA-001

Locations: 1 file(s)

JA-002

Locations: 2 file(s)

JA-003

Locations: 1 file(s)

JA-004

Locations: 3 file(s)

JA-005

Locations: 1 file(s)

JA-007

Locations: 1 file(s)

JA-010

Locations: 2 file(s)

JA-011

Locations: 2 file(s)

JA-012

Locations: 2 file(s)

JA-016

Locations: 1 file(s)

JA-017

Locations: 1 file(s)

JA-019

Locations: 1 file(s)

JA-020

Locations: 1 file(s)

JA-021

Locations: 6 file(s)

JA-022

Locations: 3 file(s)

JA-023

Locations: 3 file(s)

JA-024

Locations: 2 file(s)

JA-025

Locations: 4 file(s)

JA-026

Locations: 3 file(s)

JA-028

Locations: 1 file(s)

JA-029

Locations: 3 file(s)

JA-030

Locations: 2 file(s)

JA-031

Locations: 2 file(s)

JA-032

Locations: 10 file(s)

UR-002

Locations: 16 file(s)

UR-003

Locations: 20 file(s)

UR-004

Locations: 15 file(s)

UR-005

Locations: 66 file(s)

UR-007

Locations: 15 file(s)

UR-009

Locations: 15 file(s)

UR-011

Locations: 11 file(s)

UR-014

Locations: 1 file(s)

UR-017

Locations: 9 file(s)

UR-019

Locations: 12 file(s)

UR-023

Locations: 24 file(s)

UR-026

Locations: 19 file(s)

UR-027

Locations: 23 file(s)

UR-028

Locations: 2 file(s)

UR-029

Locations: 5 file(s)

UR-034

Locations: 10 file(s)

UR-035

Locations: 5 file(s)

UR-038

Locations: 1 file(s)

UR-040

Locations: 27 file(s)

UR-041

Locations: 1 file(s)

UR-048

Locations: 3 file(s)

UR-049

Locations: 18 file(s)

UR-050

Locations: 9 file(s)

UR-053

Locations: 17 file(s)

UR-055

Locations: 27 file(s)

UR-056

Locations: 17 file(s)

UR-057

Locations: 1 file(s)

UR-058

Locations: 4 file(s)

IT-004

Locations: 1 file(s)

IT-013

Locations: 4 file(s)

IT-016

Locations: 1 file(s)

IT-017

Locations: 1 file(s)

UT-003

Locations: 1 file(s)

UT-005

Locations: 1 file(s)

UT-010

Locations: 1 file(s)

UT-014

Locations: 2 file(s)

UT-015

Locations: 2 file(s)

UT-016

Locations: 2 file(s)

UT-017

Locations: 2 file(s)

UT-018

Locations: 2 file(s)

UT-019

Locations: 2 file(s)

UT-020

Locations: 2 file(s)

UT-021

Locations: 2 file(s)

UT-022

Locations: 2 file(s)

UT-023

Locations: 2 file(s)

UT-024

Locations: 1 file(s)

UT-025

Locations: 2 file(s)

UT-026

Locations: 2 file(s)

UT-027

Locations: 1 file(s)

UT-028

Locations: 1 file(s)

UT-029

Locations: 1 file(s)

UT-031

Locations: 1 file(s)

UT-032

Locations: 1 file(s)

UT-033

Locations: 1 file(s)

UT-051

Locations: 1 file(s)

UT-052

Locations: 1 file(s)

UT-059

Locations: 3 file(s)

UT-060

Locations: 2 file(s)

UT-061

Locations: 9 file(s)

UR-061

Locations: 4 file(s)

UT-062

Locations: 1 file(s)

UT-067

Locations: 1 file(s)

UT-071

Locations: 1 file(s)

UT-085

Locations: 2 file(s)

UT-086

Locations: 2 file(s)

UT-087

Locations: 2 file(s)

UT-088

Locations: 1 file(s)

UT-089

Locations: 1 file(s)

UT-090

Locations: 1 file(s)

UT-092

Locations: 1 file(s)

UR-008

Locations: 2 file(s)

UR-010

Locations: 15 file(s)

UR-012

Locations: 9 file(s)

UR-013

Locations: 2 file(s)

UR-015

Locations: 13 file(s)

UR-018

Locations: 3 file(s)

UR-020

Locations: 4 file(s)

UR-021

Locations: 5 file(s)

UR-024

Locations: 2 file(s)

UR-025

Locations: 16 file(s)

UR-030

Locations: 2 file(s)

UR-031

Locations: 2 file(s)

UR-036

Locations: 3 file(s)

UR-039

Locations: 1 file(s)

UR-043

Locations: 2 file(s)

UR-051

Locations: 2 file(s)

UR-052

Locations: 10 file(s)

UR-054

Locations: 3 file(s)

UR-059

Locations: 6 file(s)

UR-060

Locations: 3 file(s)

UT-042

Locations: 1 file(s)

UT-043

Locations: 1 file(s)

UT-066

Locations: 1 file(s)

UT-072

Locations: 1 file(s)

UT-073

Locations: 1 file(s)

UT-074

Locations: 1 file(s)

UT-075

Locations: 1 file(s)

UT-076

Locations: 1 file(s)

UT-077

Locations: 1 file(s)

UT-078

Locations: 1 file(s)

UT-079

Locations: 1 file(s)

UT-080

Locations: 1 file(s)

UT-081

Locations: 1 file(s)

UT-082

Locations: 1 file(s)

UT-091

Locations: 2 file(s)

UR-032

Locations: 7 file(s)

UR-033

Locations: 12 file(s)

IT-003

Locations: 1 file(s)

UT-004

Locations: 1 file(s)

UT-012

Locations: 1 file(s)

UR-016

Locations: 2 file(s)

UT-030

Locations: 1 file(s)

UT-083

Locations: 1 file(s)

UT-084

Locations: 1 file(s)

UR-022

Locations: 1 file(s)

UR-044

Locations: 1 file(s)

UR-045

Locations: 1 file(s)

UR-046

Locations: 1 file(s)

UR-047

Locations: 1 file(s)

UT-044

Locations: 1 file(s)

UR-042

Locations: 1 file(s)