• v2026.07.02 — Android auto-recovery: failed loads heal on reconnect
    android / Build + lint + test (push) Successful in 4m44s
    release / Build signed APK (tag releases only) (push) Successful in 4m31s
    release / Build + push container image (push) Successful in 16s
    Stable

    bvandeusen released this 2026-07-02 16:45:36 -04:00 | 12 commits to main since this release

    Fixes the "fails once, stays broken forever" behavior (issue #1245, PR #106): a screen that failed to load in a dead zone or during a server restart now heals itself the moment connectivity returns — no more navigating away and back or pull-refreshing to unstick the app.

    Install this APK to get screen-level auto-recovery everywhere.

    Auto-recovery on reconnect

    • New NetworkStatusController.recoveries() signal — the screen-level half of the recovery idiom the sync/mutation/diagnostics singletons already used.
    • Every screen re-runs its load when server health returns: Home, Playlists, Liked, History, Hidden, Requests, Search, Discover, Album/Artist/Playlist detail, and all four admin screens. Direct-load screens only re-fetch from an error state, so good content never flashes a spinner.

    Failure no longer looks like an empty account

    • Cold-start against an unreachable server used to show "Welcome to Minstrel" / "No playlists yet". Home, Playlists, Liked, and Library now surface a real "Couldn't load…" error with a Retry button when the cache is empty and the refresh failed. A failed refresh over cached content stays silent — stale beats a full-screen error.

    Stuck corners unstuck

    • Requests: the 12s progress poll can now escape a failed initial load (it previously required a loaded list to ever fire), which also covers server errors that transport-level health monitoring never sees.
    • Search: re-running the same query after a transient failure now works, and the error state has a Retry button.
    • Artist detail: "Similar artists" / "Top tracks" re-fetch on recovery instead of staying silently absent after a blip.

    Consistent Retry everywhere

    • The shared error widget gained a title and now participates in pull-to-refresh, and it's used on every error branch — every load failure in the app is now recoverable by button, pull, or automatically on reconnect.

    Use it

    Install the APK, then try it: airplane-mode the phone, open a tab so it errors, drop out of airplane mode — the screen should populate itself within seconds of the server probe going healthy.

    🤖 Generated with Claude Code

    Downloads