What happened?
After I deleted a secondary user on my Jellyfin server, that user still appears in Sodalite as a remembered profile — in both the launch profile picker and Settings → Profile.
Sodalite never reconciles its locally-stored remembered-profile list against the server's current users. Remembered profiles live in the keychain (one cached access token each) and every picker renders straight from that local list. SessionRestorer.restore() runs entirely off local keychain/preferences with no network call, so a cold launch never checks them. /Users/Public is fetched only on the "Add another profile" screen, and only to hide already-added users — never to prune ones that vanished. The only auto-prune path (probeActiveUser) runs solely on a server switch and only for the currently-active profile via a /Users/Me 401; it never inspects the other remembered profiles.
Expected: Sodalite drops any remembered profile that is no longer a valid user on the server — e.g. on cold launch / when a profile grid is shown, or when a cached token is rejected with 401.
Manual removal does exist (press-and-hold a profile card → "Remove profile"), but: (a) there's no on-screen hint for it in the launch picker and it's hard to discover on tvOS, and (b) it's disabled for the profile you're currently signed in as, so if the deleted server user is your active profile the only recourse is a full Logout.
Steps to reproduce
- On the Jellyfin server, create a second user.
- In Sodalite: Settings → Profile → "Add another profile", sign in as that second user so it's saved as a remembered profile, then switch back to your main profile.
- On the Jellyfin server, delete the second user.
- Relaunch Sodalite and/or open the launch profile picker and Settings → Profile.
- Observe: the deleted user is still listed as a selectable profile. Nothing in the app removes it. Selecting it just fails (its token is now invalid) without cleaning the entry up.
Sodalite build
1.0.0 (build 22)
tvOS version
26
Apple TV model
Apple TV 4K (gen 3)
Jellyfin server version
10.11.11
Media (if a playback bug)
N/A
Anything else
- Relevant code:
DependencyContainer.listRememberedUsers / forgetUser (keychain rememberedUsers blob), SessionRestorer.restore() (local-only), UserPickerView.loadUsers() (/Users/Public, add-only), DependencyContainer.probeActiveUser() (active-user-only 401 prune, server-switch-only), refreshActiveUserDetails() (swallows errors).
- Suggested fix: when building the launch/Settings profile grid (or on cold launch), fetch
/Users/Public once and drop any remembered profile whose ID is absent from the server's list; record the removal through the existing forgottenUsers mechanism so it propagates via cloud sync. Separately: show the "press and hold to remove" hint in the launch picker too, and allow manual removal of the active profile (falling back to Logout when it's the last one).
What happened?
After I deleted a secondary user on my Jellyfin server, that user still appears in Sodalite as a remembered profile — in both the launch profile picker and Settings → Profile.
Sodalite never reconciles its locally-stored remembered-profile list against the server's current users. Remembered profiles live in the keychain (one cached access token each) and every picker renders straight from that local list.
SessionRestorer.restore()runs entirely off local keychain/preferences with no network call, so a cold launch never checks them./Users/Publicis fetched only on the "Add another profile" screen, and only to hide already-added users — never to prune ones that vanished. The only auto-prune path (probeActiveUser) runs solely on a server switch and only for the currently-active profile via a/Users/Me401; it never inspects the other remembered profiles.Expected: Sodalite drops any remembered profile that is no longer a valid user on the server — e.g. on cold launch / when a profile grid is shown, or when a cached token is rejected with 401.
Manual removal does exist (press-and-hold a profile card → "Remove profile"), but: (a) there's no on-screen hint for it in the launch picker and it's hard to discover on tvOS, and (b) it's disabled for the profile you're currently signed in as, so if the deleted server user is your active profile the only recourse is a full Logout.
Steps to reproduce
Sodalite build
1.0.0 (build 22)
tvOS version
26
Apple TV model
Apple TV 4K (gen 3)
Jellyfin server version
10.11.11
Media (if a playback bug)
N/A
Anything else
DependencyContainer.listRememberedUsers/forgetUser(keychainrememberedUsersblob),SessionRestorer.restore()(local-only),UserPickerView.loadUsers()(/Users/Public, add-only),DependencyContainer.probeActiveUser()(active-user-only 401 prune, server-switch-only),refreshActiveUserDetails()(swallows errors)./Users/Publiconce and drop any remembered profile whose ID is absent from the server's list; record the removal through the existingforgottenUsersmechanism so it propagates via cloud sync. Separately: show the "press and hold to remove" hint in the launch picker too, and allow manual removal of the active profile (falling back to Logout when it's the last one).