Improved
- A Finished Card Instead of a Prompt - When a book is finished and the playhead is parked at its end, the scrubber gives way to a You finished this book card: Continue the Series, Next on your Reading List (Premium), Listen Again, and Mark as Not Finished. If the book left your Reading List on its own, the Removed from Reading List row and its Undo are right there in the card. Nothing is modal - the card sits in the player, and you can leave it alone. It replaces both the old What's Next? sheet and the free tier's "Start Next Book?" alert, and it shows up identically whether the book ended with the player on screen or hours ago with the phone locked. The play button dims and reads "Finished" under VoiceOver while the card is up, because at that position play genuinely has nothing to do, and the mini player says Finished rather than counting down a time remaining that is zero
Fixed
- A Book That Ended in Your Pocket Isn't a Dead End - The old sheet and alert were both driven off the live finish event, which fires exactly once, when the last track plays out. If iOS suspended the app before you next opened the player - a book ending at 2am, a drive that ran past the last chapter - that event was already spent. You got a player that looked ready and a play button that did nothing, which is correct behavior at the end of a finished book and a terrible thing to look at. The card is derived from your progress record and the playhead instead, so it can't be missed by not being there to see it. The finish also now syncs under a background task, so a book that ends with the phone locked still tells your server about it
- The Chapter Scrubber Stays Chapter-Scaled at the End - A position parked exactly at the end of a book matched no chapter, because the chapter lookup treated every chapter as ending just before its last instant. With no current chapter, the chapter-timeframe scrubber quietly fell back to book scale - so a small drag back from the right edge, meant to replay the last few seconds, threw you 30 to 75 minutes into the past. The final chapter now owns its own end
- Finished Books Stop Reappearing in Ready to Listen - Ready to Listen reads a missing progress record as "not finished yet", and three paths could leave it without the server's records: a bootstrap that failed once - offline, or a LAN server unreachable on a background launch - never retried, switching libraries cleared progress that isn't per-library in the first place, and the on-device cache only knows the books this device played. Ready to Listen now waits for your server's progress to land before it draws, a failed bootstrap retries on the next launch instead of giving up silently, and switching libraries keeps what it already knew