70dcc75035
PlaybackReporter and ProgressReporter now return an error. The UI logs it at the three fire-and-forget call sites, so jellyfin, emby, and navidrome gain the observability audiobookshelf had — they were dropping their client errors silently. Player state is read on the UI goroutine and passed into the closures, so the reports stay race-free.